Python3-內建函式 內建函式
內建函式
上面就是內建函式的表,68個函式都在這兒了。這個表的順序是按照首字母的排列順序來的,你會發現都混亂的堆在一起。比如,oct和bin和hex都是做進位制換算的,但是卻被寫在了三個地方。。。這樣非常不利於大家歸納和學習。那我把這些函式分成了7大類。
我們今天就要學習用粉紅色標註出來的這四大塊——53個方法。還有15個方法欠著怎麼辦呢?我們講完內建函式會還你們3個,剩下12個也會在兩週之內陸續還給你們的,我保證(認真臉)。那這樣,我們今天就主要關注我們要學習的這53個方法。
作用域相關
基於字典的形式獲取區域性變數和全域性變數
globals()——獲取全域性變數的字典
locals()——獲取執行本方法所在名稱空間內的區域性變數的字典
其他
input() 輸入
s = input("請輸入內容 : ") #輸入的內容賦值給s變數 print(s) #輸入什麼列印什麼。資料型別是str
print() 輸出
## 原始碼 def print(self, *args, sep=' ', end='\n', file=None): # known special case of print """ print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) file: 預設是輸出到螢幕,如果設定為檔案控制代碼,輸出到檔案 sep: 列印多個值之間的分隔符,預設為空格 end: 每一次列印的結尾,預設為換行符 flush: 立即把內容輸出到流檔案,不作快取"""
## 例子 with open('print_test.txt', 'w') as f: print('testtest', 'test2test2', file=f, sep='---', end=' and ') print('second!!!', file=f)
print_test.txt檔案:
testtest---test2test2 and second!!!
## 列印進度條 import time for i in range(0, 101, 2): time.sleep(0.1) char_num = i//2 # 列印多少個'*' per_str = '\r{}% : {}\n'.format(i, '*' * char_num) if i == 100 else '\r{}% : {}'.format(i, '*' * char_num) print(per_str, end='', flush=True) # \r可以把游標移動行首但不換行
資料型別相關:
type(o) 返回變數o的資料型別
記憶體相關:
id(o) o是引數,返回一個變數的記憶體地址
hash(o) o是引數,返回一個可hash變數的雜湊值,不可hash的變數被hash之後會報錯。
t = (1,2,3) l = [1,2,3] print(hash(t)) #可hash print(hash(l)) #會報錯 ''' 結果: TypeError: unhashable type: 'list' '''
hash函式會根據一個內部的演算法對當前可hash變數進行處理,返回一個int數字。
*每一次執行程式,內容相同的變數hash值在這一次執行過程中不會發生改變。
檔案操作相關
open() 開啟一個檔案,返回一個檔案操作符(檔案控制代碼)
操作檔案的模式有r,w,a,r+,w+,a+ 共6種,每一種方式都可以用二進位制的形式操作(rb,wb,ab,rb+,wb+,ab+)
模組操作相關
__import__匯入一個模組
匯入模組 import time __import__ os = __import__('os') print(os.path.abspath('.'))
幫助方法
在控制檯執行help()進入幫助模式。可以隨意輸入變數或者變數的型別。輸入q退出
或者直接執行help(o),o是引數,檢視和變數o有關的操作。。。
和呼叫相關
callable(o),o是引數,看這個變數是不是可呼叫。
如果o是一個函式名,就會返回True
def func():pass print(callable(func)) #引數是函式名,可呼叫,返回True print(callable(123)) #引數是數字,不可呼叫,返回False
檢視引數所屬型別的所有內建方法
dir() 預設檢視全域性空間內的屬性,也接受一個引數,檢視這個引數內的方法或變數
print(dir(list)) #檢視列表的內建方法 print(dir(int)) #檢視整數的內建方法
eval() 將字串型別的程式碼執行並返回結果(單行,有返回值)
print(eval('1+2+3+4')) Output: 10
exec()將自字串型別的程式碼執行(多行,無返回值)
code = ''' print(123) a = 20 print(a) ''' a = 10 exec(code,{'print':print},) print(a) Output: 123 20 10
compile 將字串型別的程式碼編譯。程式碼物件能夠通過exec語句來執行或者eval()進行求值。
引數說明:
1. 引數source:字串或者AST(Abstract Syntax Trees)物件。即需要動態執行的程式碼段。
2. 引數 filename:程式碼檔名稱,如果不是從檔案讀取程式碼則傳遞一些可辨認的值。當傳入了source引數時,filename引數傳入空字元即可。
3. 引數model:指定編譯程式碼的種類,可以指定為 ‘exec’,’eval’,’single’。當source中包含流程語句時,model應指定為‘exec’;當source中只包含一個簡單的求值表示式,model應指定為‘eval’;當source中包含了互動式命令語句,model應指定為'single'。
>>> #簡單求值表示式用eval >>> code2 = '1 + 2 + 3 + 4' >>> compile2 = compile(code2,'','eval') >>> eval(compile2) >>> #互動語句用single >>> code3 = 'name = input("please input your name:")' >>> compile3 = compile(code3,'','single') >>> name #執行前name變數不存在 Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> name NameError: name 'name' is not defined >>> exec(compile3) #執行時顯示互動命令,提示輸入 please input your name:'pythoner' >>> name #執行後name變數有值 "'pythoner'"
和數字相關
數字——資料型別相關:bool,int,float,complex
數字——進位制轉換相關:bin,oct,hex
數字——數學運算:abs,divmod,min,max,sum,round,pow
## divmod # divmod() 函式把除數和餘數運算結果結合起來,返回一個包含商和餘數的元組(a // b, a % b) res = divmod(10, 3) print(res) Output: (3, 1)
## pow() 方法返回 xy(x的y次方) 的值。 print(pow(2, 3)) Output: 8 ## round() 方法返回浮點數x的四捨五入值。 print(round(1.61284567)) Output: 2 print(round(1.61284567,3)) Output:1.613
和資料結構相關
序列——列表和元組相關的:list和tuple
序列——字串相關的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr
## bytearray() 方法返回一個新位元組陣列。這個數組裡的元素是可變的,並且每個元素的值範圍: 0 <= x < 256。 ret = bytearray('alex',encoding='utf-8') print(id(ret)) print(ret[0]) ret[0] = 65 print(ret) print(id(ret)) Output: 1913856888704 97 bytearray(b'Alex') 1913856888704
序列:reversed,slice
## reversed l = (1,2,23,213,5612,342,43) print(l) print(list(reversed(l)))
Output:
(1, 2, 23, 213, 5612, 342, 43)
[43, 342, 5612, 213, 23, 2, 1]
## slice l = (1,2,23,213,5612,342,43) sli = slice(1,5,2) print(l[sli]) Output: (2, 213)
資料集合——字典和集合:dict,set,frozenset
資料集合:len,sorted,enumerate,all,any,zip,filter,map
filter和map:http://www.cnblogs.com/Eva-J/articles/7266192.html
sorted方法:http://www.cnblogs.com/Eva-J/articles/7265992.html