一、函數有可變類型和不可變類型:
1.不可變類型
#!/usr/bin/python3
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print( b ) # 結果是 2
2.可變類型
在函數里修改了參數,那在調用這個函數時候,原始函數也會改變
def change(a):
a.append([1,2,3,4])
print('調用函數',a)
return
a=[10,20,30,40]
change(a)
print('外部修改',a)
結果為:
調用函數 [10, 20, 30, 40, [1, 2, 3, 4]]
外部修改 [10, 20, 30, 40, [1, 2, 3, 4]]
二、參數有4種
1.必要參數
#可寫函數說明
def printme( str ):
"打印任何傳入的字符串"
print (str)
return #調用printme函數
printme()
這樣會返回錯誤
2.關鍵字參數
def keyword(name,age):
print('請輸入姓名',name)
print('請輸入年齡',age)
return
print(keyword(name='一個個',age=24))
print(keyword('一個個',24))
輸出結果:
請輸入姓名 一個個
請輸入年齡 24
3.默認參數
def keyword(name,age=60):
print('請輸入姓名',name)
print('請輸入年齡',age)
return
print(keyword('一個個'))
print(keyword('一個個',24))
可以省略,也可以修改
結果如下:
請輸入姓名 一個個
請輸入年齡 60
None
請輸入姓名 一個個
請輸入年齡 24
None
4.不定長參數
加一個* 是元祖,兩個星是字典
(1):元祖
def nottrue(arg,*args):
print('打印arg',arg)
print('打印args',args)
return
nottrue(60,70,80)
返回結果
打印arg 60
打印args (70, 80)
(2):字典
def nottrue(arg,**args):
print('打印arg',arg)
print('打印args',args)
return
nottrue(60,a=70,b='fanfan')
返回結果:
打印arg 60
打印args {'a': 70, 'b': 'fanfan'}
***聲明函數時,參數中星號 * 可以單獨出現,如果單獨出現星號 * 后的參數必須用關鍵字傳入***
>>> def f(a,b,*,c): ... return a+b+c ... >>> f(1,2,3) # 報錯 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 2 positional arguments but 3 were given >>> f(1,2,c=3) # 正常 6 >>>