python学习笔记--函数定义和用法,可变参数和关键字参数用法总结

前言

在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函数中的参数太多了,不熟悉概念和用法的,很容易给搞懵逼了。
注意定义可变参数和关键字参数的语法:

  • *args是可变参数,args接收的是一个tuple;
  • **kw是关键字参数,kw接收的是一个dict。
  • 定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。

另外,函数还有很多东西,比如匿名函数,作用域和闭包,装饰器,高阶函数等,后面学习到再总结

资料来源: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

发布了15 篇原创文章 · 获赞 21 · 访问量 7945

猜你喜欢

转载自blog.csdn.net/weixin_42050895/article/details/103946419