重要內建函式、常見內建函式(瞭解)、可迭代物件、迭代器物件、for迴圈原理、異常捕獲

吳仁耀發表於2023-03-03

一、重要內建函式

1. zip

說白了就是壓縮幾組資料值,說細了就是將可迭代物件作為引數,將物件中對應的元素打包成一個個元組,然後返回由這些元組組成的物件,一般會用listdict方法輸出為對應的型別,當物件為多個的時候,會根據資料值最少的那個引數為輸出的個數,多餘的部分就不會輸出了

# zip
l1 = [11,22,33,44,55]
l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
l3 = [1,2,3,4,5]
res = zip(l1,l2,l3)
print(list(res))
# [(11, 'jason', 1), (22, 'kevin', 2), (33, 'oscar', 3), (44, 'jerry', 4), (55, 'tony', 5)]
l1 = [11,22,33]
l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
l3 = [1, 2, 3, 4]
res = zip(l1, l2, l3)
print(list(res))
# [(11, 'jason', 1), (22, 'kevin', 2),(33, 'oscar', 3)]

當我們使用zip方法壓縮後還可以解壓,使用方法為:zip(*+變數名):

aa = [(1,2), (2,3), (3,4)]
a, b = zip(*aa)
print(a)
print(b)
(1,2,3)
(2,3,4)

2. filter

filter函式是篩選的意思:此函式會將可迭代物件中的每一位元素作為引數傳遞到func中,如果結果為True,則將此元素新增到結果列表中,filter()返回的結果是一個新的列表
表現形式:filter(func,iterable)
其中func為函式名,可為lambda匿名函式,iterable為可迭代物件

# filter
l1 = [11,22,33,44,55,66,77,88]
res = filter(lambda x: x > 40, l1)
print(list(res))
# [44,55,66,77,88]

這裡filter函式在匿名函式的作用下達成的功能是判斷列表l1中的值,如果根據匿名函式的條件得出這個資料值大於40就把記錄到結果中用res輸出結果

3.sorted

sort方法大家一定很眼熟,他是列表的升序排列,到了內建函式sorted中也一樣的作用
表現形式:sorted(iterable,key=None,rever=False)
iterale-可迭代物件
key -主要是用來進行比較的元素,只有一個引數,具體的函式的引數就是取決自於可迭代物件中,指定可迭代物件中的一個元素來進行排序,(說白了就是弄個函式加了條件)
reverse -排序規則,reverse = True降序,reverse = False升序(預設)

# sorted
l1 = [21, 12, 53, 64, 76, 32, 11, 22]
res = sorted(l1)
print(res)	# 預設升序
# [11,12,21,22,32,53,64,76]

下面是key加入函式的例子:

b = {1: 'ab', 2:'degg', 4:'ght',9:'d'}

res1 = sorted(b.items(), key=lambda i: i[0])	# 指定按字典裡面的鍵排序
print(res1)

[(1,'ab'),(2,'degg'),(4,'ght'),(9,'d')]

res2 = sorted(bitems(), key=lambda i: len(i[1]))	# 指定按字典裡面的value長度排序,預設從小到大
print(res2)

[(9, 'd'), (1, 'ab'), (4, 'ght'),(2, 'degg')]

res3 = sorted(b.items(), key=lambda i: len(i[1]), reverse=True)		# 指定按字典裡的value長度排序,同時進行翻轉,即按value的長度從大到小排序
print(res3)

[(2, 'degg'), (4, 'ght'). (1, 'ab'), (9, 'd')]

二、常見內建函式(瞭解)

1.abs

abs的作用很好理解,就是把數值變成絕對值,也就是變成正數

print(abs(-100))
print(abs(100))
# 100
# 100

2.all

對條件進行判斷,如果給定的所有條件都對就返回True,否則就返回False,可以和and的作用放一起記憶

3.any

對條件進行判斷,如果給定的條件裡面有一個對就返回True,都錯的時候返回False,可以和or的作用放一起記憶

4.bytes

相當與encode的作用,對給定的資料值進行編碼,會轉換成bytes(二進位制型別)

s1 = '今天週五 內容也很簡單'
print(s1.encode('utf8'))
print(bytes(s1, 'utf8'))
# b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\x91\xa8\xe4\xba\x94 \xe5\x86\x85\xe5\xae\xb9\xe4\xb9\x9f\xe5\xbe\x88\xe7\xae\x80\xe5\x8d\x95'
# b'\xe4\xbb\x8a\xe5\xa4\xa9\xe5\x91\xa8\xe4\xba\x94 \xe5\x86\x85\xe5\xae\xb9\xe4\xb9\x9f\xe5\xbe\x88\xe7\xae\x80\xe5\x8d\x95'

5.bin、oct、hex、int

進位制轉換的函式,分別是:二進位制、八進位制、十六進位制、十進位制

6.callable

用於判斷這個變數名加了括號是不是就能呼叫了,返回的結果是布林值

name = 'jason'
def index():
	print('form index')
print(callable(name))	# False
print(callable(index))	# True

7、chr、ord

根據ASCII對應的數值或是根據字元對應的資料值返回結果,chr是根據數值返回字元,ord是根據字元返回資料值

8、dir

我們可以透過這個函式檢視括號內的物件能呼叫的方法或函式

print(dir('hello'))

9、divmod

對數值進行整除,並且可以獲得餘數

res = divmod(100, 2)
print(res)  # (50, 0)
res = divmod(100, 3)
print(res)   # (33, 1)

前面的結果時整除的結果,後面是餘數

10、enumerate

用於將一個可遍歷的資料物件(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標,一般結合for迴圈使用(可以人為指定下表開始的資料值):

print(list(enumerate(["a", "b", "c"])))

[(0, 'a'), (1, 'b'), (2, 'c')]

11、eval和exec

兩種函式都是一個作用:把字串的程式碼執行
其中eval只能執行一些簡單的程式碼
exec可以執行復雜一些的程式碼,比如開個for迴圈

s1 = 'print("哈哈哈")'
eval(s1)
exec(s1)
s2 = 'for i in range(100):print(i)'
eval(s2)  # 只能識別簡單的python程式碼 具有邏輯性的都不行,這裡會報錯
exec(s2)  # 可以識別具有一定邏輯性的python程式碼

12、hash

使用雜湊演演算法對資料值進行加密

print(hash('jason'))
# 6504587676088172780

13、id、input、isinstance

id
返回物件的唯一識別符號,識別符號是一個整數(返回物件的記憶體地址)
input
用於接收外界輸入的資訊
isinstance
判斷一個物件是否是一個已知的型別,類似 type()

class A:
    pass
 
class B(A):
    pass
 
isinstance(A(), A)    # returns True
type(A()) == A        # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False

14、map、max、min

map(函式名, 要遍歷的資料)  # 內部本質就是for迴圈,再記住兩個引數的位置和作用
max	# 求出列表中最大值
# l = [1, 2, 10, 30, 5, 6, 7, 8]
# print(max(l))
min	# 求出最小值
# print(min(l))

15、open

> 用於開啟一個檔案,建立一個 file 物件,相關的方法才可以呼叫它進行讀寫,在之前問文字編輯知識點可以找到詳細操作方法,這裡就舉個例子:
```python
with open() as f1:
    pass
f2 = open()

16、pow

返回 xy(x的y次方) 的值
pow(x, y[, z])

17、range

之前講for迴圈的時候介紹過,作用是生成一個工廠,生成資料,python2和python3中的作用有所區別python2中的xrangepython3range作用一樣

18、round

對數值進行四捨五入,但是不太準確,可能是五舍六入

19、sum

sum(list) : 求取list元素的和

三、可迭代物件

1.可迭代物件
	物件內建有__iter__方法的都稱為可迭代物件
	"""
	1.內建方法  透過點的方式能夠呼叫的方法
	2.__iter__  雙下iter方法
	"""
2.可迭代物件的範圍
	不是可迭代物件
    	int float bool 函式物件
	是可迭代物件
    	str list dict tuple set 檔案物件
3.可迭代的含義
	"""
	迭代:更新換代(每次更新都必須依賴上一次的結果)
		eg:手機app更新
	"""
	可迭代在python中可以理解為是否支援for迴圈

四、迭代器物件

1.迭代器物件
	是由可迭代物件呼叫__iter__方法產生的
	迭代器物件判斷的本質是看是否內建有__iter__和__next__
2.迭代器物件的作用
	提供了一種不依賴於索引取值的方式
 	正因為有迭代器的存在 我們的字典 集合才能夠被for迴圈
3.迭代器物件實操
	 s1 = 'hello'  # 可迭代物件
    res = s1.__iter__()  # 迭代器物件
    print(res.__next__())  # 迭代取值 for迴圈的本質
	 一旦__next__取不到值 會直接報錯
4.注意事項
	可迭代物件呼叫__iter__會成為迭代器物件 迭代器物件如果還呼叫__iter__不會有任何變化 還是迭代器物件本身

五、for迴圈內部原理

for 變數名 in 可迭代物件:
    迴圈體程式碼
"""
1.先將in後面的資料呼叫__iter__轉變成迭代器物件
2.依次讓迭代器物件呼叫__next__取值
3.一旦__next__取不到值報錯 for迴圈會自動捕獲並處理
"""

六、捕捉異常

1. 什麼是異常?
	# 異常就是錯誤發生的訊號,如果此訊號不做處理,那麼,從本行開始之後的程式碼都不能正常執行了
2. 異常
	2.1 Traceback
    2.2 XXXError
    	# 錯誤的型別
    2.3   XXXError冒號後面的內容,報錯的詳細原因,我們主要看的也是這部分,大致定位錯誤的原因 
3. 異常的種類
	1. 語法錯誤
    	# 是堅決不允許的,遇到之後要立刻改正,否則,程式碼不能執行
    2. 邏輯錯誤
    	# 是可以被允許的,但是,我們寫邏輯的時候要儘可能的避免邏輯錯誤的發生
        
4. 常見的錯誤型別
	NameError
    IndexError
    KeyError
    ValueError
    ZeroDivisionError
    ...
5. 如何捕捉異常
	try:
      	被監測的程式碼
    except 錯誤的型別1 as e:
        錯誤處理,e:錯誤的原因
    except 錯誤的型別2 as e:
        錯誤處理,e:錯誤的原因
    except 錯誤的型別3 as e:
        錯誤處理,e:錯誤的原因
    except 錯誤的型別4 as e:
        錯誤處理,e:錯誤的原因
        
 '''萬能異常'''
try:
    # print(username)
    # print(1/ 0)
    # l = [1,2,3,4]
    # print(l[6])
    d = {'a':1, 'b':2}
    print(d['c'])  #KeyError
except ZeroDivisionError as e:
    print('')
except NameError as e:
    print(123)
except IndexError as e:
    print(123)
except Exception as e:
    print(e) # name 'username' is not defined
    
    
    
"""
	try except異常捕捉需要注意
    	1. try裡面被監測的程式碼儘量少
    	2. 在明顯沒有錯誤的程式碼不要被捕捉
"""

相關文章