在PHP中定义函数是用function关键字,后面带着函数名和一对括号,括号里可以带着参数,这样来组装成一个函数的。在python中,关键字改为了 def,其中函数参数这块也有很大不一样。
可以使用def关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,函数执行完成后我们可以通过return关键字来返回一个值。
def add(a, b,c )
return a + b +c
print(add(1, 2, 3)) # 调用函数,输出 6
上例中,a,b,c就是函数的参数,这种是位置参数,位置固定的。
在php中,函数的参数可以是数组,这样我们传入一个数组,就可能包含很多个key=>value,需要在函数里处理使用,这种属于可变参数。
python中,可变参数可以使用*args来定义
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
def add(*bb): #在参数名前面的*表示bb是一个可变参数
c = 0
for x in bb:
c = c+x
return c
print(add()) #输出0
print(add(1,2)) #输出3
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
用途:可以扩展函数的功能,除了一些必传的数据,后面扩展功能时也可以通过关键字参数进行传值。
def add(*bb, **abc): # **abc 声明abc是关键字参数,组装为一个dict
c = 0
for x in bb:
c = c+x
print('关键字参数:%s' % abc)
return c
print(add(1,2, name='python')) ## 调用时也是使用 参数名=值 来传参
输出:
关键字参数:{
'name': 'python'}
3
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部来检查。
如果要限制关键字参数的名字,就可以用命名关键字参数。
和关键字参数**abc不同,命名关键字参数需要一个特殊分隔符 , 后面的参数被视为命名关键字参数。
def person(name, age, *, city, job):
print(name, age, city, job)
>>> person('Jack', 24, city='Beijing', job='Engineer')
Jack 24 Beijing Engineer
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)
相对PHP,python函数中的参数太多了,不熟悉概念和用法的,很容易给搞懵逼了。
注意定义可变参数和关键字参数的语法:
另外,函数还有很多东西,比如匿名函数,作用域和闭包,装饰器,高阶函数等,后面学习到再总结
资料来源:https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888
https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/06.%E5%87%BD%E6%95%B0%E5%92%8C%E6%A8%A1%E5%9D%97%E7%9A%84%E4%BD%BF%E7%94%A8.md