1,函數名賦值給變量
def func(x):
return x
f=func #把函數名賦值給變量
print(f(1)) #用變量調用這個函數
再來個PHP的
<?php
function func($x){
echo $x;
}
$f='func';
$f(1);
?>
效果一樣
2,函數多個默認參數的設置
def func(x,y='y',z='z'):
return x+y+z
print(func('a',z='c')) #跳過y參數直接設置z參數,輸出ayc
php 的
function func($x,$y='y',$z='z'){
echo $x.$y.$z;
}
func('a',$z='c');
//輸出acz 而不是想要的ayc,證明php參數必須順序對應,即使func('a',$b='b',$c='c')這樣,依舊按照順序輸出:abc,這點php解釋器做的不怎麼樣,差評
3,python 函數返回多個值,這點php是做不到的,php 只能返回一個
def func(name,age=19):
return name,age
print(func('lianf'))
#輸出('lianf', 19),其實是tuple 類型的一個不可變列表
可變的參數
def func(name,*km):
return name,km
print(func('lianf',1,2,3,4,6))
#輸出('lianf', (1, 2, 3, 4, 6)),可變的部分是一個tuple,可以用for x in km 循環出來如下:
def func(name,*km):
s=name+":"
for x in km:
s=s+x
return s
print(func('lianf',"a","b","c"))
#輸出 lianf:abc,靈活,牛逼,慢慢喜歡上了這個語言
4,關鍵字(key)參數,這個也很牛逼,可以傳不定長的字典dic也就是java 裏的map (key-values )鍵值對作爲參數
def func(name,**km):
return name,km
print(func('liangf',a=1,b="bb"))
#輸出('liangf', {'a': 1, 'b': 'bb'}),注意{} 注意這個大括號牛逼!!!
命名關鍵字參數
def func(name,*,b,c):
return name,b,c
print(func('lianf',b=1,c='a'))
#輸出('lianf', 1, 'a')
在Python中定義函數,可以用必選參數、默認參數、可變參數、關鍵字參數和命名關鍵字參數,這5種參數都可以組合使用。但是請注意,參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。
def func(name,age=18,*a,b,c,**k):
return name,age,a,b,c,k
print(func('lianf',1,2,3,b=1,c='a',n='n',m='m'))
#輸出:('lianf', 1, (2, 3), 1, 'a', {'n': 'n', 'm': 'm'})
*args是可變參數,args接收的是一個tuple;
**kw是關鍵字參數,kw接收的是一個dict。
以及調用函數時如何傳入可變參數和關鍵字參數的語法:
可變參數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過args傳入:func((1, 2, 3));
關鍵字參數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過kw傳入:func({‘a’: 1, ‘b’: 2})。
使用*args和**kw是Python的習慣寫法,當然也可以用其他參數名,但最好使用習慣用法。
命名的關鍵字參數是爲了限制調用者可以傳入的參數名,同時可以提供默認值。
定義命名的關鍵字參數在沒有可變參數的情況下不要忘了寫分隔符*,否則定義的將是位置參數。