Python3 從零單排5 內建函式

2022-08-11 19:18:15 字數 4957 閱讀 3213

python一些常用的內建函式及作用請見以下**:

lis=[1,4,3,8,2,9,10,0]

print(all(lis))#

判斷可迭代物件裡頭是否存在不為真的元素,如果存在不為真的元素則返回false,否則true

print(any(lis))#

判斷可迭代物件裡頭是否存在為真的元素,如果存在為真的元素則返回true,否則false

print(bin(10).replace('

0b',''))#

10進製轉換為二進位制

print(bool({}))#

把乙個物件轉換成布林型別,非空即真,非0即真

from hashlib import

md5m=md5()

print(dir(m))#

dir列出m的方法

eval('

print("haha")')

exec('

print("haha")')

b=exec('

[1,2,3]

')#exec執行**時,不返回值,這裡b是none 可以執行多行**,且無返回值

c=eval('

[1,2,3]

')#eval執行**時,返回值,多用於表示式,這裡賦值成功 只可以執行一行**,有返回值

print(b)#

會輸出none

print(c)#

會輸出[1,2,3]

exec("

def hs():print(123)

")#可執行複雜**,這裡正常余興

eval("

def hs():print(123)

")#不可以執行複雜**,會報錯

print(round(66.66666,3))#

round(float,int)保留float小數的int位

print(sum([1,6,9]))#

求和print(min([1,6,9]))#

取最小值

print(max([1,6,9]))#

取最大值

print(hex(34523).replace('

0x',''))#

10進製轉16進製制

print(hash('

asd'))#

將乙個字串hash成數字

print(globals())#

返回程式內所有的變數,返回的是乙個字典

print(locals())#

返回區域性變數

1.eval和exec的區別:

最大的乙個區別是eval會返回**執行的值,類似於函式自帶了乙個return功能,但是exec不會,它只管執行**,等於是函式沒有return值,預設返回了none;還有乙個區別是exec可以執行複雜的**,類似於命名函式,定義物件等,但eval不行,eval只能執行單行**。

2.enumerate:

將索引和元素一起輸出,可用於一些和使用者互動的地方,或者用於格式列印輸出到控制台。

lis = ["

a","

b","c"

]for index,value in

enumerate(lis):

print

(index,value)

0 a1b

2 c

3.filter和map的區別

map這個函式會改變原來的list的元素,這裡只的改變有:修改、刪除,而filter這個函式只能刪除、不能修改元素,還有一點需要注意,這兩個函式執行後都是可迭代物件,需要用lsit強制轉換才可以得到list資料:

lis=['

123',456,,0,,(1,2,3),(),{},'

false']

defmy_char(var):

return

varres=filter(my_char,lis)#

filter(fun,list),list只要是可迭代型別即可,迴圈list裡的值,呼叫fun函式,當fun函式返回為真時,保留list的元素,否則,刪掉

print(list(res))#

res得到的是乙個物件,需要list方法接收值

defmaps(var):

return str(var)+'

值都變咯

'res1=map(maps,lis)#

map(fun,list),list只要是可迭代型別即可,迴圈list裡的值,呼叫fun函式,fun函式返回值作為新值儲存到rese1物件裡

print(list(res1))

4.sort內建函式詳解

題:給定乙個字串,找出包含數字和字母的最長字段,並輸出該欄位及其長度,如:abc123!#abc*^123%$xyz789!~12as@!~1a,那麼最長的字段就是:abc123和xyz789,長度為6。

解題思路:

1.找出檔案中的特殊字元  ->  2.將特殊文字都替換成同乙個字元,比如','  ->  3.將字串按該文字分割成乙個陣列  ->  4.找出列表中既包含數字又包含字母最長的字元  ->  5.輸出列印

分割字串有兩種方式,我們先按剛才的解題思路來做一下,找最長字串方法為設計兩個list,乙個存字串,乙個存其長度,求出最長長度,迴圈列印字元,條件為字元長度等於最長長度,**如下:

import

string

str='

#g5$@sdfg45$%dgf&sdfg46&hs[,.564~kj!k23h~jk!nj1

't=string.punctuation

for i in

t: str=str.replace(i,','

)lis=str.split(','

)new_lis=

lens=

for i in

lis:

ifnot i.isdigit() and

not i.isalpha() and len(i)!=0:

for i in

new_lis:

lens.sort()

if len(i)==lens[-1]:

print('

符合題意的字段有:%s,長度為:%s

'%(i,len(i)))

下面對其進行優化兩點:1.字串切割用正則 2.找最長字元的方式

這裡需要介紹下sort、sorted函式:

python3 sorted取消了對cmp的支援,格式:sorted(iterable,key=none,reverse=false),key接受乙個函式,這個函式只接受乙個元素,預設為none;reverse是乙個布林值。如果設定為true,列表元素將被倒序排列,預設為false。

key的作用原理:key指定乙個接收乙個引數的函式,這個函式用於從每個元素中提取乙個用於比較的關鍵字。預設值為none ,下面看幾個例題:

#

1.按照年齡來排序

students = [('

牛牛', '

a', 15), ('

道長', '

b', 12), ('

大師兄','

b', 10)]

students=sorted(students,key=lambda s:s[2])

print

(students)

#結果:[('大師兄', 'b', 10), ('道長', 'b', 12), ('牛牛', 'a', 15)]

#2.乙個字串排序,排序規則:小寫《大寫《奇數《偶數,

#原理:先比較元組的第乙個值,false#

先看一下boolean value 的排序:

#print(sorted([true,flase]))===>結果[false,true]

#boolean 的排序會將 false 排在前,true排在後 .

s='9a13c85c7b24a6b'#

正確的順序應該為:abcabc135792468

lis=sorted(s,key=lambda x:(x.isdigit(),x.isdigit() and int(x)%2==0,x.isalpha() and x.isupper(),x.isalpha() and

x.lower()))

print(''

.join(lis))

#1.x.isdigit()的作用是把數字放在前邊,字母放在後邊.

#2.x.isdigit() and int(x) % 2 == 0的作用是保證奇數在前,偶數在後。

#3.x.isupper()的作用是在前面基礎上,保證字母小寫在前大寫在後.

#4.最後的x表示在前面基礎上,對所有類別數字或字母排序。

根據上面的sort函式的排序原理,優化**如下:

import

string,re

str='

#sdfg45$@sdfg45$%dgf&sdfg46&hs[,.564~kj!k122h~j`k!n1j

'lis=re.split(r'\w'

,str)

dic={}

for i in

lis:

ifnot i.isdigit() and

not i.isalpha() and len(i) !=0:

dic[i]=len(i)

new_lis=sorted(dic,key=lambda s:s[1],reverse=true)

print

(new_lis)

for i in

new_lis:

if len(i)==len(new_lis[0]):

print('

最長的字串有:%s

'%i)

Python3 從零單排18 封裝

隱藏屬性 申明類時,資料屬性或者函式屬性,在屬性名稱前加上兩個下劃線,就實現了屬性隱藏,但在python裡不存在絕對的隱藏,它只是在申明的時候定義了它的呼叫方式。class a country china def def self print self.country a a print a.cou...

python3 從零單排3 函式 購買商品小程式

題目如下 商品檔案products.txt裡存的內容如下 使用者檔案user.txt裡存的內容如下 xg 管理員可以操作 1.給使用者充值,輸入使用者名稱,修改money,100000 2.新增商品 3.logout 普通使用者可以操作 1.看商品資訊 2.買東西,a.東西加products,mon...

Python3 從零單排19 組合 多型

組合 物件1的屬性是物件2,物件1就擁有了物件2的資料和函式屬性,這就是組合。a型別和b型別沒有共性,不可以繼承,但是a有b的特性,比如a是人,b是家,a和b沒有繼承關係,但是人有家,a有b的關係,那麼就可以把b的屬性都給a用 class people def init self,name,age ...