一。函數
# *****
# 函數:完成 特定 功能的代碼塊,作為一個整體,對其進行特定的命名,該名字就代表函數
# -- 現實中:很多問題要通過一些工具進行處理 => 可以將工具提前生產出來並命名
# => 通過名字就可以找到工具 => 使用工具來解決問題
# 函數:完成 特定 功能的代碼塊,作為一個整體,對其進行特定的命名,該名字就代表函數
# -- 現實中:很多問題要通過一些工具進行處理 => 可以將工具提前生產出來並命名
# => 通過名字就可以找到工具 => 使用工具來解決問題
# 函數的優點:
# 1. 避免代碼的冗余
# 2. 讓程序代碼結構更加清晰
# 3. 讓代碼具有復用性,便於維護
# 1. 避免代碼的冗余
# 2. 讓程序代碼結構更加清晰
# 3. 讓代碼具有復用性,便於維護
# 函數的四部分
'''
1. 函數名:使用該函數的依據
2. 函數體:完成功能的代碼塊
3. 返回值:功能完成的反饋結果
4. 參數:完成功能需要的條件信息
'''
# 定義函數的語法:通過def關鍵字來定義
def get_water(water, money):
print('收入你的%d元錢')
print('給你%s水種')
return '礦泉水'
def get_water(water, money):
print('收入你的%d元錢')
print('給你%s水種')
return '礦泉水'
```
二。函數的使用
# 使用函數:
# 1.根據需求定義函數
# 2.通過函數名找到函數所在的位置(內存地址)
# 3.函數名() 執行函數地址中存放的所有代碼塊
# -- 函數在定義時需要外界的參數,就要在調用時傳入對應的參數
# 4.函數執行完一定有返回結果,通過return關鍵字將結果返回給外界
# -- 外界需要知道執行結果,用變量接收,反之只執行函數(不需要接收)即可
# 1.根據需求定義函數
# 2.通過函數名找到函數所在的位置(內存地址)
# 3.函數名() 執行函數地址中存放的所有代碼塊
# -- 函數在定義時需要外界的參數,就要在調用時傳入對應的參數
# 4.函數執行完一定有返回結果,通過return關鍵字將結果返回給外界
# -- 外界需要知道執行結果,用變量接收,反之只執行函數(不需要接收)即可
# 注:函數必須先定義,后使用
# 函數的四部分都可以根據需求的變化而變化
def get_water(water, money):
print('收入你的%d元錢' % money)
print('給你%s水種' % water)
return water
def get_water(water, money):
print('收入你的%d元錢' % money)
print('給你%s水種' % water)
return water
# 需要使用函數,就調用一次
res = get_water('礦泉水', 10)
print(res)
res = get_water('礦泉水', 10)
print(res)
print('玩耍...')
print('又口渴了...')
print('又口渴了...')
# 又來需求,在調用一次,代碼可以復用,函數只有一個,代碼結構清晰且不冗余
res = get_water('王老吉', 20)
print(res)
```
res = get_water('王老吉', 20)
print(res)
```
三。函數的分類
# ***
# 1.根據函數體分類
# 空函數: pass來填充函數體的函數
# -- 優先明確函數名,暫不明確函數體(編程中就存在一些沒有函數體的函數)
def login(): pass # 在開發初期,可以講所有功能提前列出來,用pass占位着,后期再去填充功能體
# 空函數: pass來填充函數體的函數
# -- 優先明確函數名,暫不明確函數體(編程中就存在一些沒有函數體的函數)
def login(): pass # 在開發初期,可以講所有功能提前列出來,用pass占位着,后期再去填充功能體
# 非空函數:有函數體的函數
def fn2():
print('函數體')
def fn2():
print('函數體')
# 2.根據函數參數分類
def add():
print('功能體不需要外界的參數')
n1 = input('n1: ')
n2 = input('n2: ')
print(n1 + n2)
# 有參函數
def add_two(n1, n2):
print('功能體需要外界的參數')
print(n1 + n2)
# 3.根據函數返回值分類:所有的函數都有返回值
# 不明確返回值
def low_two(n1, n2):
# 外部不需要知道內部的執行結果
print(n1 - n2)
def add_two(n1, n2):
print('功能體需要外界的參數')
print(n1 + n2)
# 3.根據函數返回值分類:所有的函數都有返回值
# 不明確返回值
def low_two(n1, n2):
# 外部不需要知道內部的執行結果
print(n1 - n2)
# 明確返回值
def jump_two(n1, n2):
# 外部需要知道內部的執行結果
return n1 * n2
res = jump_two(10, 20)
print(res)
def jump_two(n1, n2):
# 外部需要知道內部的執行結果
return n1 * n2
res = jump_two(10, 20)
print(res)
```
四。函數的返回值
# *****
# 重點:函數名()
# 1)拿到函數地址 => 2)加()執行函數體 => 3)得到函數的執行結果
# 1)拿到函數地址 => 2)加()執行函數體 => 3)得到函數的執行結果
# 重點: 返回值的功能
# 1.結束函數;2.將函數的內部數據返回給外部
# 1.結束函數;2.將函數的內部數據返回給外部
# 二、應用場景
# 1.不明確return關鍵詞的函數:系統在函數最末尾自動添加了return,返回的是None
def fn1():
print('普通的函數執行')
res = fn1() # 一般不需要對這樣的函數進行接收執行結果
print(res)
print(res)
# 2.明確空return關鍵詞的函數:為了結束函數而return
def print_msg():
while True:
msg = input("msg: ")
if msg == 'q':
# break
return # 在特定的位置需要直接結束函數,但不需要告訴外界某個結果,用空return處理
print(msg)
print(msg) # 在break下可以被執行,在return下不能被執行
res = print_msg()
print(res)
# 3.有明確的返回值需求的函數:
# -- python中的函數本質上只能返回一個值,
# -- 值跟在return關鍵詞后
# -- 可以通過語法上返回多個值,值之間用逗號隔開,但是本質上返回裝有多個值的元組
# 一個值
def get_num():
num = input('num: ')
return num
print(get_num())
# 多個值
def get_two_num():
n1 = input('n1: ')
n2 = input('n2: ')
return n1, n2
# return (n1, n2)
# print(get_two_num())
num1, num2 = get_two_num() # python的return支持多值返回的語法原因是python中有解壓賦值
print(num1, num2)
def get_two_num():
n1 = input('n1: ')
n2 = input('n2: ')
return n1, n2
# return (n1, n2)
# print(get_two_num())
num1, num2 = get_two_num() # python的return支持多值返回的語法原因是python中有解壓賦值
print(num1, num2)
# 總結:
```