目錄
1. What is 函數?
以前我們都熟知函數有一次函數(正比例函數),二次函數,三次函數等等各種數學公式。通過各種方式求得結果的一種解決方法,而這裏也是一樣,函數就是一種解決方法。接下來我們就來看下函數的定義:
邏輯框架:
def 函數名([參數1],[參數2],[….]):
函數體
值得注意的有:1.函數嚴格區分大小寫 2.函數重名會被覆蓋 3.函數後面有一個冒號 4.函數名遵循命名規則
瞭解完定義,還得知道怎麼用纔是運用。接下來就來講解函數的調用,其中方式爲:
函數名([參數1],[參數2…])
2. 函數的參數
2.1普通參數
瞭解完函數的定義及調用,接下來我們就可以體會一下其中的內涵啦!!!首先是函數中的參數,其中參數有形參(在定義函數的時候 括號內的變量)以及實參(在函數調用的時候 傳入的參數),然後就是關鍵字參數,對於關鍵字就是你的形參名可以形容在調用的時候使用形參名=值
例如:
def func(a,b,c): #a,b,c爲形式參數
pass
func(1,2,3) #其中1,2,3爲實際參數
func(c=10,b=20,a=30) # 關鍵字參數
在瞭解參數定義的以後,我們能聯想到在生活中有很多東西都是規定好的(默認的),因此在這裏有定義一個默認參數,其中機構爲:
def 函數名(參數名=值…):
實例:
def func(a = 10, b = 10): # 正確給形參默認值的操作
def func(a, b = 10): # 正確給形參默認值的操作
#def func(a = 10, b): # 錯誤給形參默認值的操作
pass
注意:
- 函數在定義的時候 如果有形參 且沒有默認值,必須傳實參
- 如果沒有形參則不能傳實參
- 如果形參沒有默認值 那麼實參的個數必須和形參的個數相同
- 如果形參有默認值 那麼可以不用傳實參
- 形參和實參一一對應
- 當給形參的默認值時 必須遵循默認值的規則
2.2 收集參數
由於python的隨意性,我們瞭解在很多情況下,也就是傳入的參數的個數不固定,我們引入了收集參數的定義。同時地下出現了元組與字典屬性,對於元組類型,是個有序的集合。而對於字典類型,我們可以理解爲成對出現的鍵值對,能夠從前面探知到後面的類型。
(1) 以元組的形式去接收 *參數名 (任意數量的實參)
注意的有:
- args前面帶有星號*
- 能夠與普通參數共存
實體結構:
def 函數名(*args): (args 可以隨意取)
pass
-
實例:
def demo(*args): print(args) print(type(args)) # 都爲tuple # demo(1,2,3,4) # (1, 2, 3, 4) demo(1) # (1,) demo() # () 空元組
(2) 以字典的形式去接收不確定實參 **kwargs (任意數量的關鍵字實參)
主體結構:
def 函數名(**kwargs): pass
函數名(x=1,y=2,z=3)
實例:
def demo(**kwargs): print(kwargs) # {'x': 1, 'y': 2, 'z': 3, 'a': 4} print(type(kwargs)) # <class 'dict'> demo(x =1,y=2) # ok
(3) 將參數爲字典的值變成爲關鍵字參數傳入函數 **實參名
主體結構:
def 函數名(**kwargs): passmyDict = {'x':1,'y':2} # 字典的值 函數名(**myDict) # 等價於需要傳入關鍵字參數 函數名(x=1,y=2)
實例:
-
def func(**kwargs): print(kwargs) myDict = {'x':1,'y':2} func(**myDict) # ok # {'x': 1, 'y': 2}
(4) *args和**kwargs的組合
-
主體結構:
-
def 函數名(*args,**kwargs): pass
注意:
- *args和**kwargs的實參可傳可不傳,不傳的話爲空元組,空字典
- *args和**kwargs的實參 可以對某個不進行傳參 某個不傳參數的爲空元組或空字典
- 組合的順序: 位置參數,默認參數(x=1),可變參數(args),鍵值對參數(關鍵字參數kwargs)
實例:
def func4(*args, **kwargs):
print(args)
print(kwargs)
func4(x=1,y=2) # () {'x'= 1, 'y'= 2}
func4(x=5) #{'x'= 5}
3. 函數的返回值return
1.return 會把值返回給調用處(就是函數名()的位置)
函數執行遇到return 就認爲執行完畢 下面代碼不在執行
def sum(x, y):
print("輸出的和爲:")
return x + y # 函數執行 遇到return 就認爲函數完畢 下面代碼不在執行
# print("輸出的和就是:") # 不執行
print(sum(1, 2)) # 返回值爲 3
2.return 返回多個值
def func():
pass
return 1,2,3
# tuple 這種寫法返回元組
3.函數無返回值時,默認返回NONE
4.函數變量的作用域
對於變量而言,我們主要研究在於範圍,其中有全局和局部之分。而在函數這部分講解,是因爲他的區分是在函數。在函數外部定義的變量我們稱之爲全局變量,在函數內部定義的變量我們稱之爲局部變量。值得注意的是:函數內可以用全局變量,但函數外不可以用局部變量。
實例
num1 = 23 #全局變量
def func1():
print(num1) #23
func1
def func2():
num2 = 32423dfjk
print('局部變量爲:{0}'.format(num2))
dunc2()
print('num2') #NONE
但是爲了方便,我們可以將局部變量聲明爲全局變量,關鍵字爲global
num1 = 11 #全局變量
def func3():
global num1 = 22 #局部變量爲全局變量
print(num1)
func3()
print(num1) #結果爲22
5. 函數導入的方式
在瞭解到這些之後,我們必須的有一個更高的認識。對於日常中我們經常會建立文件夾來歸類相同的事物,等需要用時就知道在哪進行打開,對於函數也是如此。每當我們定義好一個函數以後,就會將它進行打包放到一個庫中,等日後需要用時,我們就進行調用,其形式如下所示:
from 庫名 import 包名
from 庫名 import 包名 as 別名
from 庫名.包名 import 方法名1,方法名2,…
import 包名 as 別名
___name___:系統屬性 可以在包被引入時候 可以判斷當前程序執行是否在主文件裏,在主文件裏值爲__main__
作用:在運行時檢測該模塊是被導入還是被直接執行
如果模塊是被導入,__name__的值爲模塊名字;如果是被直接執行,__name__的值爲"__main__"。
注意:
- 不要將包或者庫的名字中存在數字,起一個規範的有意義的字母的名字
- 如果模塊包含的屬性和方法與你的某個模塊同名,你必須使用import module來避免名字衝突
6.函數文檔
函數文檔的作用在於提供函數相應的參考信息
6.1文檔寫法
- 使用三引號來進行註釋
- 一般具有特定格式
- 參看案例
-
def func5(): ''' 這是多行註釋信息 註釋函數作用 不在運行中 ''' for i in [1:20]: print(i) func5()
6.2文檔查看
- 使用函數help,形如help(func);
- 使用_doc_,查看案例
-
help(func5()) func5._doc_