Python學習路線 - Python語言基礎入門 - 函數使用
- 函數介紹
- 函數
- 函數的快速體驗
- 函數的定義
- 函數的定義
- 函數的參數
- 函數的傳入參數
- 函數的傳入參數 - 傳參定義
- 函數的傳入參數 - 語法解析
- 練習案例:升級版自動查詢核酸
- 函數的返回值
- 函數返回值的定義
- 返回值的語法
- None類型
- None類型的應用場景
- 函數說明文檔
- 函數的說明文檔
- 在PyCharm中查看函數說明文檔
- 函數的嵌套調用
- 什么是函數的嵌套
- 變量的作用域
- 局部變量
- 全局變量
- global關鍵字
- 綜合案例
函數介紹
函數
函數:是組織好的,可重復使用的,用來實現特定功能的代碼段。
為什么隨時都可以使用len()統計長度?
因為,len()是Python內置的函數:
- 是提前寫好的
- 可以重復使用
- 實現統計長度這一特定功能的代碼段
我們使用過的:input()、print()、str()、int()等都是Python的內置函數
函數的快速體驗
不使用內函數len(),完成字符串長度的計算。
代碼示例:
"""
演示:快速體驗函數的開發及應用
"""
# 需求,統計字符串的長度,不使用內置函數len()
str1 = "tiantianxiangshang"
str2 = "haohaoxuexi"
str3 = "python"# 定義一個計數的變量
count = 0
for i in str1:count += 1print(f"字符串{str1}的長度是:{count}")count = 0
for i in str2:count += 1print(f"字符串{str2}的長度是:{count}")count = 0
for i in str3:count += 1print(f"字符串{str3}的長度是:{count}")# 可以使用函數,來優化這個過程
def my_len(data):count = 0for i in data:count += 1print(f"字符串{data}的長度是{count}")my_len(str1)
my_len(str2)
my_len(str3)
總結:
1.函數是:
組織好的、可重復使用的、用來實現特定功能的代碼段
2.使用函數的好處是:
- 將功能封裝在函數內,可供隨時隨地重復利用
- 提高代碼的復用性,減少重復代碼,提高開發效率
函數的定義
函數的定義
函數的定義:
函數的調用:
代碼示例:
"""
演示函數的定義語法
"""# 定義一個函數,輸出相關信息
def say_hi():print(f"Hi 我是mry,開始自學Python")# 調用函數,讓定義的函數開始工作
say_hi()
總結:
1.函數的定義語法
2.函數使用步驟:
- 先定義函數
- 后調用函數
3.注意事項:
- 參數不需要,可以省略
- 返回值不需要,可以省略
練習案例:自動查核酸
定義一個函數,函數名任意,要求調用函數后可以輸出如下歡迎語:
代碼示例:
"""
演示函數基礎定義練習案例:自動查核酸
"""# 定義函數
def check():# 編寫函數體輸出信息print("歡迎來到歡樂谷!\n請出示您的健康碼以及72小時的核酸證明!")# 調用函數
check()
函數的參數
函數的傳入參數
傳入參數的功能是:在函數進行計算的時候,接受外部(調用時)提供的數據
有如下代碼,完成了2個數字相加的功能:
函數的功能非常局限,只能計算1 + 2。
有沒有可能實現:每一次使用函數,去計算用戶指定的2個數字,而非每次都是1 + 2呢?
可以的,使用函數的傳入參數功能,即可實現。
函數的傳入參數 - 傳參定義
基礎函數的定義語法:
可以有如下函數定義:
實現了,每次計算的是 x + y,而非固定的 1 + 2
x + y的值,可以在調用函數的時候指定。
代碼示例:
"""
演示函數使用參數
"""# 定義2數相加的函數,通過參數接收被計算的2個數字
def add(x,y):result = x + yprint(f"{x} + {y} 的計算結果是:{result}")# 調用函數,傳入被計算的2個數字
add(5,6)
函數的傳入參數 - 語法解析
語法解析:
- 函數定義中,提供的x和y,稱之為:形式參數(形參),表示函數聲明將要使用2個參數
- 參數之間使用逗號進行分隔
- 函數調用中,提供的5和6,稱之為:實際參數(實參),表示函數執行時真正使用的參數值
- 傳入的時候,按照順序傳入數據,使用逗號分隔
傳入參數的數量是不受限制的。
- 可以不使用參數
- 也可以僅使用任意N個參數
總結:
1.函數的傳入參數的作用是?
在函數運行的時候,接受外部傳入的數據
2.使用方式
3.注意事項
- 函數定義中的參數,稱之為形式參數
- 函數調用中的參數,稱之為實際參數
- 函數的參數數量不限,使用逗號分隔開
- 傳入參數的時候,要和形式參數一一對應,逗號隔開
練習案例:升級版自動查詢核酸
定義一個函數,名稱任意,并接受一個參數傳入(數字類型,表示體溫)
在函數內進行體溫判斷(正常范圍:小于等于37.5度),并輸出如下內容:
代碼示例:
"""
演示函數的參數練習案例:升級自動查核酸
"""# 定義函數,接收1個形式參數,數字類型,表示體溫
def check(num):# 在函數體內進行判斷體溫print("歡迎來到歡樂谷!請出示您的健康碼以及72小時核酸證明,并配合測量體溫!")if num <= 37.5:print(f"體溫測量中,您的體溫是:{num}度,體溫正常請進!")else:print(f"體溫測量中,您的體溫是:{num}度,需要隔離!")# 調用函數,傳入實際參數
check(37.3)check(39.3)
函數的返回值
函數返回值的定義
什么是返回值:
1.生活中的返回值:
2.程序中的返回值:
如圖代碼
定義兩數相加的函數功能。完成功能后,會將相加的結果返回給函數調用者
所以,變量r接收到了函數的執行結果。
綜上所述:
所謂“返回值”,就是程序中函數完成事情后,最后給調用者的結果
返回值的語法
語法格式如圖:
如圖,變量就能接收到函數的返回值
語法就是:通過return關鍵字,就能向調用者返回數據
代碼示例:
"""
演示:定義函數返回值的語法格式
"""# 定義一個函數,完成2數相加功能
def add(a,b):result = a + b# 通過返回值,將相加的結果返回給調用者return result# 函數的返回值,可以通過變量去接收
r = add(5,6)
print(r)
總結:
1.什么是函數返回值?
函數在執行完成后,返回給調用者的結果
2.返回值的應用語法:
使用關鍵字:return 來返回結果
3.注意:
函數體在遇到return后就結束了,所以寫在return后的代碼不會執行。
None類型
None類型
思考:如果函數沒有使用return語句返回數據,那么函數有返回值嗎?
實際上是:有的。
Python中有一個特殊的字面量:None,其類型是:<class ‘NoneType’>
無返回值的函數,實際上就是返回了:None這個字面量
None表示:空的、無實際意義的意思
函數返回的None,就表示,這個函數沒有返回什么有意義的內容。
也就是返回了空的意思。
演示:
None可以主動使用return返回,效果等同于不寫return語句:
代碼演示:
"""
演示特殊字面量:None
"""# 無return語句的函數返回值
def say_hi():print("你好呀!")result = say_hi()
print(f"無返回值函數,返回的內容是:{result}")
print(f"無返回值函數,返回的內容類型是:{type(result)}")def say_hi2():print("你好呀!")return Noneresult = say_hi2()
print(f"無返回值函數,返回的內容是:{result}")
print(f"無返回值函數,返回的內容類型是:{type(result)}")
結果返回:
None類型的應用場景
None作為一個特殊的字面量,用于表示:空、無意義,其有非常多的應用場景。
-
用在函數無返回值上
-
用在if判斷上
- 在if判斷中,None等同于False
- 一般用于在函數中主動返回None,配合if判斷做相關處理
-
用于聲明無內容的變量上
- 定義變量,但暫時不需要變量有具體值,可以用None來代替
- 定義變量,但暫時不需要變量有具體值,可以用None來代替
代碼示例:
def check_age(age):if age > 18:return "SUCCESS"else:return Noneresult = check_age(16)
if not result:# 進入if表示result是None值 也就是Falseprint("未成年,不可以進入")# None用于聲明無初始內容的變量
name = None
總結:
1.什么是None
None是類型’NoneType’的字面量,用于表示:空的、無意義的
2.函數如何返回None
- 不使用return語句即返回None
- 主動return None
3.使用場景 - 函數返回值
- if判斷
- 變量定義
函數說明文檔
函數的說明文檔
函數是純代碼語言,想要理解其含義,就需要一行行的去閱讀理解代碼,效率比較低。
我們可以給函數添加說明文檔,輔助理解函數的作用。
語法如下:
通過多行注釋的形式,對函數進行說明解釋
- 內容應寫在函數體之前
代碼示例:
"""
演示對函數進行文檔說明
"""# 定義函數,進行文檔說明
def add(x,y):"""add函數可以接收2個參數,進行2數相加的功能:param x: 形參x表示相加的其中一個數字:param y: 形參y表示相加的另一個數字:return: 返回值是2數相加的結果"""result = x + yprint(f"2數相加的結果是:{result}")return result
在PyCharm中查看函數說明文檔
在PyCharm編寫代碼時,可以通過鼠標懸停,查看調用函數的說明文檔
總結:
1.函數說明文檔的作用是?
對函數進行說明解釋,幫助更好理解函數的功能
2.定義語法
- :param 用于解釋參數
- :return 用于解釋返回值
函數的嵌套調用
什么是函數的嵌套
所謂函數嵌套調用指的是一個函數里面又調用了另外一個函數
執行過程
如果函數A中,調用了另外一個函數B,那么先把函數B中的任務都執行完畢之后才會回到上次 函數A執行的位置
代碼示例:
"""
演示嵌套調用函數
"""# 定義函數func_b
def func_b():print("---2---")# 定義函數func_a()
def func_a():print("---1---")# 嵌套調用func_b()print("---3---")# 調用函數func_a
func_a()
總結:
1.什么是嵌套調用
在一個函數中,調用另外一個函數
2.執行流程
函數A中執行到調用函數B的語句,會將函數B全部執行完成后,繼續執行函數A的剩余內容
變量的作用域
局部變量
變量作用域指的是變量的作用范圍(變量在哪里可用,在哪里不可用)
主要分為兩類:局部變量和全局變量
所謂局部變量是定義在函數體內部的變量,即只在函數體內部生效
變量a是定義在testA函數內部的變量,在函數外部訪問則立即報錯。
局部變量的作用:在函數體內部,臨時保存數據,即當函數調用完成后,則銷毀局部變量
全局變量
所謂全局變量,指的是在函數體內、外都能生效的變量
思考:如果有一個數據,在函數A和函數B中都要使用,該怎么辦?
答:將這個數據存儲在一個全局變量里面
global關鍵字
思考:testB函數需要修改變量num的值為200,如何修改程序?
testB
函數內部的 num = 200 是定義了一個局部變量
☆ 使用 global關鍵字 可以在函數內部聲明變量為全局變量, 如下所示
代碼示例:
"""
演示在函數使用的時候,定義的變量作用域
"""# 演示局部變量
def test_a():num = 100print(num)test_a()# 演示全局變量
num = 200def test_a():print(f"test_a:{num}")def test_b():print(f"test_b:{num}")test_a()
test_b()
print(num)# 在函數內修改全局變量
num = 200def test_a():print(f"test_a:{num}")def test_b():num = 500print(f"test_b:{num}")test_a()
test_b()
print(num)# global關鍵字,在函數內聲明變量為全局變量
num = 200def test_a():print(f"test_a:{num}")def test_b():global num # 設置內部定義的變量為全局變量num = 500print(f"test_b:{num}")test_a()
test_b()
print(num)
輸出結果:
D:\python\python-learn\venv\Scripts\python.exe D:\python\python-learn\41_變量的作用域.py
100
test_a:200
test_b:200
200
test_a:200
test_b:500
200
test_a:200
test_b:500
500
總結:
1.什么是局部變量
作用范圍在函數內部,在函數外部無法使用
2.什么是全局變量
在函數內部和外部均可使用
3.如何將函數內定義的變量聲明為全局變量
- 使用global關鍵字,global 變量
綜合案例
綜合案例:ATM取錢
-
主菜單效果
-
查詢余額效果
-
存、取款效果
-
定義一個全局變量:money,用來記錄銀行卡余額(默認5000000)
-
定義一個全局變量:name,用來記錄客戶姓名(啟動程序時輸入)
-
定義如下的函數:
- 查詢余額函數
- 存款函數
- 取款函數
- 主菜單函數
-
要求:
-
程序啟動后要求輸入客戶姓名
-
查詢余額、存款、取款后都會返回主菜單
-
存款、取款后,都應顯示一下當前余額
-
客戶選擇退出或輸入錯誤,程序會退出,否則一直運行
代碼示例:
"""
演示函數綜合案例開發
"""# 定義全局變量money name
money = 50000
name = None# 要求客戶輸入姓名
name = input("請輸入您的姓名:")
# 定義查詢函數
def query(show_header):if show_header:print("-------------查詢余額------------")print(f"{name},你好,您的余額剩余:{money}元")# 定義存款函數
def saving(num):global money # money在函數內部定義為全局變量money += numprint("-------------存款------------")print(f"{name},您好,您存款{num}元成功。")# 調用query函數查詢余額query(False)# 定義取款函數
def get_money(num):global moneymoney -= numprint("-------------取款------------")print(f"{name},您好,您取款{num}元成功。")# 調用query函數查詢余額query(False)# 定義主菜單函數
def main():print("-------------主菜單------------")print(f"{name},你好,歡迎來到MRY銀行ATM,請選擇操作:")print("查詢余額\t[輸入1]")print("存款\t\t[輸入2]") #通過\t制表符對齊輸出print("取款\t\t[輸入3]")print("退出\t\t[輸入4]")return input("請輸入您的選擇:")# 設置無限循環,確保程序不退出
while True:keyword_input = main()if keyword_input == "1":query(True)continue # 通過continue繼續下一次循環,一進來就是回到了主菜單elif keyword_input == "2":num = int(input("您想要存多少錢?請輸入:"))saving(num)continueelif keyword_input == "3":num = int(input("您想要取多少錢?請輸入:"))get_money(num)continueelse:print("程序退出啦")break # 通過break退出循環
輸出結果:
D:\work\pythonProject\venv\Scripts\python.exe D:\work\pythonProject\07_函數綜合案例.py
請輸入您的姓名:MRY
-------------主菜單------------
MRY,你好,歡迎來到MRY銀行ATM,請選擇操作:
查詢余額 [輸入1]
存款 [輸入2]
取款 [輸入3]
退出 [輸入4]
請輸入您的選擇:1
-------------查詢余額------------
MRY,你好,您的余額剩余:50000元
-------------主菜單------------
MRY,你好,歡迎來到MRY銀行ATM,請選擇操作:
查詢余額 [輸入1]
存款 [輸入2]
取款 [輸入3]
退出 [輸入4]
請輸入您的選擇:2
您想要存多少錢?請輸入:50000
-------------存款------------
MRY,您好,您存款50000元成功。
MRY,你好,您的余額剩余:100000元
-------------主菜單------------
MRY,你好,歡迎來到MRY銀行ATM,請選擇操作:
查詢余額 [輸入1]
存款 [輸入2]
取款 [輸入3]
退出 [輸入4]
請輸入您的選擇:3
您想要取多少錢?請輸入:300000
-------------取款------------
MRY,您好,您取款300000元成功。
MRY,你好,您的余額剩余:-200000元
-------------主菜單------------
MRY,你好,歡迎來到MRY銀行ATM,請選擇操作:
查詢余額 [輸入1]
存款 [輸入2]
取款 [輸入3]
退出 [輸入4]
請輸入您的選擇:4
程序退出啦Process finished with exit code 0