內建函式 命名空間 閉包

2021-09-25 17:52:56 字數 3886 閱讀 1025

常見內建函式如圖

內建引數詳解:內建函式詳解

abs # 求絕對值

all #return true if bool(x) is true for all values x in the iterable.if the iterable is empty, return true.

any #return true if bool(x) is true for any x in the iterable.if the iterable is empty, return false.

ascii #return an ascii-only representation of an object,ascii(「中國」) 返回」『\u4e2d\u56fd』」

bin #返回整數的2進製格式

bool # 判斷乙個資料結構是true or false, bool({}) 返回就是false, 因為是空dict

bytearray # 把byte變成 bytearray, 可修改的陣列

bytes # bytes(「中國」,」gbk」)

callable # 判斷乙個物件是否可呼叫

chr # 返回乙個數字對應的ascii字元 , 比如chr(90)返回ascii裡的』z』

delattr #物件導向時用,現在忽略

dict #生成乙個空dict

dir #返回物件的可呼叫屬性

divmod #返回除法的商和餘數 ,比如divmod(4,2),結果(2, 0)

enumerate #返回列表的索引和元素,比如 d = [「alex」,」jack」],enumerate(d)後,得到(0, 『alex』) (1, 『jack』)

eval #可以把字串形式的list,dict,set,tuple,再轉換成其原有的資料型別。eval()詳解

exec #把字串格式的**,進行解義並執行,比如exec(「print(『hellworld』)」),會解義裡面的字串並執行

filter #對list、dict、set、tuple等可迭代物件進行過濾, filter(lambda x:x>10,[0,1,23,3,4,4,5,6,67,7])過濾出所有大於10的值

frozenset #把乙個集合變成不可修改的

globals #列印全域性作用域裡的值

hash #hash函式

hex #返回乙個10進製的16進製表示形式,hex(10) 返回』0xa』

id #檢視物件記憶體位址

isinstance #判斷乙個資料結構的型別,比如判斷a是不是fronzenset, isinstance(a,frozenset) 返回 true or false

iter #把乙個資料結構變成迭代器,講了迭代器就明白了

map # map(lambda x:x**2,[1,2,3,43,45,5,6,]) 輸出 [1, 4, 9, 1849, 2025, 25, 36]

max # 求最大值

min # 求最小值

next # 生成器會用到,現在忽略

oct # 返回10進製數的8進製表示

ord # 返回ascii的字元對應的10進製數 ord(『a』) 返回97,

property #物件導向時用,現在忽略

reversed # 可以把乙個列表反轉

round #可以把小數4舍5入成整數 ,round(10.15,1) 得10.2

setattr #物件導向時用,現在忽略

sorted #永久排序

staticmethod #物件導向時用,現在忽略

sum #求和,a=[1, 4, 9, 1849, 2025, 25, 36],sum(a) 得3949

vars #返回乙個物件的屬性,物件導向時就明白了

zip #可以把2個或多個列表拼成乙個, a=[1, 4, 9, 1849, 2025, 25, 36],b = [「a」,」b」,」c」,」d」],

又名name space, 顧名思義就是存放名字的地方,存什麼名字呢?舉例說明,若變數x=1,1存放於記憶體中,那名字x存放在**呢?命名空間正是存放名字x與1繫結關係的地方

python裡面有很多名字空間,每個地方都有自己的名字空間,互不干擾,不同空間中的兩個相同名字的變數之間沒有任何聯絡。

命名空間有4種:legb

locals:函式內部的名字空間,一般包括函式的區域性變數以及形式引數

enclosing function:在巢狀函式中外部函式的名字空間, 若fun2巢狀在fun1裡,對fun2來說,fun1的名字空間就enclosing.

globals:當前的模組空間,模組就是一些py檔案。也就是說,globals()類似全域性變數。

builtins: 內建模組空間,也就是內建變數或者內建函式的名字空間,print(dir(builtins))可檢視包含的值。

不同變數的作用域不同就是由這個變數所在的命名空間決定的。

作用域即範圍

全域性範圍:全域性存活,全域性有效

區域性範圍:臨時存活,區域性有效

檢視作用域方法 globals(),locals()

作用域查詢順序

當程式引用某個變數的名字時,就會從當前名字空間開始搜尋。搜尋順序規則便是:legb。即locals -> enclosing function -> globals ->builtins。一層一層的查詢,找到了之後,便停止搜尋,如果最後沒有找到,則丟擲在nameerror的異常。

關於閉包,即函式定義和函式表示式位於另乙個函式的函式體內(巢狀函式)。而且,這些內部函式可以訪問它們所在的外部函式中宣告的所有區域性變數、引數。當其中乙個這樣的內部函式在包含它們的外部函式之外被呼叫時,就會形成閉包。也就是說,內部函式會在外部函式返回後被執行。而當這個內部函式執行時,它仍然必需訪問其外部函式的區域性變數、引數以及其他內部函式。這些區域性變數、引數和函式宣告(最初時)的值是外部函式返回時的值,但也會受到內部函式的影響。

閉包的意義:返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用域,這使得,該函式無論在何處呼叫,優先使用自己外層包裹的作用域

#定義乙個函式

def outter(number):

print("------函式outter內部-------")

#再函式內部再定義乙個函式,並且這個函式用到了外邊函式的變數,那麼裡面的函式和用到的外面的變數統稱為閉包

def inner(number2):

print("------函式inner內部-------")

print(number+number2)

print("------函式inner外部-------")

return inner #返回內部函式的引用,這裡返回的是內部函式的記憶體位址

ret = outter(100) #ret是內部函式的引用,接收返回的引用,ret的理解很重要,這裡 ret = inner

print("\n")

ret(100)

ret(200)

#執行結果

# ------函式outter內部-------

# ------函式inner外部-------

# #

# ------函式inner內部-------

# 200

# ------函式inner內部-------

# 300

# # 程序已結束,退出**0

注意此時outer已經執行完畢,正常情況下outer裡的記憶體都已經釋放了,但此時由於閉包的存在,我們卻還可以呼叫inner, 並且inner內部還呼叫了上一層outer裡的name變數。這種粘粘糊糊的現象就是閉包。

函式的命名空間和作用域 閉包(筆記)

命名空間 內建命名空間 python直譯器 python直譯器一啟動就可以使用的名字儲存在內建命名空間中,內建的名字在啟動直譯器的時候被載入進記憶體 全域性命名空間 我們寫的 但不是函式中的 是在程式從上到下被執行的過程中依次載入進記憶體的,放置了我們設定的所有變數名和函式 區域性命名空間 函式 函...

函式物件,函式巢狀,命名空間,作用域,閉包函式

一 函式物件 函式是第一類物件 值的記憶體位址可以像變數一樣去使用 def foo foo 函式的記憶體位址,可以當做一種變數值去使用 1 函式可以被引用 def foo print hello f foo print f f 2 可以當作引數傳遞 def foo print hello def b...

命名空間與作用域,函式物件,函式巢狀,閉包函式

命名空間的分類 全域性命名空間 在py檔案中頂格編寫的 執行之後都會存入全域性命名空間 區域性命名空間 函式體 執行之後產生的都是區域性命名空間 內建命名空間 input built in 內建 全域性命名空間 x 10 變數名x y 20 變數名y f 1 0 z 30 with open a.t...