每日学习:函数名1.作为参数传递,2.可以被赋值给其他变量,3.可以作为返回值

# -*- 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中了。
我们称这为 闭包。
'''
发布了3 篇原创文章 · 获赞 0 · 访问量 1458
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章