python函式學習(5)
1)一個函式,不管是否有return,它都有返回值的,如果沒有return,它的返回值是None
2)如果有return,函式的返回值是return後面的內容,切記:return後面的程式碼是不能夠執行的。
3)函式返回值的價值是:把函式與函式能夠建立一層關聯關係。
登入網際網路產品之後,會建立一個sessionid,如果sessionid與登入的該賬戶的sessionid一致就會顯示個人主頁面。
def zhihulogin(username='lm',password='admin'): #登入知乎,賬號和祕密已定義 if username=='lm' and password=='admin': return 'we456ertre' else: return'賬戶或密碼錯誤' def profile(session_id): #定義另一個函式 if session_id=='we456ertre': #如果session-id與登入的session_id一致
print('歡迎檢視知乎主頁')
else:
print('請登入')
profile(session_id=zhihulogin())
2.內部函式
1.chr數字轉字母,數字最小97才能轉字母
ord字母轉數字
例如:range(1,5)輸出的就是1,2,3,4
range(4),輸出的就是0,1,2,3
3.內部庫,隨機輸出一個數字
庫都是需要匯入的,匯入的關鍵字的import
例項:驗證碼是如何隨機生成的?
import random #匯入數字 list1=[] #新建一個列表list1 for i in range(4): #迴圈輸出4個數字 r=random.randrange(97,120) #r隨機生成1個數字 list1.append(chr(r)) #將隨機生成的4個數字轉為字母,放進列表list1中 print(''.join(list1)) #輸出,將列表轉為字串
5.lambda:匿名函式
指的是它是一個函式,但是這個函式的名稱可以是自定義的
普通方式過濾出列表中大於2的數字
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] list2=[] def func(): for item in list1: list2.append(item+10) print(list2) func()
使用過濾函式filter()
1.函式物件,但是沒有()
2.可迭代的物件(可以被迴圈)
print(list(filter(func,list1)))#過濾出List1中大於2的數字
print(list(filter(lambda x:x>2,list1)))#使用lambda函式自定義,list強制資料轉換
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] def func(a):#定義一個函式,函式的形參為a if a>2: #如果a>2 return True #則結果為對 print(list(filter(func,list1))) #輸出過濾之後list1中的數字 print(list(filter(lambda x:x>2,list1))) #第2種方法使用過濾函式filter和lambda函式自定義相結合,list是強制資料轉換
7.map:針對所有物件做同樣的操作
1.函式物件
以下還是常規操作和使用map函式的對比
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] list2=[] def func(): for item in list1: list2.append(item+10) print(list2) func() print( list(map(lambda a:a+10,list1)) )
優先順序:
1.在python檔案中,呼叫變數,全域性變數優於區域性變數
2.在函式內部呼叫變數,區域性變數的優先順序高於全域性變數
3.如果在函式內部想引用全域性變數,那麼使用的關鍵字是global
異常的父類是BaseException
try:
expect:
else:
finally:
異常順序:
1.正常邏輯:try-->else-->finally
2.異常邏輯:try-->except-->finally
異常邏輯,expect捕獲異常,列印輸出異常結果,如果程式中寫了兩個except,只有一個錯誤,則列印輸出第一個捕獲到的錯誤資訊
e.args[0]是原生程式碼,可以自行修改和定義,例如”分母不能為0“
正常邏輯:
例項:學生成績只能輸入數字,輸入字母就會報錯,使用異常處理改造之後程式都可以正常執行
輸出結果:
5.模組和包
1.在python中,每一個Python檔案都是一個模組(module)
2.包:在一個包裡面有很多的模組
3.包與資料夾的區別:包裡面有 _ init _.py檔案,資料夾沒有
例如 在testDev裡建立一個login的包:(包的圖示有個洞,資料夾沒有)
資料夾:
一個模組呼叫另外一個模組檔案的變數以及函式
from packages.module import *(代表所有)
首先建立一個login的包,在login的包下建立一個模組f1.py,
再從另外一個模組匯入之前的模組裡的內容