python基礎---命名空間與常用函數

一、命名空間

1、什麼叫命名空間

從python解釋器開始執行之後,就在內存中開闢了一個空間,每當遇到一個變量的時候,就把變量名和值之間的對應關係(值的內存地址)記錄下來。
但是當遇到函數定義的時候解釋器只是象徵性的將函數名讀入內存,表示知道這個函數的存在了,至於函數內部的變量和邏輯解釋器根本不關心。
等執行到函數調用的時候,python解釋器會再開闢一塊內存來存儲這個函數裏的內容,這個時候,才關注函數裏面有哪些變量,而函數中的變量會存儲在新開闢出來的內存中。函數中的變量只能在函數的內部使用,並且會隨着函數執行完畢,這塊內存中的所有內容也會被清空。
我們給這個“存放名字與值的關係”的空間起了一個名字——叫做命名空間
代碼在運行伊始,創建的存儲“變量名與值的關係”的空間叫做全局命名空間,在函數的運行中開闢的臨時的空間叫做局部命名空間

  
2、命名空間變量訪問的規則

一共有三種命名空間從大範圍到小範圍的順序:內置命名空間、全局命名空間、局部命名空間作用域(包括函數的作用域鏈)。變量訪問的三個原則:
小範圍的可以用大範圍的,但是大範圍的不能用小範圍的
在小範圍內,如果要用一個變量,是當前這個小範圍有的,就用自己的,如果在小範圍內沒有,就用上一級的,上一級沒有就用上上一級的,以此類推。如果都沒有,報錯
如果是對變量進行賦值,相當於新開一塊空間,與外部變量無關。如,list1=list1+[],雖然右邊的list1可能是上一級的,但賦值後,新的list1已經與上一級沒有關係了。
這裏寫圖片描述

二、函數:

1、函數的基本概念 
 
函數名的本質:就是一個變量,保存了函數所在的內存地址
  嵌套定義:定義在內部的函數無法直接在全局被調用,如需要調用,可以用return返回
閉包:內部函數包含對外部作用域而非全劇作用域名字的引用,該內部函數稱爲閉包函數,實際上,閉包是將對個部作用域引用地址存在了closure中,可以通過 .closure[0].cell_contents 獲得值

def func():
    name = 'eva'
    x='x'
    print 'name id:%x' % (id(name),), 'x id:%x' % (id(x),)  # name id:300de40 x id:2a87a30
    def inner():
        print name
        print x
    return inner
f = func()
print f.__closure__  # (<cell at 0x0000000002F7F0A8: str object at 0x000000000300DE40>, <cell at 0x0000000002F7F618: str object at 0x0000000002A87A30>)
g= f.__closure__[0]  # __closure__是一個元組,
print g.cell_contents  # 獲取內容

2、遞歸函數

遞歸的定義——在一個函數裏再調用這個函數本身
遞歸的最大深度——997。因爲每一次函數調用都會產生一個屬於它自己的名稱空間,如果一直調用下去,就會造成名稱空間佔用太多內存的問題,於是python強制的將遞歸層數控制在了997,可以通過sys.setrecursionlimit(100000)進行修改

3、函數裝飾器

裝飾器的本質:一個閉包函數
  裝飾器的功能:在不修改原函數及其調用方式的情況下對原函數功能進行擴展

5、常用函數

1.常用函數

1.abs(x) abs()返回一個數字的絕對值。如果給出複數,返回值就是該複數的模。
2.callable(object) callable()函數用於測試對象是否可調用,如果可以則返回1(真);否則返回0(假)。可調用對象包括函數、方法、代碼對象、類和已經定義了“調用”方法的類實例。
3.cmp(x,y) cmp()函數比較x和y兩個對象,並根據比較結果返回一個整數,如果xy,則返回1,如果x==y則返回0。
5.isinstance(object,class-or-type-or-tuple) -> bool
6.len(object) -> integer len()函數返回字符串和序列的長度。
7.pow(x,y[,z]) pow()函數返回以x爲底,y爲指數的冪。如果給出z值,該函數就計算x的y次冪值被z取模的值。
8.range([lower,]stop[,step]) range()函數可按參數生成連續的有序整數列表。
9.round(x[,n]) round()函數返回浮點數x的四捨五入值,如給出n值,則代表舍入到小數點後的位數。
10.type(obj) type()函數可返回對象的數據類型。
11.xrange([lower,]stop[,step]) xrange()函數與range()類似,但xrnage()並不創建列表,而是返回一個xrange對象,它的行爲與列表相似,但是隻在需要時才計算列表值,當列表很大時,這個特性能爲我們節省內存。

2.內置類型轉換函數

1.chr(i) chr()函數返回ASCII碼對應的字符串。
2.complex(real[,imaginary]) complex()函數可把字符串或數字轉換爲複數。
3.float(x) float()函數把一個數字或字符串轉換成浮點數。
4.hex(x) hex()函數可把整數轉換成十六進制數。
5.long(x[,base]) long()函數把數字和字符串轉換成長整數,base爲可選的基數。
6.list(x) list()函數可將序列對象轉換成列表。如:
7.int(x[,base]) int()函數把數字和字符串轉換成一個整數,base爲可選的基數。
8.min(x[,y,z…]) min()函數返回給定參數的最小值,參數可以爲序列。
9.max(x[,y,z…]) max()函數返回給定參數的最大值,參數可以爲序列。
10.oct(x) oct()函數可把給出的整數轉換成八進制數。
11.ord(x) ord()函數返回一個字符串參數的ASCII碼或Unicode值。
12.str(obj) str()函數把對象轉換成可打印字符串。
13.tuple(x) tuple()函數把序列對象轉換成tuple。

3.序列處理函數

1.常用函數中的len()、max()和min()同樣可用於序列。
2.filter(function,list)
3.map(function,list[,list]) map()函數把一個函數應用於序列中所有項,並返回一個列表。
4.reduce(function,seq[,init]) reduce()函數獲得序列中前兩個項,並把它傳遞給提供的函數,獲得結果後再取序列中的下一項,連同結果再傳遞給函數,以此類推,直到處理完所有項爲止。
5.zip(seq[,seq,…]) zip()函數可把兩個或多個序列中的相應項合併在一起,並以元組的格式返回它們,在處理完最短序列中的所有項後就停止。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章