文章目录
函数
函数的定义
函数就是对实现某一特定功能的代码的封装。
在Python中可以使用def
关键字来定义函数,函数的命名规则跟变量的命名规则是一致的。
# 定义函数:def是定义函数的关键字、fac是函数名,num是参数(自变量)
def fac(num):
"""求阶乘"""
result = 1
for n in range(1, num + 1):
result *= n
# 返回num的阶乘(因变量)
return result
函数的参数
- 位置参数:传入参数的时候对号入座即可;也可以通过
参数名=参数值
的方式传入函数所需的参数,因为指定了参数名,传入参数的顺序可以进行调整。 - 命名关键字参数:在函数的参数列表中,写在
*
之后的参数,传参时,只能以参数名=参数值
的方式传参。 - 关键字参数:Python中可以通过
*kwargs
表达式语法传入0个或任意多个参数名=参数值
形式的参数,关键字参数会将传入的带参数名的参数组装成一个字典,参数名就是字典中键值对的键,而参数值就是字典中键值对的值。 - 可变参数:可以实现向一个函数中传0个或任意多个参数,Python中可以通过
*args
表达式语法来支持可变参数。(不能接收带参数名的参数)
注意:不带参数名的参数(位置参数)必须出现在带参数名的参数(关键字参数)之前
def add(*args, **kwargs):
"""加法"""
total = 0
for arg in args:
if type(arg) in (int, float):
total += arg
for value in kwargs.values():
if type(value) in (int, float):
total += value
return total
# 传入0个参数
print(add())
# 只传入可变参数
print(add(1, 2, 3))
# 只传入关键字参数
print(add(a=1, b=2, c=3))
# 传入位置参数和关键字参数,关键字参数在*args的‘*’之后,因此也是命名关键字参数
print(add(1, 2, c=3, d=4))
用模块管理函数
Python中每个文件就代表了一个模块(module),在不同模块可以有同名的函数,在使用函数时,通过import
关键字导入指定的模块,再使用完全限定名的调用方式就可以区分是哪个模块中的函数。
高阶函数
函数的参数和返回值可以是任意类型的对象,这就意味着函数本身也可以作为函数的参数或返回值,这就是所谓的高阶函数。
# 中间两个参数是命名关键字参数,必须带上参数名
def calculate(*args, init_value, op, **kwargs):
"""可以做任意二元运算的函数
:param init_value:初始值
:param op: 一个实现二元运算(+、*)的函数
:param args: 位置参数
:param kwargs: 关键字参数
:return: 运算结果
"""
total = init_value
for arg in args:
if type(arg) in (int, float):
total = op(total, arg)
for value in kwargs.values():
if type(value) in (int, float):
total = op(total, value)
return total
def add(a, b):
return a + b