首頁 > 軟體

python的函數形參和返回值你瞭解嗎

2022-03-16 10:00:34

函數的返回值

一個函數執行後可以返回多個返回值

def measure():
    print('測量開始。。。。')
    temp=39
    wetness=50
    print("測量結束")
    #元組--可以包含多個資料,因此可以使用元組一次返回多個值
    return (temp,wetness)
result=measure()
print(result)

執行結果:

測量開始。。。。
測量結束
(39, 50)

def measure():
    print('測量開始。。。。')
    temp=39
    wetness=50
    print("測量結束")
    #元組--可以包含多個資料,因此可以使用元組一次返回多個值
    return (temp,wetness)
#如果函數返回的型別是元組,同時希望單獨的處理元組中的元素
#可以使用多個變數,一次接收函數的返回結果
#使用多個變數接收結果時,變數的個數應該和元組的元素個數一致
gl_temp,gl_wetness=measure()
print(gl_temp)
print(gl_wetness)

執行結果:

測量開始。。。。
測量結束
(39, 50)

交換兩個變數的值

a=6
b=100
#使用其他變數
c=a
a=b
b=c
#不使用其他變數
a=a+b
b=a-b
a=a-b
#python專有
a,b=b,a
print("a的值為 %d"%a)
print("b的值為 %d"%b)

函數的引數

不可變引數和可變引數

在函數內部,針對引數使用賦值語句,不會改變呼叫函數時傳遞的實參的值
無論傳遞的引數是可變還是不可變,只要針對引數使用賦值語句,會在函數內部修改區域性變數的參照,不會影響到外部變數的參照

def demo(num,num_list):
    print("函數內部")
    #在函數內部,針對引數使用賦值語句,形參的參照發生了變化,但是實參的參照沒變
    num=200
    num_list=[1,2,3]
    print(num)
    print(num_list)
    print("函數內部程式碼完成")
gl_num=99
gl_list=[2,3,4]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)

執行結果:

函數內部
200
[1, 2, 3]
函數內部程式碼完成
99
[2, 3, 4]

如果傳遞的引數是可變型別,在函數內部,使用方法修改了資料的內容,同樣會影響到外部的資料

def demo(num_list):
    print("函數內部")
    num_list.append([1,2,3])
    print(num_list)
    print("函數內部程式碼完成")

gl_list=[2,3,4]
demo(gl_list)
print(gl_list)

執行結果:

函數內部
[2, 3, 4, [1, 2, 3]]
函數內部程式碼完成
[2, 3, 4, [1, 2, 3]]

+=

在python中,列表變數呼叫+=本質上在執行列表變數的extend方法,不會修改變數的參照

def demo(num,num_lst):
    print("函數開始")
    num+=num
    num_lst+=num_lst
    print(num)
    print(num_lst)
    print("函數結束")
gl_num=9
gl_list=[1,2,3]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)

執行結果:

函數開始
18
[1, 2, 3, 1, 2, 3]
函數結束
9
[1, 2, 3, 1, 2, 3]

函數的引數

預設引數

定義函數時,可以給某個引數指定一個預設值,具有預設值的引數就叫做預設引數

呼叫函數時,如果沒有傳入預設引數的值,則在函數內部使用定義函數時指定的引數預設值

(1)指定函數的預設引數

在引數後使用賦值語句,可以指定引數的預設值

def print_info(name,gender=True):
    gender_text="男生"
    if not gender:
        gender_text="女生"
    print("%s 是 %s"%(name,gender_text))

(2) 提示

預設引數,需要使用最常見的值作為預設值

如果一個引數的值不能確定,則不應該設定預設值,具體的資料在呼叫函數時,由外界傳遞

(3) 預設引數的注意事項

1.預設引數的定義位置

必須保證帶有預設值的預設引數在參數列的末尾

2.呼叫多個預設引數的函數

在呼叫函數時,如果有多個預設引數,需要指定引數名,這樣直譯器才能夠知道引數的對應關係

多值引數

有時候可能需要一個函數能夠處理的引數個數是不確定的,這個時候,就可以使用多值引數

  • python中有兩種多值引數:

引數名前增加一個* ,可以接收元組

引數名前增加兩個*,可以接受字典

  • 一般在給多值引數命名時,習慣使用以下兩個名字:

*args----存放元組引數

**kwargs—存放字典引數

def demo(*args,**kwargs):
    print(args)
    print(kwargs)
demo(1,2,3,4,name="test1",age=14)

執行結果:

(1, 2, 3, 4)
{'name': 'test1', 'age': 14}

可以看到1,2,3,4被組成了一個元組
name=“test1”,age=14,被組成了一個字典

#計算任意個數之和
def sum_args(*args):
    sum=0
    for n in args:
        sum+=n
    return sum
result=sum_args(1,2,3,4,6)
print(result)

元組和字典的拆包

在呼叫帶有多值引數的函數時,如果希望:

將一個元組變數,直接傳遞給args

將一個字典變數,直接傳遞給kwargs

就可以使用拆包,簡化引數的傳遞,拆包的方式是:

在元組變數前,增加一個*

在字典變數前,增加兩個**

#如果不拆包,將gl_args,gl_kwargs組成一個元組
def demo(*args,**kwargs):
    print(args)
    print(kwargs)

gl_args=(1,2,3,4)
gl_kwargs={"name":"test1","age":12}
demo(gl_args,gl_kwargs)

執行結果:

((1, 2, 3, 4), {'name': 'test1', 'age': 12})
{}

如果不拆包,將gl_args,gl_kwargs組成一個元組,正確的傳遞方式應該是:demo(1,2,3,4,name=“test”,“age”=12)

但是實參是元組和字典,需要將元素一個一個拆開,所以需要使用拆包

正確的使用方式:

def demo(*args,**kwargs):
    print(args)
    print(kwargs)
gl_args=(1,2,3,4)
gl_kwargs={"name":"test1","age":12}
demo(*gl_args,**gl_kwargs)

執行結果:

(1, 2, 3, 4)
{'name': 'test1', 'age': 12}

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!  


IT145.com E-mail:sddin#qq.com