python 3 常用內建函式
一.簡介
如其他計算機語言一般, python 也有自己的內建函式,本文會一一實現python的所有內建函式,並註明一些需注意的地方
二.內建函式一覽
三.實現
目錄
(1)dir()
返回指定物件或模組obj的成員列表,如果不帶引數則返回單前作用域內所有表識符
import keyword
# dir() 返回指定物件或模組obj的成員列表,如果不帶引數則返回單前作用域內所有表識符
print(dir())
print(dir(keyword))
執行結果
['In', 'Out', '_', '__', '___', '__builtin__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '_dh', '_i', '_i1', '_i2', '_i3', '_i4', '_i5', '_ih', '_ii', '_iii', '_oh', 'exit', 'func', 'get_ipython', 'keyword', 'quit', 'seq', 'seq2', 'x']
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'iskeyword', 'kwlist', 'main']
(2)help (obj)
obj物件的幫助資訊,類似於java的api文件
# help (obj) obj物件的幫助資訊
help(keyword) # 類似於java的api檔案
Help on module keyword:
NAME
keyword - Keywords (from "graminit.c")
DESCRIPTION
This file is automatically generated; please don't muck it up!
To update the symbols in this file, 'cd' to the top directory of
the python source tree after building the interpreter and run:
./python Lib/keyword.py
FUNCTIONS
iskeyword = __contains__(...) method of builtins.frozenset instance
x.__contains__(y) <==> y in x.
DATA
__all__ = ['iskeyword', 'kwlist']
kwlist = ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'cl...
FILE
d:\softwave\python\lib\keyword.py
(3)bin()、oct() 、hex()、ascii()
傳入十進位制數轉 bin()二進位制 、oct()八進位制 、hex()十六進位制
返回值以字串形式表示
ascii() 函式類似 repr() 函式, 返回一個表示物件的字串, 但是對於字串中的非 ASCII 字元則返回通過 repr() 函式使用 \x, \u 或
\U 編碼的字元。 生成字串類似 Python2 版本中 repr() 函式的返回值。
print(bin(5))
print(oct(7))
print(hex(9))
print(ascii("hello"))
0b101
0o7
0x9
'hello'
(4)ord()、chr()、str()
ord(x) 返回1個字元x的ascii編碼或Unicode編碼
chr(x) 返回 ascii編碼或unicode編碼為x的字元
#str(x) 將任意型別的x轉為字串
print( ord('a'))
print(chr(ord('a')+1))
print(str((1,2,4)))
print(type(str((1,2,4))))
97
b
(1, 2, 4)
<class 'str'>
(5)max( )、 min( )、 sum()、abs()
最大值、最小值,序列元素之和,絕對值
import random # 隨機數生成器
print(random.randint(1,100))
#小案例
#需求 隨機生成10數 存放在列表中,取最大值 最小值 求和
arr1=[]
for i in range(1,10): # 迴圈九次 range表示範圍
arr1.append(random.randint(1,100)) # 在列表裡新增隨機生成的數
print(arr1)
print( max(arr1 ),min(arr1) ,sum(arr1))
print("-------------")
# 方案二 列表推導生成式 聚合寫法 從右向左看
arr2=[ random.randint(1,100) for i in range(10)]
print(arr2)
print(max(arr2) ,min(arr2),sum(arr2))
# 求均值
print( sum(arr2)/len(arr2))
#求絕對值
print(abs(-123))
1
[58, 32, 52, 75, 100, 96, 76, 87, 22]
100 22 598
-------------
[38, 81, 52, 50, 73, 67, 8, 72, 83, 59]
83 8 583
58.3123
# max(x) min(x) 的key引數可以用來指定比較規則 x為序列
x=['21','1234','9','99']
print(max(x)) # 預設按照字串的ascii碼大小
print(max(x, key=len)) # 按照字串長度 key是一個函式function len()
'''模擬底層實現
def max(l,key=None):
maxobj=l[0]
for i in l:
if key!=None:
if key(i)>key(maxobj):
maxobj=i
else:
if i>maxobj:
maxobj=i
return maxobj
'''
print( max(x,key=int)) #按照元素經過int()後的大小比較 字串需為數字,否則報錯
99
1234
1234
# 結合前面的列表推導式,隨機數生成器,max()函式
x=[ [ random.randint(1,100) for j in range(6)] for i in range(5) ]
for item in x:
print(item)
print(max(x,key=sum))
'''
def max(x,key=sum):
maxobj=x[0]
for i in x:
if sum(i)>sum(maxobj)
maxobj=i
return maxobj
'''
[100, 86, 20, 72, 2, 42]
[27, 67, 75, 57, 77, 39]
[56, 83, 93, 97, 81, 89]
[11, 53, 34, 11, 29, 27]
[76, 14, 30, 9, 32, 50]
[56, 83, 93, 97, 81, 89]
# sum(x,start=0) 返回序列x中所有元素之和 返回start+sum(x),即設定初始值
print (sum([1,2,3,4]))
print(sum([1,2,3,5],20))
'''
def sum(l,start=0):
result=0
for i in l:
result+=sum(i) ->sum([1,2,3])+0
return start+result
'''
arr2=[[1,2,3],[2,3,4]]
print(sum(arr2,[5])) #start的型別要與序列元素一致
10
31
[5, 1, 2, 3, 2, 3, 4]
(6)type() 和 isinstance()
type(x) 檢視引數x的型別
isinstance(x,y) 判斷x是否是y的例項
type([3]) #檢視3的型別
type({3}) in (list ,tuple,dict) # {}是set 集合 in 判斷是否在in()的元素裡
isinstance(3,int) # 判斷3是否是int型別的例項
isinstance(3j,(int ,float,str,complex)) #complex 判斷3j是否為int float str 或complex型別
list
False
True
True
(7)sorted()
對列表 、元組、 字典 、集合或其他可迭代物件進行排序並返回新列表
# sorted(iterable,*,key=None,reverse=False) iterable可迭代物件 ,* 多個, key 指定排序規則,reverse:是否逆序 預設為false
x=['aaa','bc','d','b','ba','AB']
print( sorted(x,key=len))
print( sorted(x,key=str))
print( sorted(x,key=str.lower)) # 返回的是列表
['d', 'b', 'bc', 'ba', 'AB', 'aaa']
['AB', 'aaa', 'b', 'ba', 'bc', 'd']
['aaa', 'AB', 'b', 'ba', 'bc', 'd']
(8)reversed()
對可迭代物件 (生成器物件和具有惰性求值物件特性的zip、map、filter,enumerate等物件除外)進行反轉,並返回一個迭代的reverse物件
# reverse(seq 序列)
x=['aaa','bc','d','b','ba']
print(reversed(x)) # 返回一個reverse物件
print( list ( reversed(x)))
<list_reverseiterator object at 0x000001CAA8CC1748>
['ba', 'b', 'd', 'bc', 'aaa']
(9)range( )
惰性求值得到range物件 惰性:不改變原序列
range(stop)
range(start,stop[,step]) 起點(預設0) 終點(範圍不包括終點) 步長(預設1)
print(range(5))
print(type(range(5)))
print( list( range(5)))
print( range(0,5,3))
print(list(range(0,5,3)))
range(0, 5)
<class 'range'>
[0, 1, 2, 3, 4]
range(0, 5, 3)
[0, 3]
(10)enumerate()
列舉 。返回 可迭代的enumerate物件 每個元素都包含索引,值的元組
# enumerate(iterable,start=0)
print(enumerate('abcde'))
print( list(enumerate('abcdee'))) # 返回 一個enumerate物件,每個元素為一個元組,元組的元素為可迭代物件每個元素的下標索引+元素值
for index,value in enumerate('abcde'):
print( index,":",value)
print( list(enumerate([1,2,3,4])))
<enumerate object at 0x00000284FBB111F8>
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'e')]
0 : a
1 : b
2 : c
3 : d
4 : e
[(0, 1), (1, 2), (2, 3), (3, 4)]
(11)map()
對映,將一個函式引數對映到序列或迭代器的物件的每個元素上,並返回一個個迭代的map物件,這個物件的每個元素是原序列中元素經過函式處理後的結果
#使用者自定義函式
def addTen(num):
return num+10
print( list(map(addTen,range(5))))
['0', '1', '2', '3', '4']
#使用者自定義函式
def addTen(num):
return num+10
print( list(map(addTen,range(5))))
[10, 11, 12, 13, 14]
def addTen2(num1,num2):
return num1+num2
print( list( map(addTen2 ,range(5) ,range(10,15) ) ) )
[10, 12, 14, 16, 1
# 使用lambda: 匿名函式,有返回值
lam1=lambda num:num+10
print( list(map(lam1,range(5))))
print( list(map(lambda num:num+10,range(5))))
print( list(map (lambda _:_+10,range(5))))
[10, 11, 12, 13, 14] [10, 11, 12, 13, 14] [10, 11, 12, 13, 14]
lam2=lambda num1,num2:num1+num2
print( list(map(lam2,range(5),range(10,15))))
print(list(map(lambda num1,num2:num1+num2 ,range(5),range(10,15))))
print( list(map(lambda _1,_2:_1+_2,range(5),range(10,15))))
[10, 12, 14, 16, 18]
[10, 12, 14, 16, 18]
[10, 12, 14, 16, 18]
#
def myMap(iterable,op,value):
if op not in ['+','-','*','/','//','**']:
return 'Error operatoe'
lam1=lambda _:eval( str(_)+op+str(value))
return map(lam1,iterable)
print( myMap([1,2,3],'+',5))
print(list (myMap([1,2,3],'+',5)))
print( list(myMap([1,2,3],'^',5)))
<map object at 0x00000284FBB4A7F0>
[6, 7, 8]
['E', 'r', 'r', 'o', 'r', ' ', 'o', 'p', 'e', 'r', 'a', 't', 'o', 'e']
# 取出整數每一位,
x=random.randint(1,1e30)
print(x)
print(list(str(x)))
print( list(map (int,str(x))))
438251004955062915134138002088
['4', '3', '8', '2', '5', '1', '0', '0', '4', '9', '5', '5', '0', '6', '2', '9', '1', '5', '1', '3', '4', '1', '3', '8', '0', '0', '2', '0', '8', '8']
[4, 3, 8, 2, 5, 1, 0, 0, 4, 9, 5, 5, 0, 6, 2, 9, 1, 5, 1, 3, 4, 1, 3, 8, 0, 0, 2, 0, 8, 8]
(12)reduce( )
標準庫 functools中的函式reduce()可以將一個接收2個引數的函式以迭代器累積的方式從左到右依次作用到一個序列或迭代器物件的所有元素上,並且允許指定一個初始值
from functools import reduce
seq=list(range(1,100))
print(seq)
print(reduce(lambda _1,_2:_1+_2,seq))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
4950
# opeator 模組 操作符
# 。add() sub() mul() div()
import operator
print( operator.add(1,2))
print( operator.mul(1,2))
print( reduce (operator.add,seq))
print( reduce( operator.mul,range(1,11)))
3
2
4950
3628800
(13)filter( )
內建函式filter()將一個單引數函式作用到一個序列上,返回該序列中使得該函式返回值為True的那些元素組成的filter對,如果指定函式為none,則返回序列中等價於True的函式
seq=['sada','1sd','***','?!']
def func(value):
return value.isalnum() # 判斷是否為字母或數字
print(filter (func,seq))
print(list(filter(func,seq)))
seq2=[33,55,88,99]
print( list( filter(lambda _:_>60 ,seq2)))
<filter object at 0x000001CAA8C23160>
['sada', '1sd']
[88, 99]
(14)zip()
zip()函式用來把多個可迭代物件的元素壓縮到一起,返回一個可迭代的zip物件,其中每個元素都是包含原來的多個可迭代物件對應位置上元素的元組,如同拉拉鍊一樣
print( zip('abc',[1,2,3]))
print( list( zip('abc',[1,2,3])))
print(list(zip('abcd',[1,2,3,4],[4,5,6,7,8,9])))
<zip object at 0x000001CAA8C796C8>
[('a', 1), ('b', 2), ('c', 3)]
[('a', 1, 4), ('b', 2, 5), ('c', 3, 6), ('d', 4, 7)]
(15) all()、any()
all() 函式用於判斷給定的可迭代引數 iterable 中的所有元素是否都為 TRUE,如果是返回 True,否則返回 False。
元素除了是 0、空、FALSE 外都算 TRUE。
#函式等價於:
def all(iterable):
for element in iterable:
if not element:
return False
return True
print( all(['a', 'b', 'd']) )
print( all(['a', 'b', '', 'd']) )
print( all(['a', 'b', 'd','0']) ) # 列表list,存在一個為空的元素
True
False
False
any() 函式用於判斷給定的可迭代引數 iterable 是否全部為 False,則返回 False,如果有一個為 True,則返回 True。
元素除了是 0、空、FALSE 外都算 TRUE。
# 函式等價於:
def any(iterable):
for element in iterable:
if element:
return True
return False
a=any(['',0])
print(a)
a=any(['asd',''])
print(a)
False
True
四.map、filter、enumerate、zip等物件不僅具有惰性求值的特點,還有另外一個特點,訪問過的元素不可再次訪問
x=map(str,range(10))
print(list(x))
print(list(x))
x=map(str,range(10))
x=list(x)
print(x)
print(x)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
[]
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']