當前位置:首頁 » 編程語言 » python調用函數參數傳遞參數

python調用函數參數傳遞參數

發布時間: 2022-06-26 01:00:24

python的參數傳遞問題!!!

樓主的理解沒有問題啊 .
python中函數的實參傳遞規則是:
標注了參數名的就要按參數名傳遞,打亂順序的情況下一定要加參數名,否則會混亂的。
沒有預設的實參情況下就會依次傳遞,如果不夠的話,後面的會自動去取自己的預設值。
如果實參的數量比形參要多的話,就要用到帶*號的參數名了。

❷ python怎麼向類中的函數傳遞參數

Python中函數參數的傳遞是通過「賦值」來傳遞的。但這條規則只回答了函數參數傳遞的「戰略問題」,並沒有回答「戰術問題」,也就說沒有回答怎麼賦值的問題。函數參數的使用可以分為兩個方面,一是函數參數如何定義,二是函數在調用時的參數如何解析的。而後者又是由前者決定的。函數參數的定義有四種形式:

1. F(arg1,arg2,...)
2. F(arg2=<value>,arg3=<value>...)
3. F(*arg1)
4. F(**arg1)

第1 種方式是最「傳統」的方式:一個函數可以定義不限個數參數,參數(形式參數)放在跟在函數名後面的小括弧中,各個參數之間以逗號隔開。用這種方式定義的函數在調用的時候也必須在函數名後的小括弧中提供相等個數的值(實際參數),不能多也不能少,而且順序還必須相同。也就是說形參和實參的個數必須一致,而且想給形參1的值必須是實參中的第一位,形參與實參之間是一一對應的關系,即「形參1=實參1 形參2=實參2...」。很明顯這是一種非常不靈活的形式。比如:"def addOn(x,y): return x + y",這里定義的函數addOn,可以用addOn(1,2)的形式調用,意味著形參x將取值1,主將取值2。addOn(1,2,3)和addOn (1)都是錯誤的形式。
第2種方式比第1種方式,在定義的時候已經給各個形參定義了默認值。因此,在調用這種函數時,如果沒有給對應的形式參數傳遞實參,那麼這個形參就將使用默認值。比如:「def addOn(x=3,y=5): return x + y」,那麼addOn(6,5)的調用形式表示形參x取值6,y取值5。此外,addOn(7)這個形式也是可以的,表示形參x取值7,y取默認值5。這時候會出現一個問題,如果想讓x取默認值,用實參給y賦值怎麼辦?前面兩種調用形式明顯就不行了,這時就要用到Python中函數調用方法的另一大絕招 ──關健字賦值法。可以用addOn(y=6),這時表示x取默認值3,而y取值6。這種方式通過指定形式參數可以實現可以對形式參數進行「精確攻擊」,一個副帶的功能是可以不必遵守形式參數的前後順序,比如:addOn(y=4,x=6),這也是可以的。這種通過形式參數進行定點賦值的方式對於用第1種方式定義的函數也是適用的。
上面兩種方式定義的形式參數的個數都是固定的,比如定義函數的時候如果定義了5個形參,那麼在調用的時候最多也只能給它傳遞5個實參。但是在實際編程中並不能總是確定一個函數會有多少個參數。第3種方式就是用來應對這種情況的。它以一個*加上形參名的方式表示,這個函數實際參數是不一定的,可以是零個,也可以是N個。不管是多少個,在函數內部都被存放在以形參名為標識符的tuple中。比如:

對這個函數的調用addOn() addOn(2) addOn(3,4,5,6)等等都是可以的。

與第3種方式類似,形參名前面加了兩個*表示,參數在函數內部將被存放在以形式名為標識符的dictionary中。這時候調用函數必須採用key1=value1、key2=value2...的形式。比如:

1. def addOn(**arg):
2. sum = 0
3. if len(arg) == 0: return 0
4. else:
5. for x in arg.itervalues():
6. sum += x
7. return sum

那麼對這個函數的調用可以用addOn()或諸如addOn(x=4,y=5,k=6)等的方式調用。

上面說了四種函數形式定義的方式以及他們的調用方式,是分開說的,其實這四種方式可以組合在一起形成復雜多樣的形參定義形式。在定義或調用這種函數時,要遵循以下規則:

1. arg=<value>必須在arg後
2. *arg必須在arg=<value>後
3. **arg必須在*arg後

在函數調用過程中,形參賦值的過程是這樣的:
首先按順序把「arg」這種形式的實參給對應的形參
第二,把「arg=<value>」這種形式的實參賦值給形式
第三,把多出來的「arg」這種形式的實參組成一個tuple給帶一個星號的形參
第四,把多出來的「key=value」這種形式的實參轉為一個dictionary給帶兩個星號的形參。
例子:

1. def test(x,y=5,*a,**b):
2. print x,y,a,b

就這么一個簡單函數,來看看下面對這個函數調用會產生什麼結果:
test(1) ===> 1 5 () {}
test(1,2) ===> 1 2 () {}
test(1,2,3) ===> 1 2 (3,) {}
test(1,2,3,4) ===> 1 2 (3,4)
test(x=1) ===> 1 5 () {}
test(x=1,y=1) ===> 1 1 () {}
test(x=1,y=1,a=1) ===> 1 1 () {'a':1}
test(x=1,y=1,a=1,b=1) ===> 1 1 () {'a':1,'b':1}
test(1,y=1) ===> 1 1 () {}
test(1,2,y=1) ===> 出錯,說y給賦了多個值
test(1,2,3,4,a=1) ===> 1 2 (3,4) {'a':1}
test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) {'k':1,'t':2,'o':3}

❸ python怎麼給函數傳參

函數參數傳遞機制問題在本質上是調用函數(過程)和被調用函數(過程)在調用發生時進行通信的方法問題。基本的參數傳遞機制有兩
種:值傳遞和引用傳遞。
推薦:Python教程
值傳遞(passl-by-value)過程中,被調函數的形式參數作為被調函數的局部變數處理,即在堆棧中開辟了內存空間以存放由主調函數放
進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變數進行,不會影響主調函
數的實參變數的值。
引用傳遞(pass-by-reference)過程中,被調函數的形式參數雖然也作為局部變數在堆棧中開辟了內存空間,但是這時存放的是由主調函
數放進來的實參變數的地址。被調函數對形參的任何操作都被處理成間接定址,即通過堆棧中存放的地址訪問主調函數中的實參變數。正
因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變數。

更多技術請關注Python視頻教程。

❹ python如何使用在函數中傳遞參數

>>> def a(): global q q=1+2 return q>>> def b(): a() c=2+q print(c) >>> b()5>>> q3 函數中的變數在外面調用,需要申明為全局變數

❺ Python 的函數是怎麼傳遞參數的

首先你要明白,Python的函數傳遞方式是賦值,而賦值是通過建立變數與對象的關聯實現的。
對於你的代碼:
執行 d = 2時,你在__main__里創建了d,並讓它指向2這個整型對象。
執行函數add(d)過程中:
d被傳遞給add()函數後,在函數內部,num也指向了__main__中的2
但執行num = num + 10之後,新建了對象12,並讓num指向了這個新對象——12。
如果你明白函數中的局部變數與__main__中變數的區別,那麼很顯然,在__main__中,d仍在指著2這個對象,它沒有改變。因此,你列印d時得到了2。
如果你想讓輸出為12,最簡潔的辦法是:
在函數add()里增加return num
調用函數時使用d = add(d)
代碼如下:
def add(num):
num += 10
return num
d = 2
d = add(d)
print d

❻ Python中函數調用是傳值還是傳引用

python不允許程序員選擇採用傳值還是傳引用。Python參數傳遞採用的肯定是「傳對象引用」的方式。這種方式相當於傳值和傳引用的一種綜合。如果函數收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值--相當於通過「傳引用」來傳遞對象。如果函數收到的是一個不可變對象(比如數字、字元或者元組)的引用,就不能直接修改原始對象--相當於通過「傳值'來傳遞對象。

❼ Python如何向函數傳遞參數

s=[3,2,5,1]
sorted(s,reverse=True)
默認reverse=False,排序為正序。傳入reverse=True,排序就是倒序

❽ python如何將可選參數或關鍵字參數從一個函數傳遞到另一個函數

使用函數參數列表中的*和**說明符收集參數;這會將位置參數作為元組,將關鍵字參數作為字典。然後,您可以使用*和**調用另一個函數時傳遞這些參數:

def f(x, *args, **kwargs):
...
kwargs['width'] = '14.3c'
...
g(x, *args, **kwargs)

❾ Python 定義的函數的參數傳遞是怎麼樣的

Python變數沒有賦值,都是引用。

大多語言,是聲明一個變數,給它分配一個空間保存一個值,也就是賦值。

Python則是給一個值分配一個空間,變數=這個值,只是這個變數引用了這個值的地址,也就是說,a=1,b=1,c=1,Python只分配了一個空間,保存這個值1。 a,b,c都引用了這個地址。

熱點內容
死鎖避免的演算法 發布:2025-02-05 04:43:07 瀏覽:579
python查文檔 發布:2025-02-05 04:27:49 瀏覽:496
javaxmldom 發布:2025-02-05 04:27:40 瀏覽:9
linux修改內存大小 發布:2025-02-05 04:26:05 瀏覽:997
ftp命令復制文件 發布:2025-02-05 04:26:00 瀏覽:303
python好用的ide 發布:2025-02-05 04:14:18 瀏覽:516
id密碼開頭是多少 發布:2025-02-05 04:11:51 瀏覽:101
數據結構c語言ppt 發布:2025-02-05 04:11:45 瀏覽:43
如何用學習機配置的筆寫字 發布:2025-02-05 04:09:15 瀏覽:395
5歲編程 發布:2025-02-05 04:06:21 瀏覽:653