每日學習:函數名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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章