文章目录
简介
在pyton中,函数与任何其它对象(字符串,数字,列表)一致,既可以动态地创建或销毁,也可以传递给其它函数,或者作为值进行返回。
将函数绑定到不同的名称
Python中的一切皆对象,我们定义的名称仅仅是与这些对象绑定的标识符。函数也不例外,它们也是对象,同样可以被绑定到不同的名称。
def add(x,y):
return x+y
# 输出 add 的内存地址
>>>add
<function add at 0x000001BF84F9AD30>
# 将 add 的内存地址当作值赋值给变量 f
>>>f = add
>>>f
<function add at 0x000001BF84F9AD30>
# 等同与 add(3,4)
>>>f(3,4)
7
将函数作为参数
在Python中,将其它函数作为参数的函数成为高阶函数,比如: map,filter
下边我们定义两个函数: add()-求和 ,subtract()-求差 ,operate()-作为高阶函数
# 求和
def add(x,y):
return x+y
# 求差
def subtract(x,y):
return x-y
# 高阶函数 ,将函数作为参数
def operate(func,x,y):
return func(x,y)
# 调用函数
>>>operate(add,5,3)
8
>>>operate(subtract,5,3)
2
这样就可以将函数对象 add 和 subtract 当作 operate() 的参数进行传递了,使用起来非常方便!
将函数作为返回值
来看一个简单的求和函数
def outer(): # 封闭函数
def inner(n): # 嵌套函数
sum = 0
for i in range(1, n):
sum += i
return sum
return inner # 返回一个函数对象
当每次调用封闭函数时,都会创建一个嵌套函数的新实例:
>>> f = outer()
>>> f
<function out.<locals>.add at 0x000002650B7DADC0>
>>> f1 = outer()
>>> f1
<function out.<locals>.add at 0x000002650B7DAE50>
显然,f和f1不同,这是因为inner()是在执行outer()期间被定义的,所以第二次的创建对第一次没有影响。
当调用f(n)时,才会真正地计算求和结果:
>>> f(4)
6
>>> f1(10)
45