def max(a,b): return a if a>b else b def the_max(x,y,z): c = max(x,y) #函數的嵌套調用 return c if c>z else z print(the_max(1,2,3)) ## 3
格式:html
變量 = 條件返回True的結果 if 條件 else 條件返回False的結果網絡
條件:1,必需要有結果。2,必需要有if。3,只能是簡單的結果數據結構
##嵌套多個函數也能夠 def max1(x,y): m = x if x>y else y return m def max2(a,b,c,d): res1 = max1(a,b) res2 = max1(res1,c) res3 = max1(res2,d) return res3 max2(23,-7,31,11)
# 31
##inner閉包
##在函數嵌套定義時,內部函數能夠使用外部函數的變量app
def outer(): a = 1#外部函數的變量 def inner(): print(a)#內部函數能夠使用外部函數的變量 print("inner") inner() outer() #1 #inner
##三層嵌套:函數
def outer(): a = 1 def inner1(): b = 2 print(a) print("inner1") def inner2(): print(a,b) print("inner2") inner2() inner1() outer() ### 1 inner1 1 2 inner2
def f1(): a = 1 def f2(): nonlocal a a = 2 f2() print('a in f1 : ',a) f1() #a in f1 : 2
def f1(): a = 1 def f2(): #nonlocal a a = 2 f2() print('a in f1 : ',a) f1() #a in f1 : 1
第一類對象:(能夠賦值、能夠做爲參數、能夠做爲返回值)url
一、函數名是能夠賦值的spa
def func1(): print(123) func2 = func1 #函數名能夠賦值 func2() L = [func1,func2] #函數名能夠做爲容器數據類型 print(L) for i in L: i() #### 123 [<function func1 at 0x000001BB8BE42E18>, <function func1 at 0x000001BB8BE42E18>] 123 123
二、函數名是能夠做爲一個數據結構的元素(能夠做爲容器數據類型的元素)code
三、函數名是能夠做爲一個函數的參數htm
##函數名能夠做爲參數來傳遞 def f1(): print("aaa") def f2(f): f() f2(f1) ##aaa
四、函數名能夠做爲函數的返回值
def f1(): print("aaa") def f2(f): f() return f #函數名作爲返回值給f3 f3 = f2(f1) f3() ### aaa aaa
#閉包:首先是嵌套函數,而且內部函數調用外部函數的變量 def outer(): a = 1 def inner(): print(a) print(inner.__closure__) outer() #(<cell at 0x000002567BB095B8: int object at 0x0000000055A06C10>,)
##閉包的標準用法:
def outer(): a = 1 def inner(): print(a) return inner inn = outer() inn() # 1
嵌套閉包:
def wrapper(): money = 1000 def func(): name = 'eva' def inner(): print(name,money) return inner return func f = wrapper() i = f() i()
##
eva 1000
##判斷閉包函數的方法__closure__
#輸出的__closure__有cell元素 :是閉包函數 def func(): name = 'eva' def inner(): print(name) print(inner.__closure__) return inner f = func() f()
#輸出的__closure__爲None :不是閉包函數 name = 'span' def func2(): def inner(): print(name) print(inner.__closure__) return inner f2 = func2() f2() ## None
##閉包函數獲取網絡應用
############### from urllib.request import urlopen def get_url(): url = "http://www.xiaohua100.cn/index.html" def get(): return urlopen(url).read() return get get_func = get_url() content = get_func() print(content)
##閉包的好處:在調用內部函數的時候不用重複的生成外部的變量。(節省時間)