日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python 函数参数传递

發(fā)布時間:2025/1/21 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 函数参数传递 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

Python 的函數(shù)參數(shù)傳遞相對于 C++來說更加靈活,并且使用也很方便,這里做下簡單的總結(jié)。

正文

實參和形參

實參:在調(diào)用函數(shù)時提供的函數(shù)參數(shù)稱為實參。
形參:定義函數(shù)時,函數(shù)中的變量成為形參。

傳遞實參

位置實參

這個沒什么好說,和其他編程語言用法一樣,直接按照位置順序傳遞即可。示例如下:實參和形參的位置一一對應(yīng),所以參數(shù)的順序很重要。

def fun(name,age):print("name = ",name,"age = ",age)fun("Jack",28)

關(guān)鍵字實參

這種用法就和其他編程語言有點(diǎn)區(qū)別了,所謂的關(guān)鍵實參是傳遞給函數(shù)的名字-值對。直接在實參中將名稱和值對應(yīng)起來,因此在向函數(shù)傳遞實參時不會混淆,這種用法無需考慮順序,還清楚的指出了函數(shù)調(diào)用中各個值的用途,示例如下:

def fun(name,age):print("name = ",name,"age = ",age)fun(name="Jack",age=28)

也可以寫成

fun(age=28,name="Jack")

其結(jié)果都是一樣的。

默認(rèn)參數(shù)

這種用法也似曾相識,編寫函數(shù)時,可給每個形參指定默認(rèn)值。而在調(diào)用函數(shù)時 如果如果沒有傳入實參,那么函數(shù)就會默認(rèn)使用形參值。使用默認(rèn)值可簡化函數(shù)調(diào)用,還清楚地指出函數(shù)的典型用法。
示例如下:

def fun(name,age=20):print("name = ",name,"age = ",age)fun("Jack")

這里的函數(shù)調(diào)用也可以寫成:

fun("Jack",28)

當(dāng)然,還可以按照關(guān)鍵字實參的方式來調(diào)用:

fun(name="Jack")

需要注意的是:使用默認(rèn)參數(shù)時,在形參列表中必須先列出沒有默認(rèn)值的參數(shù),再列出有默認(rèn)值的形參,這讓 Python 依然能夠正確地解讀位置實參。
打個比方, 上面的函數(shù)定義不能寫成如下形式:

def fun(name="mark",age):print("name = ",name,"age = ",age)

寫成這樣會報錯:

SyntaxError: non-default argument follows default argument

這和 C++的函數(shù)默認(rèn)參數(shù)用法也是一樣的。

傳遞列表

可以直接向函數(shù)傳遞列表,這種列表包含的可能是名字,數(shù)字或更復(fù)雜的對象(如字典),將列表傳遞給函數(shù)后,函數(shù)就能直接訪問其內(nèi)容。

def fun(names):for name in names:print("name = ",name)names=["Jack","Eric","John"] fun(names)

輸出:

name = Jack name = Eric name = John

函數(shù)中修改列表

當(dāng)向函數(shù)中傳遞列表時,可以直接在函數(shù)中對列表進(jìn)行修改,示例如下:

def fun(names):for name in names:print("name = ",name)names[0]="Sanny"names=["Jack","Eric","John"] print("before names = ",names) fun(names) print("after names = ",names)

輸出:

before names = ['Jack', 'Eric', 'John'] name = Jack name = Eric name = John after names = ['Sanny', 'Eric', 'John']

可以看到,這里的列表已經(jīng)發(fā)生了變化。

禁止函數(shù)修改列表

如果要不想要函數(shù)中修改列表內(nèi)容怎么辦呢?可以在傳遞的時候?qū)⒘斜淼母北緜鬟f給函數(shù),其實相當(dāng)于另外開辟了空間,將列表值賦值給新地址后再傳遞。示例如下:

def fun(names):for name in names:print("name = ",name)names[0]="Sanny"names=["Jack","Eric","John"] print("before names = ",names) fun(names[:]) print("after names = ",names)

這里只是將函數(shù)調(diào)用方式寫成:fun(names[:])
輸出如下:

before names = ['Jack', 'Eric', 'John'] name = Jack name = Eric name = John after names = ['Jack', 'Eric', 'John']

可以看到列表內(nèi)容并沒有發(fā)生變化。

注意:雖然想函數(shù)傳遞列表的副本可保留原始列表的內(nèi)容,但除非有充分的理由需要傳遞副本,否則還是應(yīng)該講原始列表傳遞給函數(shù),因為讓函數(shù)使用現(xiàn)成列表可避免花時間和內(nèi)存創(chuàng)建副本,從而提高效率在處理大型列表時尤其如此。

傳遞任意參數(shù)的實參

有時候,你預(yù)先不知道函數(shù)需要接受多少個實參,好在Python 允許函數(shù)從調(diào)用語句中手機(jī)任意數(shù)量的實參。
示例如下:

def fun(*names):print("names = ",names)fun("Jack") fun("Jack","Eric","John")

輸出如下:

names = ('Jack',) names = ('Jack', 'Eric', 'John')

可以看到這里函數(shù)可以傳遞任意多的實參。
形參名*names 中的星號讓 Python 創(chuàng)建一個名為 names 的空元組,并將收到的所有值都封裝到這個元組中,即便函數(shù)只傳遞了一個值也是如此。

然而,還可以給函數(shù)傳遞任意多的列表參數(shù),并且可以直接在函數(shù)中對列表參數(shù)進(jìn)行修改。示例如下:

def fun(*names):print("names = ",names)names[0][0] = "aaa"names=["Jack","Eric","John"] names_2=["mark","kiko"]fun(names,names_2) print(" after names = ",names)

輸出如下:

names = (['Jack', 'Eric', 'John'], ['mark', 'kiko']) after names = ['aaa', 'Eric', 'John']

這里的第一個列表數(shù)據(jù)已經(jīng)在函數(shù)中被修改了。

結(jié)合使用位置實參和任意數(shù)量實參

如果要讓函數(shù)接收不同類型的實參,那么必須在函數(shù)定義中將接納任意數(shù)量實參的形參放在最后。Python 先匹配位置實參和關(guān)鍵字實參,再將剩下的實參都收集到最后一個形參中。
示例如下:

def fun(num,*names):print("num = ",num,"names = ",names)names=["Jack","Eric","John"] names_2=["mark","kiko"]fun(5,names,names_2)

輸出:

num = 5 names = (['Jack', 'Eric', 'John'], ['mark', 'kiko'])

使用任意數(shù)量的關(guān)鍵字實參

除了位置實參和任意數(shù)實參結(jié)合使用,關(guān)鍵字實參也可以和任意數(shù)實參集合使用。
有時候,需要接受任意數(shù)量的實參,但預(yù)先不知道傳遞給函數(shù)的會是什么樣的信息,這種情況下,可將函數(shù)編寫成能夠接受任意數(shù)量的鍵值對—調(diào)用語句提供了多少就接受多少。

def fun(first,last,**user_info):profile={}profile["first"]=firstprofile["last"]=lastfor key,value in user_info.items():profile[key] = valueprint("profile = ",profile)fun("aaa","bbb",name="hello",field = "world")

輸出:

profile = {'first': 'aaa', 'last': 'bbb', 'name': 'hello', 'field': 'world'}

這里的形參**user_info中的兩個星號讓 Python 創(chuàng)建一個名為user_info的空字典,并將收到的所有鍵值對都封裝到這個字典中。在這個字典中,可以像訪問其它字典那樣訪問user_info中的鍵值對。

最后

可以看到,Python 的這種函數(shù)調(diào)用非常靈活,嘗試不同的調(diào)用會發(fā)現(xiàn)可以擴(kuò)展很多其他的用法,對實際項目中有很大的幫助。

總結(jié)

以上是生活随笔為你收集整理的Python 函数参数传递的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。