您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何在python項目中使用內置函數,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
內置函數:
1、abs()
返回一個數值的絕對值,可以是整數或浮點數等。
print(abs(-18)) print(abs(0.15)) result: 18 0.15
2、all(iterable)
如果iterable的所有元素不為0、''、False或者iterable為空,all(iterable)返回True,否則返回False。
print(all(['a','b','c','d'])) #列表list,元素都不為空或0,返回True True print(all(['a','b','','d'])) #如果存在一個為空的元素,返回False False print(all([0,1,2,3])) #如果存在為0的元素,同樣返回False False print(all([])) #空元組和空列表返回值為True True print(all(())) True
3、any(iterable)
如果iterable的任何元素不為0、''、False,all(iterable)返回True,如果iterable為空,返回Fasle。
注意:此函數與all()函數的在于,any()函數中有任意一個元素為0、''、False不影響整體,會返回True,而all()函數中必須是全部不包含特殊元素才會返回True,只要有一個特殊元素,會直接返回False.
print(any(['a','b','c','d'])) #列表list,元素都不為空或0 True print(any(['a','b','','d'])) #列表list,存在一個為空的元素,返回True True print(any([0,False])) #如果元素全部是0,Fasle,返回Fasle False print(any([])) #any函數中空列表和空元組返回Fasle False print(any(())) False
4、bin()
將一個整數轉換成一個二進制字符串,結果以'0b'為前綴。
print(bin(32)) #將十進制轉換成二進制 print(bin(64)) print(bin(128)) result: 0b100000 0b1000000 0b10000000
5、hex()
將一個整數轉換成一個小寫的十六進制字符串,結果以'0x'為前綴。
print(hex(255)) #將整數轉換成十六進制 print(hex(192)) result: 0xff 0xc0
6、oct()
將一個整數轉換成八進制的字符串,結果以'0o'為前綴。
print(oct(255)) #將整數轉換成八進制 print(oct(192)) result: 0o377 0o300
7、bool()
返回一個布爾值,True或False。
print(bool()) #bool值缺省為False False print(bool(0)) False print(bool('jack')) True print(bool("")) False
8、bytes()
將一個字符串轉換成你想要的編碼格式的字節。
print(bytes('你好',encoding='utf-8')) #將字符串轉換成utf-8編碼格式的字節 b'\xe4\xbd\xa0\xe5\xa5\xbd' print(bytes('你好',encoding='gbk')) #將字符串轉換gbk編碼格式的字節 b'\xc4\xe3\xba\xc3'
9、chr()
介紹chr()函數之前先看一下ASCII碼對照表:
chr()函數就是返回整數對應的ASCII碼對照表里的字符,取值范圍[0~255]之間的正數。
ord()函數作用正好和chr()函數相反,不再介紹,請看下面例子:
n = chr(65) #根據十進制找到在ascii碼里對應的字符 print(n) result:A a= ord("a") #根據字符找到在ascii碼里對應的十進制 print(a) result:97
10、compile(source,filename,mode)
將source編譯為,代碼對象能夠通過exec語句來執行或者eval()進行求值。
source:字符串或者對象;
filename:代碼文件名稱,如果不是從文件讀取代碼則傳遞一些可辨認的值;
model:編譯代碼的種類,可以指定為'exec','eval','single'。
code="for i in range(0,10):print(i)" cmpcode = compile(code,'','exec') #可以將字符串轉換成python代碼執行 print(cmpcode) result: <code object <module> at 0x000002A54E938ED0, file "", line 1>
11、exec()
exec語句用來執行儲存在字符串或文件中的Python語句。
exec("print('hello,world')") #執行exec()里的python語句 result: hello,world
12、eval()
eval()函數將字符串str當成有效的表達式來求值并返回計算結果。
ret = eval("8*8") #執行表達式并返回結果 print(ret) #result:64 t = exec("8*8") #執行python代碼,可以接收或字符串,沒有返回值 print(t) #result:None
13、divmod(a,b)
divmod(a,b)方法是計算a,b的商和余數,即:a//b 余幾,返回結果為元組。以后做網頁翻頁的時候會。
num = divmod(9,2) #9//2 print(num) #result: (4,1) #結果為商4余1
14、enumerate(iterable,start=0)
返回一個枚舉對象。iterable必須是序列,迭代器,或者其他支持迭代的對象。
dic = {'name':'jack', 'age':18, 'sex':'boy',} for i in enumerate(dic.keys(),start=0): print(i) #result: (0, 'name') (1, 'sex') (2, 'age')
15、filter()
對于序列中的元素進行篩選,最終獲取符合條件的序列。
filter() #循環第二個參數,讓每個循環元素執行函數,如果函數返回值為True,表示元素合法 filter內部實現方法: for item in 第二個參數: r = 第一個參數(item) if r: result(item) return result #例: def f1(args): if args>22: return True li=[11,22,33,44] ret = filter(f1,li) print(list(ret)) #返回值為一個迭代器,所以使用list()函數來返回像上面這種簡單的函數可以使用lambda函數來執行:
像上面這種簡單的函數可以使用lambda函數來執行:
li = [11,22,33,44] ret = filter(lambda a:a>22,li) #通過lambda函數處理,lambda是有返回值的,條件成立返回True print(list(ret))
對于列表中字符串跟數字并存的提取方法:
li = [2,32,4,45,22,'tony',33,25,5,76,'liupeng',19,78,'jack',24] l1 = [] <br>ret = filter(lambda i:type(i) == str,li) #使用filter函數結合lambda表達式來過濾type為str的元素 print(ret,type(ret)) for i in ret: l1.append(i) #把過濾掉的str元素導入到新列表中 print(l1) #result: <filter object at 0x7f4c5d1abcf8> <class 'filter'> ['tony', 'liupeng', 'jack'] li = [11,22,33,44,55,66,77,88,99,90] def numb(args): if args % 2 ==0: #取列表中偶數值,要想取基數值把0變成1 return True ret = filter(numb,li) print(list(ret)) #result: [22, 44, 66, 88, 90] li1 = ['A','','B',None,'C',' '] def numb1(args): if args and args.strip(): # 去空 return True ret = filter(numb1,li1) print(list(ret)) #result: ['A', 'B', 'C']
filter主要的功能其實就是進行過濾及篩選。在此進行一段插曲。python中的正則表達式也可以進行過濾跟篩選,主要是面向于字符串的過濾中起到了很好的作用。對于正則表達式打算另起章節具體介紹,在此僅簡單列舉1-2個案例僅供參考。
小插曲(正則表達式篩選案例):
需求1:取出s變量中的speed跟angle。
import re #在這里我們需要提前導入re模塊。目的為了是使用re模塊中findall方法 s = 'speed=210,angle=150' m = re.findall(r'(\w*[a-zA-Z]+)\w*',s) #\w代表匹配字母跟數字,*代表對于前一個字符重復0到無窮次,[a-zA-Z]代表匹配26個包含大小寫的字母,而后面的+號表示把匹配到的字母拼接起來 # m = re.findall(r'([a-zA-Z]+)',s) #上述代碼的簡化版。不需要指定過度的匹配字符,因為[a-zA-Z]的范圍已經是指定了所有字母組合了。 print (m) #result: ['speed', 'angle']
需求2:從s這個字符串中,把數字跟字符分別提取出來。
import re s = 'lajsfdhoiqu190821AWJKJE34ijoohoyyuoi1234uh22412io980843' s1 = re.findall(r'[0-9]+',s) #使用方法跟需求1中的運用方法基本一致。只不過范圍我們從字符轉到了字母身上。而在指定字母的時候給出【0-9】的范圍即可。 print(s1) s2 = re.findall(r'([a-zA-Z]+)',s) print(s2) #result: ['190821', '34', '1234', '12412', '980843'] ['lajsfdhoiqu', 'AWJKJE', 'ijoohoyyuoi', 'uh', 'io']
需求3:從s這個字符串中,把數字跟字符分別提取出來。
import re relink = '<a href="(.*)">(.*)</a>' info = '<a href="http://www.baidu.com">baidu</a>' cinfo = re.findall(relink,info) print (cinfo) #result: [('http://www.baidu.com', 'baidu')]
16、map(函數,可迭代的對象)
我們先看map。map()
函數接收兩個參數,一個是函數,一個是序列,map
將傳入的函數依次作用到序列的每個元素,并把結果作為新的list返回。
舉例說明,比如我們有一個函數f(x)=x2,要把這個函數作用在一個list [1, 2, 3, 4, 5, 6, 7, 8, 9]
上,就可以用map()
實現如下:
現在,我們用Python代碼實現:
>>> def f(x): ... return x * x ... >>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]
map()
傳入的第一個參數是f
,即函數對象本身。
你可能會想,不需要map()
函數,寫一個循環,也可以計算出結果:
def f(x): return x*x L = [] for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: L.append(f(n)) print(L) #result: [1, 4, 9, 16, 25, 36, 49, 64, 81]
的確可以,但是,從上面的循環代碼,能一眼看明白“把f(x)作用在list的每一個元素并把結果生成一個新的list”嗎?
所以,map()
作為高階函數,事實上它把運算規則抽象了,因此,我們不但可以計算簡單的f(x)=x2,還可以計算任意復雜的函數,比如,把這個list所有數字轉為字符串:
>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]) ['1', '2', '3', '4', '5', '6', '7', '8', '9']
只需要一行代碼(僅限于python2的版本。python3返回的是個迭代器需要for循環出元素)。
li = [11,22,33,44] ret = map(str,li) l1 = [] for x in ret: l1.append(x) print(l1) #result: ['11', '22', '33', '44']
map結合lambda表達式案例:
li = [11,22,33,44] new_list = map(lambda a:a+100,li) print(list(new_list)) #result: [111,122,133,144] li = [11, 22, 33] sl = [1, 2, 3] new_list = map(lambda a, b: a + b, li, sl) print(list(new_list)) #result: [12, 24, 36]
map結合生成器案例:
def func(x,y): return x*y*2 #返回結果為x*y的和再成2 li = [1,2,3,4] li1= [2,3,4,5] ret = map(func,li,li) # 第一個參數為func函數本身,第二個參數為x(li列表中的每個值),第三個參數為y(li1列表中的每個值) print(ret.__next__()) for i in ret: print(i) #result:(結果為li列表跟li1列表每個值相乘再成2) 4 12 24 40
17、reduce()
對于序列內所有元素進行累計操作:
li = [11,22,33] result = reduce(lambda x,y:x + y,li) print (result) #result: #注意在Python3中已經沒有了reduce函數 66<br><br>當然也可以通過結合lambda表達式3行解決<br><br> 1 from functools import reduce#python3中已經把reduce踢出了內置函數。需要通過import functools函數來引用reduceli = [11,22,33]result = reduce(lambda x,y:x+y,li)print(result)#result:66
18、isinstance()
判斷對象是不是類的實例。
li = [11,22,33] n = isinstance(li,list) #判斷li是不是list類的實例 print(n) #result: True
19、len()
判斷字符串長度。
s = "你好" print(len(s)) #在python3中len函數既可以取的字符的長度,也可以取字節的長度 #python2.*中len函數只可以取字節的長度 #result:2 s = "你好" b = bytes(s,encoding='utf-8') print(len(b)) #result:6 分別使用2.*和3.*循環“你好”,查看結果: 2.7 for 循環“你好” #輸出6個空字符 3.5 for 循環“你好”查看結果 #輸出"字符串結果"
20、max()、min()、sum()
max():取最大值; min():取最小值; sum():取總的值
li=[11,22,33] print(max(li)) #最大值 33 print(min(li)) #最小值 11 print(sum(li)) #總和 66
21、pow(x,y)
pow()返回x的y次方的值。
print(pow(2,3)) #計算2的3次方 8 print(pow(2,4)) #計算2的4次方 16
22、round()
round()方法返回浮點數x的四舍五入值。
print(round(2.3)) #四舍五入 2 print(round(2.8)) 3
23、random()
random方法返回隨機生成的一個實數,它在[0,1]范圍內。random的使用一般對于自動生成密碼,驗證碼之類的用的比較多。
import random print('random:',random.random()) #result: random: 0.7037348886029884
# coding=utf-8 __author__ = 'hillfree' import random def testRand(): # 在[a, b]之間產生隨機整數 random.randint(a, b) for i in range(5): ret = random.randint(100, 999) print("random.randint(100, 999) = {0}".format(ret,)) # 在[a, b]之間產生隨機浮點數 random.uniform(a, b) for i in range(5): ret = random.uniform(1.0, 100.0) print("random.uniform(1.0, 100.0) = {0}".format(ret,)) # 在[0.0, 1.0)之間產生隨機浮點數 random.random() for i in range(5): ret = random.random() print("random.random() = {0}".format(ret,)) # 在樣本population中隨機選擇k個 random.sample(population, k) population = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" } for i in range(5): ret = random.sample(population, 3) print("random.sample(population, 3) = {0}".format(ret,)) # 在序列seq中隨機選擇1個 random.choice(seq) seq = ("to", "be", "or", "not", 'tobe', 'is', 'a', 'question') for i in range(5): ret = random.choice(seq) print("random.choice(seq) = {0}".format(ret,)) # 從序列中隨機獲取指定長度的片斷。不修改原有序列。 # random.sample(sequence, k) sentence = "to be or not to be is a question" for i in range(5): ret = random.sample(sentence, 5) print("random.sample(sentence, 5) = {0}".format(ret,)) # 三角分布的隨機數 random.triangular(low, high, mode) for i in range(5): ret = random.triangular(0, 100, 10) print(" random.triangular(0, 100, 10) = {0}".format(ret,)) # 高斯分布的隨機數(稍快) random.gauss(mu, sigma) for i in range(5): ret = random.gauss(0, 1) print(" random.gauss(0, 1) = {0}".format(ret,)) # beta β分布的隨機數 random.betavariate(alpha, beta) # 指數分布的隨機數 random.expovariate(lambd) # 伽馬分布的隨機數 random.gammavariate(alpha, beta) # 對數正態分布的隨機數 random.lognormvariate(mu, sigma) # 正態分布的隨機數 random.normalvariate(mu, sigma) # 馮米塞斯分布的隨機數 random.vonmisesvariate(mu, kappa) # 帕累托分布的隨機數 random.paretovariate(alpha) # 韋伯分布的隨機數 random.weibullvariate(alpha, beta) if __name__ == "__main__" : testRand()
random模塊利用random生成一個簡單的驗證碼案例
# import random 導入 隨機模塊, #驗證碼的操作 random.randint(1,99) #隨機數字 temp = '' 定義一個空字付串 for i in range(6): 循環6次 q = random.randrange(0,4) 自動生成一個0-4的隨機數 if q == 3 or q == 1: 如果隨機數等于3 或 1就生成小寫字母 c2 = random.randrange(0,10) 生成 0--10內的隨機數 temp = temp + str(c2) 向變量中添加當前數字對應的ascii碼的字符 else: c = random.randrange(65,91) 生成 65-91內的隨機數 z = chr(c) temp = temp + z 向變量中添加當前數字對應的ascii碼的字符 print(temp)
隨機生成密碼:
這里用到了除random以外的另外一個模塊(string),通過string模塊可以更方便的為我們調取字母跟數字。不需要按照上例來自己創建范圍來生成數字字母了。
import random import string sal = '!@#$%^&*()><?' def passwd(length): chars = string.ascii_letters + string.digits + sal #return ''.join(random.choice(chars) for i in range(length)) return ''.join(random.sample(chars,8)) if __name__ == '__main__': for i in range(1): print(passwd(8))
24、choice()
choice()方法返回一個列表,元組或字符串的隨機項。
import random #取列表或元組的隨機值 print("choice([1, 2, 3, 5, 9]) : ", random.choice([1, 2, 3, 5, 9])) print("choice('A String') : ", random.choice('A String')) #result: choice([1, 2, 3, 5, 9]) : 9 #執行一次值會變一次 choice('A String') : i
25、randrange()
返回指定遞增基數集合中的一個隨機數,基數缺省值為1,聽這個意思不是太好理解,下面舉例說明:
import random #隨機輸出100到1000間的偶數 print("rangrange(100,1000,2):",random.randrange(100,1000,2)) #隨機輸出100到1000間的其他數 print("rangrange(100,1000,2):",random.randrange(100,1000,3)) #result: rangrange(100,1000,2): 260 rangrange(100,1000,2): 511
下面將上面三個函數放在一起,來做一道題,生成6位的隨機數,其中包括大寫字母,數字?
import random li= [] for i in range(6): #循環6次 temp = random.randrange(65,91) #random隨機數從ascii碼里取65到91 c = chr(temp) #將隨機數找到ascii碼表里找到具體字符 li.append(c) #追加到空列表里 result = "".join(li) #再用join的方式將列表轉換成字符串 print(result) #結果全是大寫字母 li = [] #定義空列表 for i in range(6): #循環6次 r= random.randrange(0,5) #生成一個0-4的隨機值,然后根據r的值判斷數字出現的位置 if r ==2 or r==4: #如果第一次循環r==2或者4的時候,條件滿足,在列表里隨機添加一個數字 num = random.randrange(0,10) #生成一個0-9的隨機數 li.append(str(num)) else: temp = random.randrange(65,91) #如果上面條件不成立,添加字符串 c = chr(temp) li.append(c) result = "".join(li) print(result)
26、zip()
利用每個可迭代元素,制作一個迭代器來聚合元素。
l1 = ['北京',11,22,33] l2 = ['歡迎',11,22,33] l3 = ['你',11,22,33] r=zip(l1,l2,l3) #print(list(r)) # [('北京', '歡迎', '你'), (11, 11, 11), (22, 22, 22), (33, 33, 33)] temp = list(r)[0] ret ="".join(temp) print(ret)
看完上述內容,你們對如何在python項目中使用內置函數有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。