Base
def func_A(name = 'YaSuo'):
return 'func_A name : ' + name
f_a_name = func_A
del func_A # 刪除函數(shù)名會提示未定義,
# print func_A() # NameError: name 'func_A' is not defined #
# 函數(shù)名被一個變量接住,就算刪除函數(shù)名硝清,打印變量加上括號,依舊成功打印
print f_a_name()
嵌套函數(shù)——base
- 調(diào)用func_master() 時转晰,其他的 func_01(),func_02()同時被調(diào)用芦拿。
- 無法在func_master 函數(shù)外單獨調(diào)用func_01(),func_02()
def func_master(name = 'Master'):
print 'inside master func()'
def func_01():
return 'func_01 is here'
def func_02():
return 'func_02 is here'
print func_01()
print func_02()
print 'back master'
func_master()
output:
inside master func()
func_01 is here
func_02 is here
back master
函數(shù)中返回函數(shù)
- 當你把一對小括號放在后面士飒,這個函數(shù)就會執(zhí)行
- 然而如果你不放括號在它后面,那它可以被到處傳遞蔗崎,并且可以賦值給別的變量而不去執(zhí)行它
def func_master(name = 'Master'):
def func_01():
return 'func_01 is here'
def func_02():
return 'func_02 is here'
if name == 'Master':
return func_01
else:
return func_02
a = func_master()
# 無括號酵幕, 不執(zhí)行,只賦值傳遞
print a
# 有括號缓苛, 執(zhí)行
print a()
output:
<function func_01 at 0x000001C443220358> #賦值傳遞芳撒,沒有傳遞
func_01 is here # 執(zhí)行了
b = func_master(name = 'all')
print b
print func_master()
print func_master()()
output:
<function func_02 at 0x000001C443220358> # 修改了name ,func_02 賦值給了 b
<function func_01 at 0x000001C4432203C8> # func_master() 里面的是默認參數(shù),返回函數(shù)func_01
func_01 is here # func_master() 里面的是默認參數(shù)未桥,但是多跟了一個括號表示執(zhí)行函數(shù)func_01()
將函數(shù)作為參數(shù)傳給另一個函數(shù)
- 裝飾器讓你在一個函數(shù)的前后去執(zhí)行代碼笔刹。
def masterBeforeDef():
return "before Master!"
def masterAfterDef():
return "after Master!"
# 這里可變參數(shù)是func
def doSomethingBeforeHi(*func_01):
print(masterBeforeDef)
print("I am doing some boring work before executing masterDef()")
print(masterAfterDef)
print doSomethingBeforeHi(masterBeforeDef, masterAfterDef)
output:
<function masterBeforeDef at 0x000001C4432205F8> # Before func
I am doing some boring work before executing masterDef() # 當前的func
<function masterAfterDef at 0x000001C443220208> # after func
None
裝飾器用法的一些自我總結(jié)問題
def new_decorator(func_01):
def wrapper_func():
print'before'
# 去掉(), 沒有調(diào)用里面的,所以在func_master;有() 調(diào)用了函數(shù)钢属,所以在 fun_
print func_01()
print 'after'
return 'A'
return wrapper_func
@new_decorator
def func_master():
def fun_():
return [1,2]
return fun_
# func_master = new_decorator(func_master)
print func_master # 這里沒有跟括號調(diào)用业汰,等于上面的注釋
output:
<function wrapper_func at 0x000001C4432207B8>
# func_master = new_decorator(func_master())
print func_master() # 這里加了括號調(diào)用, 等于上面的注釋
output:
before
<function fun_ at 0x000001C4432207B8>
after
A