# -*- coding:utf-8-*-
# ___author__:90948
# 2019-12-22
#函数名赋值给变量
def func1():
print(666)
f = func1
f()
func1()
print("=======================")
#函数名可以作为参数传递 1:
def func2():
print('这是fun2函数')
def func3(x):
return x
#func2作为参数传递
func3(func2)#这样没有返回值
'''
我们来看看为什么,
这样 func3(func2) 等于下面这样
def func3(func2):
return func2
print(func3(func2))#<function func2 at 0x035D0540>
print(func3(func2).__name__)#func2
'''
#所以返回的是一个函数的名字,要执行这个函数需要()
func3(func2)()#返回值是:这是fun2函数
#因为返回函数名,而函数名只是被封装起来,只有返回函数名()才会被调用
s = func3(func2)
s()
print("=======================")
#函数名可以作为参数传递 2:
def bar():
print('海日生残夜')
def foo(func):
func()#差别这里
foo(bar)
#函数可以作为返回值
def lazy_sum(*args):
def sum():
ax = 0
for i in args:
ax+=i
return ax
return sum
#lazy_sum(1,2,3,4,5)#lazy_sum(1,2,3,4,5)返回的是一个指向求和的函数的函数名sum
#print(lazy_sum(1,2,3,4,5))#<function lazy_sum.<locals>.sum at 0x02AD0468>
# print(lazy_sum(1,2,3,4,5).__name__)#sum
# print(lazy_sum(1,2,3,4,5).__name__)#sum
print(lazy_sum(1,2,3,4,5)())
f = lazy_sum(1,2,3,4,5)
f()
print(f())
'''
例中,lazy_sum中的内部函数sum引用了外部函数lazy_sum的参数和局部变量,
当lazy_sum返回函数sum时,相关参数和变量已经保存在返回的函数sum中了。
我们称这为 闭包。
'''