接下來,我們就一起來看看python裡的内置函數。截止到python版本3.6.2,現在python一共為我們提供了68個内置函數。它們就是python提供給你直接可以拿來使用的所有函數。這些函數有些我們已經用過了,有些我們還沒用到過,還有一些是被封印了,必須等我們學了新知識才能解開封印的。那今天我們就一起來認識一下python的内置函數。這麼多函數,我們該從何學起呢?
Built-in Functions | ||||
---|---|---|---|---|
abs() | dict() | help() | min() | setattr() |
all() | dir() | hex() | next() | slice() |
any() | divmod() | id() | object() | sorted() |
ascii() | enumerate() | input() | oct() | staticmethod() |
bin() | eval() | int() | open() | str() |
bool() | exec() | isinstance() | ord() | sum() |
bytearray() | filter() | issubclass() | pow() | super() |
bytes() | float() | iter() | print() | tuple() |
callable() | format() | len() | property() | type() |
chr() | frozenset() | list() | range() | vars() |
classmethod() | getattr() | locals() | repr() | zip() |
compile() | globals() | map() | reversed() | __import__() |
complex() | hasattr() | max() | round() | |
delattr() | hash() | memoryview() | set() |
上面就是内置函數的表,68個函數都在這兒了。這個表的順序是按照首字母的排列順序來的,你會發現都混亂的堆在一起。比如,oct和bin和hex都是做進制換算的,但是卻被寫在了三個地方。。。這樣非常不利于大家歸納和學習。那我把這些函數分成了6大類。你看下面這張圖,你猜咱們今天會學哪幾大類呀?

我猜你們都猜對了。我們今天就要學習用粉紅色标注出來的這四大塊——56個方法。還有12個方法欠着怎麼辦呢?我們講完面向對象這剩下的12個會在兩周之内陸續還給你們的,我保證(認真臉)。那這樣,我們今天就主要關注我們要學習的這56個方法。
那要學的一共4塊,咱們從哪兒開始學起呢?
作用域相關
基于字典的形式擷取局部變量和全局變量
globals()——擷取全局變量的字典
locals()——擷取執行本方法所在命名空間内的局部變量的字典
print(globals()) 傳回全局作用域中的所有名字
print(locals()) 傳回本地作用域的所有名字
globao和local是關鍵字
其他
字元串類型代碼的執行
javascript:void(0)
輸入輸出相關:
input() 輸入
s = input("請輸入内容 : ") #輸入的内容指派給s變量
print(s) #輸入什麼列印什麼。資料類型是str
print() 輸出
print('我們是祖國的花朵',end = ' ') 指定結束符
print('我們是祖國的花朵',end = '| ') 指定多個值輸出之間的分隔符
#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: 立即把内容輸出到流檔案,不作緩存
"""
file關鍵字的說明
f = open('tmp_file','w')
print(123,456,sep=',',file = f,flush=True)
列印進度條
import time
for i in range(0,101,2):
time.sleep(0.1)
char_num = i//2 #列印多少個'*'
per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)
print(per_str,end='', flush=True)
#小越越 : \r 可以把光标移動到行首但不換行
eval() 将字元串類型的代碼執行并傳回結果 不能随便用,不安全,用于有結果的簡單計算
print(eval('1+2+3+4'))
exec()将自字元串類型的代碼執行 沒有傳回值,簡單的流程控制
print(exec("1+2+3+4"))
exec("print('hello,world')")
#指定global參數
code = '''
import os
print(os.path.abspath('.'))
'''
code = '''
print(123)
a = 20
print(a)
'''
a = 10
exec(code,{'print':print},)
print(a)
内置函數——eval、exec、compile
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'。
>>> #流程語句使用exec
>>> code1 = 'for i in range(0,10): print (i)'
>>> compile1 = compile(code1,'','exec')
>>> exec (compile1)
1
3
5
7
9
>>> #簡單求值表達式用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'"
資料類型相關:
type(o) 傳回變量o的資料類型
記憶體相關:
id(o) o是參數,傳回一個變量的記憶體位址
hash(o) o是參數,傳回一個可hash變量的哈希值,不可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() 打開一個檔案,傳回一個檔案操作符(檔案句柄)
f = open()
操作檔案的模式有r,w,a,r+,w+,a+ 共6種,每一種方式都可以用二進制的形式操作(rb,wb,ab,rb+,wb+,ab+)
可以用encoding指定編碼.
f = open('1.複習.py')
print(f.writable()) 判斷能不能寫
print(f.readable()) 判斷能不能讀
子產品操作相關
__import__導入一個子產品
#導入子產品
import time
#内部實際流程 知道即可,不需要用
#import time
time = __import_('time')
print(time.time())
#__import__
os = __import__('os')
print(os.path.abspath('.'))
幫助方法
help() 檢視名字及其用法
print(help(int))
在控制台執行help()進入幫助模式。可以随意輸入變量或者變量的類型。輸入q退出
或者直接執行help(o),o是參數,檢視和變量o有關的操作。。。
#如果某個方法屬于某個資料剋星的變量,就用點來調用:list.append()
#如果某個方法不依賴任何資料類型,就直接用——内置函數和自定義函數采用: import time
檢視參數所屬類型的所有内置方法
dir() 預設檢視全局空間内的屬性,也接受一個參數,檢視這個參數内的方法或變量
print(dir(list)) #檢視清單的内置方法
print(dir(int)) #檢視整數的内置方法
和調用相關
callable(o),o是參數,看這個變量是不是可調用。
如果o是一個函數名,就會傳回True
def func():pass
print(callable(func)) #參數是函數名,可調用,傳回True
print(callable(123)) #參數是數字,不可調用,傳回False
和數字相關
數字——資料類型相關:bool,int,float,complex
數字——進制轉換相關:bin,oct,hex
數字——數學運算:abs,divmod,min,max,sum,round,pow
bin 轉二進制 用 0b 表示
oct 轉八進制 用 0c 表示
hex 轉十六進制 用 0x 表示
abs 求絕對值
divmod #div除法 #mod 求餘 #是以divmod就是除餘
形如:
print(divmod(7,2))
結果 (3, 1)
round 取精确值 ,注意四舍五入
print(round(1.8407524805,4))
結果 1.8408
pow 幂運算
print(pow(2,3)) 8 2的三次方
print(pow(3,2)) 9 3的二次方
print(pow(2,3,3)) 2 8處以3餘2
print(pow(3,2,1)) 0 9處以1餘0
sum 求和 注意必須是可疊代的,并且是數字
print(sum([1,2,3,4])) 10
print(sum([1,2,3,4],10)) 20 #如果有10,表示從10開始加,再加1+2+3+4.如果沒有10,則預設從0開始加
和資料結構相關
python中的資料類型 int bool 等
資料結構 dict list tuple set str