1. 程式人生 > 其它 >python——函式(2)

python——函式(2)

1、函式的返回值

1.1函式返回值概述

(1)一個函式,不管是否有return,他都是有返回值的,如果沒有return,它的返回值是None。

(2)如果有return,函式的返回值是return後面的內容,切記:return後面的程式碼是不能夠執行的。

(3)函式返回值的價值是:把函式與函式能夠建立一層關聯關係。

(4)用程式碼來處理動態引數可以用函式的返回值。

1.2函式返回值例項

#用函式返回值可以實現用程式碼解決動態引數問題。如以登入為例,可以結合介面測試的session流程來理解。
#定義一個登入的函式,返回其sessionId.
def login(username="qy",password="123456"):
	if username=="qy" and password=="123456":
		return "adefcade123"
	else:
		return "使用者名稱或密碼錯誤!"
#定義一個檢視個人主頁的函式,呼叫登入返回的sessionId。
def profile(sessionId):
	if sessionId=="adefcade123":
		print("歡迎訪問主頁!")
	else:
		print("請登入")

profile(sessionId=login())

2、內部函式

2.1定義

內部函式就是內部已經實現的函式,我們直接呼叫即可。

2.2常用內部函式

2.2.1數字與字母轉換

2.2.1.1數字轉字母:chr

# #數字轉字母:chr,必須轉97以上的,因為a就是97。
print(chr(98))

2.2.1.2字母轉數字:ord

# #字母轉數字:ord
 print(ord("c"))

 

2.2.2輸出某個範圍數字:range

#結合迴圈輸出某個範圍內的數字,包含開始不包含結尾:range(start, end, scan):,scan就是步長,預設為1.
for a in range(1,9):
	print(a)

for b in range(1,9,2):   #步長為2
	c=(str(b))   #把輸出的資料轉換為字串
	print(list(c))   #把字串轉換為列表

2.2.3輸出某個範圍內的隨機數字:random

2.2.3.1例項1

# 輸出某個範圍的隨機數字:random.randint(a,b),隨機輸出a到b範圍內的數字,包含a但不包含b
import random
print(random.randint(1,100))

2.2.3.2隨機4位驗證碼的實現

#隨機輸出一個4位數驗證碼
import random
list1=[]
for a in range(4):  #僅僅是為了實現迴圈4次。
	r=random.randint(97,120)  #迴圈4次,每次取97到120範圍內的某個數字。
	list1.append(chr(r))  #將每次迴圈得到的數字轉換為字母,新增到列表中。
print("".join(list1))  #將列表轉換為字串輸出。

2.2.4把字串轉化為表示式:eval

#把字串轉化為表示式:eval
a="5+5"
print(eval(a))

2.2.5匿名函式:lambda

#匿名函式指的是他是一個函式,但是這個函式的名稱是可以自定義的:lambda。也就是相當於把函式寫為一行了。
a=lambda x,y:x/y  #:左邊是函式的形式引數,右邊是函式的表示式。
print(a(6,2))

2.2.6過濾出想要的內容

2.2.6.1通過迴圈實現(for)

#過濾出列表中想要的內容,如過濾出列表1中大於2的內容
list1=[1,9,3,4,7,6,5,8,2]
#通過迴圈實現
list2=[]
for a in list1:
	if a>2:
		list2.append(a)
print(list2)

2.2.6.2通過函式實現:filter

#過濾出列表中想要的內容,如過濾出列表1中大於2的內容
list1 = [1, 9, 3, 4, 7, 6, 5, 8, 2]
#通過過濾函式實現:filter,其引數:(1)函式物件,但是沒有();(2)可迭代的物件(可以被迴圈的物件)
#第一種方法,常規函式
def func(a):
	if a>2:
		return True
print(list(filter(func,list1)))  #用list強制把輸出的內容轉換為列表形式
#第二種方法,藉助lambda函式
print(list(filter(lambda x:x>2,list1)))

2.2.7針對所有物件做同一個操作

2.2.7.1通過迴圈實現(for)

#針對所有物件做同一個操作,如對列表1中的每個物件+10
#通過迴圈的方式實現
#第一種方式:生成一個新列表
list1=[1,2,3,4,5,6,7,8,9,10]
list2=[]
def func():
	for a in list1:
		list2.append(a+10)
	print(list2)
func()
#第二種方式:常規函式,藉助迴圈和索引修改列表中的內容
def func1():
	for index,b in enumerate(list1):
		list1[index]=b+10
	print(list1)
func1()
#第三種方式,常規函式,藉助列表解析式和迴圈
list3=[1,2,3,4,5,6,7,8,9,10]
def func2():
	list4=[i+10 for i in list3]
	print(list4)
func2()

2.2.7.2通過內部函式實現:map

list1=[1,2,3,4,5,6,7,8,9,10]
#通過函式實現,針對所有物件做同樣的操作:map,其引數:(1)函式物件,但是沒有();(2)可迭代的物件(可以被迴圈的物件)
#第一種方式,藉助lambda函式和map函式
print(list(map(lambda a:a+10,list1)))

3、全域性變數與區域性變數

3.1概述

(1)全域性變數:在一個python檔案中定義的變數;

(2)區域性變數:在一個函式中定義的變數。

(3)優先順序

A、在函式內部呼叫變數,區域性變數優先順序是高於全域性變數的;

B、在python檔案中呼叫變數,全域性變數的優先順序是高於區域性變數的。如果在函式內部想引用全域性變數,那麼使用關鍵字global。

3.2例項

#全域性變數:在一個python檔案中定義的變數;區域性變數:在一個函式中定義的變數。
# 優先順序:在函式內部呼叫變數,區域性變數優先順序是高於全域性變數的;在python檔案中呼叫變數,全域性變數的優先順序是高於區域性變數的。
#如果在函式內部想引用全域性變數,那麼使用關鍵字global.
name="柒夜"
def func():
	name="qy"
	print(name)
func()
print(name)
#在函式內部引用全域性變數:global
def func():
	global name
	print(name)
func()

4、函式異常邏輯處理

4.1異常邏輯概述

異常的父類是BaseException,他執行的邏輯如下:

(1)try:

(2)except:

(3)else:

(4)finally:

異常邏輯執行的順序:

1、正常邏輯:try——>else——>finally,即先執行try,正常邏輯情況下try可執行,接下來執行else,最後執行finally。其中try必須填寫,else和finally可以填寫也可以不填寫。

2、異常邏輯:try—— >except——>finally,即先執行try,異常邏輯try不可執行,就跳過try,直接執行except捕獲異常原因,最後執行finally。其中try和except必須填寫,finally可以填寫也可以不填寫。

4.2異常邏輯處理例項

4.2.1例項1:分母不能為0異常處理

#異常邏輯:分母不能為0.
def func(a,b):
	try:
		print(a/b)
	except Exception as e:  #捕獲異常,Exception是所有異常的基類,可以捕獲所有異常。
		print(e.args[0])  #輸出捕獲到的異常資訊,e.args[0]是固定格式。
	else:
		print("我是try,先執行try在執行我!")
	finally:
		print("不管是否正常,我都執行")
func(1,1)
#正常邏輯:try——>else——>finally,即先執行try,正常邏輯情況下try可執行,接下來執行else,最後執行finally。
# 其中try必須填寫,else和finally可以填寫也可以不填寫。
func(1,0)
#異常邏輯:try—— >except——>finally,即先執行try,異常邏輯try不可執行,就跳過try,直接執行except捕獲異常原因,最後執行finally。
#其中try和except必須填寫,finally可以填寫也可以不填寫。

 4.2.2例項2:學生成績判斷迴圈異常處理

#改造學生成績判斷的迴圈,使其可以輸出任意字串不出錯,異常情況下繼續執行。
while True:
	try:
		studentScore = int(input("請輸入學生成績\n"))
		if studentScore >= 0 and studentScore < 60:
			print("繼續努力")
		elif studentScore >= 60 and studentScore < 80:
			print("還可以更進一步")
		elif studentScore >= 80 and studentScore <= 90:
			print("優秀,但還有進步空間")
		elif studentScore > 90 and studentScore <= 100:
			print("非常棒,繼續努力")
		elif studentScore == 120:
			continue
		elif studentScore == 150:
			break
		else:
			break
	except Exception as e:continue

4.2.3例項3:根據索引查詢列表的內容的異常處理

#根據索引查詢列表中的元素,當索引不存在時,使其不報錯,並輸出錯誤原因。
yl=[1,2,3,"a","b","c"]
for a,b in enumerate(yl):
	def func(a):
		try:
			print(yl[a])
		except Exception as e:
			print(e.args[0])
		else:
			print("我是try,先執行try在執行我!")
		finally:
			print("不管是否正常,我都執行")
#正常邏輯:先執行try,再執行else,最後執行finally。
func(3)
#異常邏輯:先執行try,執行異常,然後執行except,最後執行finally。
func(8)

5、模組和包

5.1概述

1、模組:在python中,每一個python檔案都是一個模組(module)。

2、包(package):在一個包裡面會有很多模組。

3、包與資料夾的區別:包裡面有_init _.py檔案;資料夾裡沒有。

4、如何建立包和資料夾:

(1)建立包,如下圖,包的中間有一個小孔。

(2)建立資料夾,如下圖,資料夾中間沒有小孔。

5.2模組間的呼叫

一個模組呼叫另一個模組中的所有的內容,前提是另一個模組是一個包中的,用的是from (包的位置).package.module import *(*代表所有內容)。

#一個模組呼叫另一個模組中的所有的內容,前提是另一個模組是一個包中的,用的是from (包的位置).package.module import *(*代表所有內容)
#如呼叫基礎學習檔案下的login包中的f1.py模組中的內容
from 基礎學習檔案.login.f1 import *
print(name)
func()