#__author:"feng lin"
#date: 2018/8/28
#函式高階
#1.命名空間和作用域
#內建命名空間--python直譯器
#就是python直譯器一啟動就可以使用的名字儲存在內建命名空間中,例如print、input()
#內建的名字在啟動直譯器的時候被載入到記憶體裡
#全域性命名空間--我們寫的**但不是函式中的**
#是在程式從上到下被執行的過程中一次載入進記憶體的
#放置了我們設定的所有變數名和函式名
#區域性命名空間--函式
#就是函式內部定義的名字
#當呼叫函式的時候才會產生這個命名空間,隨著函式執行的結束,這個命名空間又消失了
#在區域性:可以使用全域性、內建命名空間的名字
#在全域性:可以使用內建命名空間的名字,但是不能用區域性命名空間的名字
#在內建空間:不能使用全域性和區域性的名字
#def func():
#a=1
#func()
#print(a)
defmax(l):
print('
in max func')
print(max([1,2,3]))
#在正常情況下直接使用內建命名空間
#但是如果在全域性定義了和內建名字空間的同名字的時候,會使用全域性的名字
deffunc():
#input=1
(input)
#func==函式的記憶體位址
#函式名()==函式的呼叫
#函式的記憶體位址()==函式的呼叫
#作用域兩種
#全域性作用域 ----------作用在全域性------內建和全域性名字空間中的名字屬於全域性作用域
#區域性作用域 ----------作用在區域性------函式(區域性名字空間中的名字屬於區域性作用域)
b=1def
func1():
global
b b+=1
(b)#
對於不可變資料型別,在區域性可以檢視全域性作用域中的變數,但不能直接修改
#除非在區域性作用域將該資料型別宣告為全域性使用global
a=1b=2
deffunc():
x='aaa'
u='bbb
'print(locals()) #
檢視區域性作用域的名字有哪些
func()
print(globals()) #
檢視全域性作用域的名字有哪些
(locals())
#globals 永遠列印全域性的名字
#locals 根據locals所在的位置列印名字
#函式的巢狀呼叫
defmax(a,b):
return a if a>b else
bdef
the_max(x,y,z):
c=max(x,y)
return
max(c,z)
print(the_max(1,2,3))
#函式的巢狀定義
defouter():
definner():
print('
inner')
print('
outer')
inner()
outer()
#內部函式可以讀外部函式的變數,但是不能修改
defouter():
a=1def
inner():
(a)
print('
outer')
inner()
outer()
#nonlocal關鍵字,用於函式巢狀時,修改函式的區域性變數
#nonlocal只能用於區域性變數,找上層中離當前函式最近一層的區域性變數
#宣告了nonlocal的內部函式的變數修改會影響到離當前函式最近一層的區域性變數
t=1def
outer():
t=1def
inner():
c=2print
(t)
print('
inner')
definner2():
nonlocal t
#宣告乙個上一層的區域性變數
t+=1 #
不可變資料型別的修改
print('
inner2')
inner2()
inner()
print('
區域性的t:
',t)
outer()
print('
全域性的t:
',t)
#函式名(第一類物件)
#函式名就是記憶體位址,並且可以賦值
deffun():
print(123)
(fun)
fun1=fun
(fun1)
fun1()
#函式名可以作為容器型別的元素
list1=[fun1,fun]
(list1)
#函式名可以作為函式的引數
defwaha(f):
f()return f #
函式名可以作為函式的返回值
qqxin=waha(fun)
#閉包:巢狀函式,內部函式呼叫外部函式(讀寫都算)的變數
defout():
a=1def
inn():
(a)
print(inn.__closure__
)out()
print(out.__closure__)#
閉包的呼叫,在函式外部使用閉包
defoutter():
a=1def
inne():
(a)
return inne #
將閉包的記憶體位址返回
inn=outter() #
用乙個變數接收,此時閉包的記憶體位址不會隨著outter函式執行結束後被釋放
inn() #
此時要使用時只需要用這個接收到閉包的變數加()直接使用
#閉包的運用
from urllib.request import
urlopen
defget_url():
url='
'#運用閉包節省資源,不用每次使用url這個變數,並儲存在記憶體裡
defgeturi():
ret=urlopen(url).read()
(ret)
return
geturi
get_func=get_url()
get_func()
python基礎 高階函式
把函式作為引數傳入,這樣的函式稱為高階函式,高階函式是函式式程式設計的體現。函式式程式設計就是指這種高度抽象的程式設計正規化。在python中,abs 函式可以完成對數字求絕對值計算。abs 10 10round 函式可以完成對數字的四捨五入計算。round 1.2 1 round 1.9 2def...
Python高階學習 函式
函式的定義 函式的呼叫 函式文件 函式引數 函式的返回值 變數作用域 匿名函式的定義 匿名函式的應用 def add a,b print a b add 1,2 3add 1 2,3 4 5,6 1,2,3,4,5,6 def myfirstfunction name 函式定義過程中name是形參 ...
python高階學習之高階函式
高階函式就是把函式當做引數傳遞的一種函式,例如 執行結果 map 接收乙個函式 f和乙個list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。執行結果 reduce 函式接收的引數和 map 類似,乙個函式 f,乙個list,但行為和 map 不同,redu...