1.函數的定義
def 函數名():
函數體
return 返回值1,返回值2
函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢。
如果沒有return語句,函數執行完畢後也會返回結果,只是結果爲None。
空函數
如果想定義一個什麼事也不做的空函數,可以用pass語句
def fun():
pass
2.函數的調用
函數名()
注意:定義函數時,函數不執行,調用函數時, 函數才執行
調用函數的時候,如果傳入的參數數量不對,會報TypeError的錯誤
In [1]: abs(1,2)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-1-d2854b9957d6> in <module>()
----> 1 abs(1,2)
TypeError: abs() takes exactly one argument (2 given)
如果傳入的參數數量是對的,但參數類型不能被函數所接受,也會報TypeError的錯誤
In [2]: abs("a")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-05efdfd16af5> in <module>()
----> 1 abs("a")
TypeError: bad operand type for abs(): 'str'
實現打印返回值: print 函數名()
In [4]: def add(x,y):
...: return x+y
...:
In [5]: print add(1,2)
3
3.函數的參數
- 必選參數
#形式參數x, y
def add(x, y):
print x + y
#實參 x=1, y=2
add(1 2)
3
- 默認參數
把一個參數默認爲一個固定的值
#把y作爲默認參數,默認值爲2
def mypow(x,y=2):
print x**y
#調用時,只用一個必選參數,可以省略默認參數
mypow(2)
從上面的例子可以看出,默認參數可以簡化函數的調用。設置默認參數時,有幾點要注意:
必選參數在前,默認參數在後,否則Python的解釋器會報錯
當函數有多個參數時,把變化大的參數放前面,變化小的參數放後面。變化小的參數就可以作爲默認參數
定義默認參數要牢記默認參數必須指向不變對象
- 可變參數
可變參數就是傳入的參數個數是可變的,可以是1個、2個到任意個,還可以是0個,這些可變參數在函數調用時自動組裝爲一個tuple
#args 實質上是一個元組 ;
def add(*args):
sum = 0
for i in args:
sum += i
print sum
# 實參 , x=1, y=2
add(1 2 3 4 5 6 2 3 4 5 76)
- 關鍵字參數
而關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict
# kwargs 實質上是一個字典
def inuser(name, age, **kwargs):
print name, name, kwargs
#在調用該函數時,可以只傳入必選參數,也可以傳入任意個數的關鍵字參數
inuser("user1",12,city="xi'an",birth="20180101")
- 參數組合
在Python中定義函數,可以用必選參數、默認參數、可變參數、關鍵字參數,這4種參數都可以組合使用。參數定義的順序必須是:必選參數、默認參數、可變參數、關鍵字參數。
4.函數返回值
- 函數中如果沒有return時, 默認返回None
- 返回值爲1個
- 返回多個值
# 實質上 python 只能返回一個值,間接通過元組返回多個值 ;
def fun(*args):
return max(args), min(args)
print fun(1,2,3,4,5,6)
5.函數的作用域
num = 1
def fun():
num = 5
fun()
print num
運行效果:
1
由於函數體外的num爲全局變量,函數體內的num爲局部變量,只作用於函數體內,當在函數體外輸出num的值,自然時全局變量num生效
# 全局變量
num = 1
def fun():
# global 聲明 num 爲全局變量
global num
num = 5
fun()
print num
運行效果:
5
注意:global關鍵字必須要先聲明, 再賦值