python基礎學習 函式高階學習

2022-04-18 09:21:09 字數 3454 閱讀 3591

#

__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

print

(input)

#func==函式的記憶體位址

#函式名()==函式的呼叫

#函式的記憶體位址()==函式的呼叫

#作用域兩種

#全域性作用域 ----------作用在全域性------內建和全域性名字空間中的名字屬於全域性作用域

#區域性作用域 ----------作用在區域性------函式(區域性名字空間中的名字屬於區域性作用域)

b=1def

func1():

global

b b+=1

print

(b)#

對於不可變資料型別,在區域性可以檢視全域性作用域中的變數,但不能直接修改

#除非在區域性作用域將該資料型別宣告為全域性使用global

a=1b=2

deffunc():

x='aaa'

u='bbb

'print(locals()) #

檢視區域性作用域的名字有哪些

func()

print(globals()) #

檢視全域性作用域的名字有哪些

print

(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():

print

(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)

print

(fun)

fun1=fun

print

(fun1)

fun1()

#函式名可以作為容器型別的元素

list1=[fun1,fun]

print

(list1)

#函式名可以作為函式的引數

defwaha(f):

f()return f #

函式名可以作為函式的返回值

qqxin=waha(fun)

#閉包:巢狀函式,內部函式呼叫外部函式(讀寫都算)的變數

defout():

a=1def

inn():

print

(a)

print(inn.__closure__

)out()

print(out.__closure__)#

閉包的呼叫,在函式外部使用閉包

defoutter():

a=1def

inne():

print

(a)

return inne #

將閉包的記憶體位址返回

inn=outter() #

用乙個變數接收,此時閉包的記憶體位址不會隨著outter函式執行結束後被釋放

inn() #

此時要使用時只需要用這個接收到閉包的變數加()直接使用

#閉包的運用

from urllib.request import

urlopen

defget_url():

url='

'#運用閉包節省資源,不用每次使用url這個變數,並儲存在記憶體裡

defgeturi():

ret=urlopen(url).read()

print

(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...