目標
●函數參數和返回值的作用
●函數的返回值進階
●函數的參數進階
●遞歸函數
01.函數參數和返回值的作用
函數根據有沒有參數以及有沒有返回值,可以相互組合,共有4種組合形式
1.無參數,無返回值
2.無參數,有返回值
3.有參數,無返回值
4.有參數,有返回值
定義函數時,是否接收參數,或者是否返回結果,是根據實際的功能需求來決定的!
02.函數的返回值進階
●在程序開發中,有時候,會希望-個函數執行結束後,告訴調用者-個結果,以便調用者針對具體的結果做後續的處理
●返回值是函數完成工作後,最後給調用者的-個結果
●在函數中使用return 關鍵字可以返回結果
●調用函數一方,可以使用變量來接收函數的返回結果
問題: 一個函數執行後能否返回多個結果?
示例–溫度和溼度測量
●假設要開發-一個函數能夠同時返回當前的溫度和溼度
●先完成返回溫度的功能如下:
def measure():
"""返回當前的溫度"""
print("開始測量...")
temp = 39
print("測量結束...")
return temp
result = measure( )
print(result)
03.函數的參數進階
3.1.不可變和可變的參數
問題1:在函數內部,針對參數使用賦值語句,會不會影響調用函數時傳遞的實參變量?——不會!
●無論傳遞的參數是可變還是不可變
- 只要針對參數使用賦值語句,會在函數內部修改局部變量的引用,不會影響到外部變量的引用
def demo(num, num _list):
print ("函數內部")
#賦值語句!
num =200
num _list = [1, 2, 3]
print( num)
print(num_ list)
print("函數代碼完成”)
gL _num = 99
gl_ list = [4, 5, 6]
demo(gL_ num, gl list)
print(gL_ num)
print(gl list)
- 如果傳遞的參數是可變類型,在函數內部, 使用方法修改了數據的內容,同樣會影響到外部的數據
def mutable(num _list):
#num_list = [1, 2, 3]
num_ list.extend([1, 2, 3])
print(num_ list)
gL_ list = [6, 7, 8]
mutable(gl_ list)
print(gL list)
3.1缺省參數
●定義函數時,可以給某個參數指定一個默認值,具有默認值的參數就叫做缺省參數
●調用函數時,如果沒有傳入缺省參數的值,則在函數內部使用定義函數時指定的參數默認值
●函數的缺省參數,將常見的值設爲參數的缺省值,從而簡化函數的調用
●例如:對列表排序的方法
gL_ num list = [6, 3, 9]
#默認就是升序排序,因爲這種應用需求更多
gL_num_list.sort()
print(gl_num_list)
#只有當需要降序排序時,才需要傳遞'reverse'參數
gl_num_list.sort(reverse=True)
print(gl num_list)
指定函數的缺省參數
●在參數後使用賦值語句,可以指定參數的缺省值
def print_info(name, gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%S是8s" % (name, gender_text) )
提示
1.缺省參數,需要使用最常見的值作爲默認值!
2.如果一個參數的值不能確定,則不應該設置默認值,具體的數值在調用函數時,由外界傳遞!
缺省參數的注意事項
1)缺省參數的定義位置
●必須保證帶有默認值的缺省參數在參數列表末尾
●所以,以下定義是錯誤的!
def print_ info(name, gender=True, title):
2)調用帶有多個缺省參數的函數
●在調用函數時,如果有多個缺省參數,需要指定參數名,這樣解釋器才能夠知道參數的對應關係!
3.2多值參數(知道)
定義支持多值參數的函數
●有時可能需要一個函數能夠處理的參數個數是不確定的,這個時候,就可以使用多值參數
●python中有兩種多值參數:
- 參數名前增加一個*可以接收元組
- 參數名前增加兩個*可以接收字典
●一般在給多值參數命名時,習慣使用以下兩個名字 - args–存放元組參數,前面有一個
- *kwargs–存放字典參數,前面有兩個
●args是arguments的縮寫,有變量的含義
●kw是keyword的縮寫,kwargs 可以記憶鍵值對參數
def demo(num, *args, **kwargs):
print (num)
print(args )
print( kwargs)
demo(1, 2, 3, 4,5, name="小明",age=18, gender=True)
多值參數案例–計算任意多個數字的和
需求
1.定義一個函數sum_numbers ,可以接收的任意多個整數
2.功能要求:將傳遞的所有數字累加並且返回累加結果
def sum_numbers(*args):
num=0
#遍歷args元組順序求和
for n in args:
num += n
return num
print(sum_numbers(1, 2, 3))