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的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。
命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。
定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。