Python入門-內建函式一
什麼是內建函式?就是python給你提供的拿來直接用的函式,比如print,input等等,截止到python版本3.6.2 python一共提供了68個內建函式,他們就是python直接提供給我們的,有一些我們已經用過了,有一些還沒有用過,還有一些需要學完了面向物件才能繼續學習的,今天我們就認識一下python的內建函式.
作用域相關:
locals() 返回當前作用域中的名字
globals() 返回全域性作用域中的名字
迭代器相關:
range() 生成資料
next() 迭代器向下執行一次,內部實際使用了__next__()方法返回迭代器的下一個專案
iter() 獲取迭代器,內部實際使用的是__iter__()方法來獲取迭代器
字串型別程式碼的執行
eval() 執行字串型別的程式碼,並返回最終結果
print(eval('2+2')) #4 n = 8 print(eval('2+n')) #10 def func(): print(666) eval('func()') #666
exec() 執行字串型別程式碼
exec(''' for i in range(10) print(i) ''') exec(''' def func(): print('我是周杰倫') func() ''')
compile() 將字串型別的程式碼變異,程式碼物件能夠通過exec語句來執行或者eval()進行求值
''' 引數說明: 1.resource 要執行的程式碼,動態程式碼片段 2.檔名,程式碼存放的檔名,當傳入第一個引數的時候,這個引數給空就可以了 3.模式,取值有3個: 1.exec: 一般放一些流程語句的時候 2.eval: resource只存放一個求值表示式 3.single: resource存放的程式碼有互動的時候,mode應為single ''' code1 = 'for i in range(10): print(i)' c1 = compile(code1,'',mode = 'exec') exec(c1) code2 = '1 + 2 + 3' c2 = compile(code2, '', mode = 'eval') a = eval(c2) print(a) code3 = ''name = input('請輸入你的名字:')'' c3 = compile(code3,'',mode = 'single') exec(c3) print(name)
有返回值的字串形式的程式碼用eval(),沒有返回值的字串形式的程式碼用exec(),一般很少用到compile()
輸入和輸出相關:
input() 獲取使用者輸入的內容
print() 列印輸出
記憶體相關:
hash() 獲取到物件的雜湊值(int,str,bool,tuple)
id() 獲取到物件的記憶體地址
檔案操作相關:
open() 用於開啟一個檔案,建立一個檔案控制代碼
模組相關:
__import__() 用於動態載入類和函式
幫助:
help() 函式用於檢視函式或模組用途的詳細說明
呼叫相關:
callable() 用於檢查一個物件是否是可呼叫的,如果返回True,object有可能呼叫失敗,但如果返回False,那呼叫絕對不會成功
檢視內建屬性:
dir() 檢視物件的內建屬性,方法,訪問的是物件中的__dir__()方法
基礎資料型別相關:
數字相關:
bool() 將給定的資料型別轉換成bool值,如果不給值,返回False
int() 將給定的資料型別轉換成int值,如果不給值,返回0
float() 將給定的資料型別轉換成float值,也就是小數
compile() 建立一個複數,第一個引數為實部,第二個引數為虛部,或者第一個引數直接用字串來描述複數
進位制轉換:
bin() 將給的引數轉換成二進位制
otc() 將給的引數轉換成八進位制
hex() 將給的引數轉換成十六進位制
數學運算:
abs() 返回絕對值
divmode() 返回商和餘數
round() 四捨五入
pow(a,b) 求a的b次冪,如果有三個引數,則求完次冪後對第三個數取餘
sum() 求和
min() 求最小值
max() 求最大值
和資料結構相關:
列表和元組:
list() 將一個可迭代物件轉換成列表
tuple() 將一個可迭代物件轉換成元組
reversed() 將一個序列反轉,返回反轉序列的迭代器
slice() 列表的切片
st = '大家好,我是麻花藤' s = slice(1,5,2) print(st[s])
字串相關:
str() 將資料轉化成字串
format() 與具體資料相關,用於計算各種小數,精算等
# 字串 print(format('test','<20')) #左對齊 print(format('test','>20')) #右對齊 print(format('test','^20')) #居中 #數值 print(format(3,'b')) #二進位制 print(format(97,'c')) #轉換成Unicode字元 print(format(11,'d')) #十進位制 print(format(11,'o')) #八進位制 print(format(11,'x')) #十六進位制(小寫字母) print(format(11,'X')) #十六進位制(大寫字母) print(format(11,'n')) #和d一樣 print(format(11)) #和d一樣 #浮點數 print(format(123456789,'e')) #科學計數法,預設保留6位小數 print(format(123456789,'0.2e')) #科學計數法,保留2位小數(小寫) print(format(123456789,'0.2E')) #科學計數法,保留2位小數(大寫) print(format(1.23456789,'f')) #小數點計數法,保留6位小數 print(format(1.23456789,'0.2f')) #小數點計數法,保留2位小數 print(format(1.23456789,'0.10f')) #小數點計數法,保留10位小數 print(format(1.23456789e+10000,'F')) #小數點計數法
bytes() 把字串轉化成bytes型別
s = '你好' bs = s.encode('UTF-8') print(bs) s1 = bs.decode('UTF-8') print(s1) bs = bytes(s,encoding='utf-8') #把字串編碼成UTF-8 print(bs)
bytearray() 返回一個新位元組陣列,這個數字裡的元素是可變的,並且每個元素的值的範圍是[0,256)
ret = bytearray('你好',encoding='utf-8') print(ret[0]) print(ret)
memoryview() 檢視bytes在記憶體中的情況
#檢視bytes位元組在記憶體中的情況 s = memoryview('麻花藤'.encode('utf-8')) print(s)
ord() 輸入字元找字元編碼的位置
chr() 輸入位置數字找出對應的字元
ascii() 是ascii碼中的返回該值,不是就返回\u...
#找到對應字元的編碼位置 print(ord('a')) print(ord('中')) #找到對應編碼位置的字元 print(chr(97)) print(chr(20013)) #在ascii中就返回這個值,如果不在就返回\u... print(ascii('a')) print(ascii('中'))
repr() 返回一個物件的string形式
#repr 就是原封不動的輸出,引號和轉義符都不起作用 print(repr('大家好,\n,\t我叫周杰倫')) print('大家好,我叫周杰倫') #%r 原封不動的寫出來 name = '周杰倫' print('我叫%r'% name)
資料集合:
dict() 建立一個字典
set() 建立一個集合
frozenset() 建立一個凍結的集合,凍結的集合不能進行新增和刪除操作
其他相關:
len() 返回一個物件中的元素的個數
sorted() 對可迭代物件進行排序操作
enumerate() 獲取集合的列舉物件
lst = ['周杰倫','周潤發','周星馳'] for index,i in enumerate(lst): print(str(index) + i)
all() 可迭代物件中全部是True,結果才是True
any() 可迭代物件中有一個是True,結果就是True
print(all[1,2,True,0]) print(any([1,'',0]))
zip() 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成一個個元組,然後返回有這些元組組成的列表,如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同.
l1 = [1,2,3] l2 = ['a','b','c',5] l3 = ('*','**',(1,2,3)) for i in zip(l1,l2,l3): print(i)
filter() 過濾
lst = ['張無忌','張翠山','范冰冰','金毛獅王','李冰冰'] #過濾掉姓張的人 # 把可迭代物件開啟,把內部元素一個一個的傳遞給前面的函式,由這個函式決定是否保留 f = filter(lambda name : not name.startswith('張'),lst) print('__iter__'in dir(f)) #可迭代物件 for el in f: print(el) lst = [ {"name":"alex", "shengao":150, "tizhong":250}, {"name":"wusir", "shengao":158, "tizhong":150}, {"name":"taibai", "shengao":177, "tizhong":130}, {"name":"ritian", "shengao":165, "tizhong":130}, {"name":"nvshen", "shengao":160, "tizhong":120}, {"name":"baolang", "shengao":183, "tizhong":190} ] #過濾掉體重大於180的人 想要的是 小於180 f = filter(lambda d :d['tizhong'] <= 180,lst) print(list(f))
map() 會根據提供的函式對指定序列做對映
lst = ['籃球','打打檯球','唱歌','爬荒山','步'] m = map(lambda s:'愛好:'+s,lst) print(list(m)) lst = [1,5,78,12,16] #計算每個數字的平方 print([i ** 2 for i in lst]) m = map(lambda i : i ** 2,lst) print(list(m))