python函数参数学习_python学习笔记-11.函数参数和返回值进阶
1. 函數(shù)參數(shù)和返回值的作用
函數(shù)根據(jù)有沒有參數(shù)以及有沒有返回值,可以相互組合,共有4種形式:
無參數(shù),無返回值
無參數(shù),有返回值
有參數(shù),無返回值
有參數(shù),有返回值
定義函數(shù)時,是否接收參數(shù),或者是否返回結(jié)果,是根據(jù)實際的功能需求決定的。
如果函數(shù)內(nèi)部處理的數(shù)據(jù)不確定,就可以將外界的數(shù)據(jù)以參數(shù)傳遞到函數(shù)內(nèi)部。
如果希望一個函數(shù)執(zhí)行完成后,向外界匯報執(zhí)行結(jié)果,就可以增加函數(shù)的返回值。
2. 函數(shù)的返回值進(jìn)階
問題:一個函數(shù)執(zhí)行后能否返回多個結(jié)果?
元組-可以包含多個數(shù)據(jù),因此可以使用元組讓函數(shù)一次返回多個值;
如果函數(shù)返回的類型是元組,小括號可以省略;
如果函數(shù)返回的類型是元組,同時希望單獨處理元組種的元素,可以使用多個變量,一次接收函數(shù)的返回結(jié)果;
注意,使用多個變量接收結(jié)果時,變量的個數(shù)應(yīng)和元組中元素的個數(shù)保持一致。
舉個栗子
# 測量溫度和濕度
def measure():
print("測量開始")
temp = 39
wet = 56
print("測量結(jié)束")
return temp,wet # 返回的數(shù)據(jù)類型為元組,可省略'()'
gl_temp, gl_wet = measure() # 定義兩個變量接收返回的結(jié)果
print(gl_temp)
output:
測量開始
測量結(jié)束
39
56
舉個栗子-交換數(shù)字(經(jīng)典面試題)
在不使用其他變量的情況下,交換a和b的值。
a = 6
b = 100
a,b = b,a # python專有,利用元組。等號右邊是一個元組,只是把小括號省略了
print(a)
print(b)
output:
100
6
3. 函數(shù)的參數(shù)進(jìn)階
3.1 不可變和可變的參數(shù)
問題1:在函數(shù)內(nèi)部,針對參數(shù)使用賦值語句,會不會影響調(diào)用函數(shù)時傳遞的實參變量?——不會!
無論傳遞的參數(shù)是可變還是不可變,只要針對參數(shù)使用賦值語句,會在函數(shù)內(nèi)部修改局部變量的引用,不會影響到外部變量的引用。
舉個栗子
def demo(num,num_list):
print("函數(shù)內(nèi)部的代碼")
# 在函數(shù)內(nèi)部,針對參數(shù)使用賦值語句
num = 100 # 不可變的參數(shù)
num_list = [1,2,3] # 可變的參數(shù)
print(num)
print(num_list)
print("函數(shù)執(zhí)行完成")
gl_num = 99
gl_list = [4,5,6]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)
output:
函數(shù)內(nèi)部的代碼
100
[1, 2, 3]
函數(shù)執(zhí)行完成
99
[4, 5, 6]
問題2:如果傳遞的參數(shù)是可變類型,在函數(shù)內(nèi)部,使用方法修改了數(shù)據(jù)的內(nèi)容,同樣會影響到外部的數(shù)據(jù)。
舉個栗子
def demo(num_list):
print("函數(shù)內(nèi)部的代碼")
# 使用方法修改列表的內(nèi)容,此時并不會修改列表的引用
num_list.append(9)
print(num_list)
print("函數(shù)執(zhí)行完成")
gl_list = [1,2,3]
demo(gl_list)
print(gl_list)
output:
函數(shù)內(nèi)部的代碼
[1, 2, 3, 9]
函數(shù)執(zhí)行完成
[1, 2, 3, 9]
舉個栗子- += (面試題)
在python中,列表變量調(diào)用 += 本質(zhì)上實在執(zhí)行列表變量的extend方法,不會修改變量的引用。
def demo(num,num_list):
print("函數(shù)開始")
# num = num + num
num += num
# 列表變量使用 += 不會做相加再賦值的操作!
# num_list = num_list + num_list
# 本質(zhì)上是在調(diào)用列表的extend方法
# num_list.extend(num_list)
num_list += num_list
print(num)
print(num_list)
print("函數(shù)完成")
gl_num = 9
gl_list = [1,2,3]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)
output:
函數(shù)開始
18
[1, 2, 3, 1, 2, 3]
函數(shù)完成
9
[1, 2, 3, 1, 2, 3]
3.2 缺省參數(shù)
3.2.1 什么是缺省參數(shù)
定義函數(shù)時,可以給某個參數(shù)指定一個默認(rèn)值,具有默認(rèn)值的參數(shù)就叫做缺省參數(shù);
調(diào)用函數(shù)時,如果沒有傳入缺省參數(shù)的值,則在函數(shù)內(nèi)部使用定義函數(shù)時指定的參數(shù)默認(rèn)值;
函數(shù)的缺省參數(shù),將常見的值設(shè)置為參數(shù)的缺省值,從而簡化函數(shù)的調(diào)用。
舉個栗子-對列表排序的方法
sort方法中的reverse即為缺省參數(shù)。
gl_list = [6,3,9]
# 默認(rèn)按照升序排序 - 日常使用可能會更多
gl_list.sort()
print(gl_list)
# 如果需要降序排序,需要指定reverse參數(shù)
gl_list.sort(reverse=True)
print(gl_list)
output:
[3, 6, 9]
[9, 6, 3]
3.2.2 怎么指定函數(shù)的缺省參數(shù)
在參數(shù)后使用賦值語句,可以指定參數(shù)的缺省值。
– 缺省參數(shù),需要使用最常見的值作為默認(rèn)值。
– 如果一個參數(shù)的值不能確定,則不應(yīng)該設(shè)置默認(rèn)值,具體的數(shù)值在調(diào)用函數(shù)時,由外界傳遞!
舉個栗子
def print_info(name, gender=True):
"""
:param name: 班上同學(xué)的姓名
:param gender: True 男生 False 女生
"""
gender_text = "男生"
if not gender: # not取反
gender_text = "女生"
print("%s 是 %s" % (name, gender_text))
# 假設(shè)班上的同學(xué),男生居多!
# 提示:在指定缺省參數(shù)的默認(rèn)值時,應(yīng)該使用最常見的值作為默認(rèn)值。
print_info("小明")
print_info("老王")
print_info("小麗",False)
output:
小明 是 男生
老王 是 男生
小麗 是 女生
3.2.3 缺省參數(shù)的注意事項
1) 缺省參數(shù)的定義位置
必須保證帶有默認(rèn)值的缺省參數(shù)在參數(shù)列表的末尾。
2)調(diào)用帶有多個缺省參數(shù)的函數(shù)
在調(diào)用函數(shù)時,如果有多個缺省參數(shù),需要指定參數(shù)名,這樣解釋器才能夠知道參數(shù)的對應(yīng)關(guān)系。
舉個栗子
def print_info(name, title="", gender=True):
"""
:param title: 職位
:param name: 班上同學(xué)的姓名
:param gender: True 男生 False 女生
"""
gender_text = "男生"
if not gender: # not取反
gender_text = "女生"
print("[%s] %s 是 %s" % (title, name, gender_text))
# 假設(shè)班上的同學(xué),男生居多!
# 提示:在指定缺省參數(shù)的默認(rèn)值時,應(yīng)該使用最常見的值作為默認(rèn)值。
print_info("小明")
print_info("老王")
print_info("小麗",gender=False) # 如果有多個缺省參數(shù),需指定參數(shù)名
output:
[] 小明 是 男生
[] 老王 是 男生
[] 小麗 是 女生
3.3 多值參數(shù)(了解)
定義支持多值參數(shù)的函數(shù)
有時候可能需要一個函數(shù)能夠處理的參數(shù)個數(shù)是不確定的,這時就可以使用多值參數(shù)。
python有兩種多值參數(shù):
– 參數(shù)名前增加一個*可以接收元組
– 參數(shù)名前增加一個**可以接收字典
一般在給多值參數(shù)命名時,習(xí)慣使用以下兩個名字
– *args 存放元組參數(shù),前面有一個*
– **kwargs 存放字典參數(shù),前面有兩個*
args 是 arguments的縮寫,有變量的含義
kw 是 keyword的縮寫,kwargs可以記憶鍵值對參數(shù)
舉個栗子
def demo(num, *nums, **person):
print(num)
print(nums)
print(person)
demo(1,2,3,4,5,name="小明",age=18)
output:
1
(2, 3, 4, 5)
{‘name’: ‘小明’, ‘a(chǎn)ge’: 18}
舉個栗子-計算任意多個數(shù)字的和
def sum_nums(*args):
num = 0
print(args)
# 循環(huán)遍歷
for n in args:
num += n
return num
result = sum_nums(1,2,3,4,5,6)
print(result)
output:
(1, 2, 3, 4, 5, 6)
21
3.4 元組和字典的拆包(了解)
在調(diào)用帶有多值參數(shù)的函數(shù)時,如果希望:
– 將一個元組變量,直接傳遞給args
– 將一個字典變量,直接傳遞給kwargs
就可以使用拆包,簡化參數(shù)的傳遞,拆包的方式為:
– 在元組變量前,增加一個*
– 在字典變量前,增加兩個*
def demo(*args,**kwargs):
print(args)
print(kwargs)
# 元組變量/字典變量
gl_nums = (1,2,3)
gl_dict = {"name":"小明","age":18}
# 拆包語法,簡化元組變量/字典變量的傳遞
demo(*gl_nums,**gl_dict)
output:
(1, 2, 3)
{‘name’: ‘小明’, ‘a(chǎn)ge’: 18}
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python函数参数学习_python学习笔记-11.函数参数和返回值进阶的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone 15 Pro/Pro Ma
- 下一篇: vivo Pad Air 平板今日 10