python函數(shù)內(nèi)星號(hào) python函數(shù)參數(shù)加星號(hào)

Python函數(shù)的參數(shù)類型

Python函數(shù)的參數(shù)類型主要包括必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)和關(guān)鍵字參數(shù),本文介紹一下他們的定義以及可變數(shù)據(jù)類型參數(shù)傳遞需要注意的地方。

10年積累的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有二道江免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

必選參數(shù)(Required arguments)是必須輸入的參數(shù),比如下面的代碼,必須輸入2個(gè)參數(shù),否則就會(huì)報(bào)錯(cuò):

其實(shí)上面例子中的參數(shù) num1和num2也屬于關(guān)鍵字參數(shù),比如可以通過如下方式調(diào)用:

執(zhí)行結(jié)果:

可選參數(shù)(Optional arguments)可以不用傳入函數(shù),有一個(gè)默認(rèn)值,如果沒有傳入會(huì)使用默認(rèn)值,不會(huì)報(bào)錯(cuò)。

位置參數(shù)(positional arguments)根據(jù)其在函數(shù)定義中的位置調(diào)用,下面是pow()函數(shù)的幫助信息:

x,y,z三個(gè)參數(shù)的的順序是固定的,并且不能使用關(guān)鍵字:

輸出:

在上面的pow()函數(shù)幫助信息中可以看到位置參數(shù)后面加了一個(gè)反斜杠 / ,這是python內(nèi)置函數(shù)的語法定義,Python開發(fā)人員不能在python3.8版本之前的代碼中使用此語法。但python3.0到3.7版本可以使用如下方式定義位置參數(shù):

星號(hào)前面的參數(shù)為位置參數(shù)或者關(guān)鍵字參數(shù),星號(hào)后面是強(qiáng)制關(guān)鍵字參數(shù),具體介紹見強(qiáng)制關(guān)鍵字參數(shù)。

python3.8版本引入了強(qiáng)制位置參數(shù)(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語法來定義位置參數(shù)了,可以寫成如下形式:

來看下面的例子:

python3.8運(yùn)行:

不能使用關(guān)鍵字參數(shù)形式賦值了。

可變參數(shù) (varargs argument) 就是傳入的參數(shù)個(gè)數(shù)是可變的,可以是0-n個(gè),使用星號(hào)( * )將輸入?yún)?shù)自動(dòng)組裝為一個(gè)元組(tuple):

執(zhí)行結(jié)果:

關(guān)鍵字參數(shù)(keyword argument)允許將任意個(gè)含參數(shù)名的參數(shù)導(dǎo)入到python函數(shù)中,使用雙星號(hào)( ** ),在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)字典。

執(zhí)行結(jié)果:

上面介紹的參數(shù)可以混合使用:

結(jié)果:

注意:由于傳入的參數(shù)個(gè)數(shù)不定,所以當(dāng)與普通參數(shù)一同使用時(shí),必須把帶星號(hào)的參數(shù)放在最后。

強(qiáng)制關(guān)鍵字參數(shù)(Keyword-Only Arguments)是python3引入的特性,可參考:。 使用一個(gè)星號(hào)隔開:

在位置參數(shù)一節(jié)介紹過星號(hào)前面的參數(shù)可以是位置參數(shù)和關(guān)鍵字參數(shù)。星號(hào)后面的參數(shù)都是強(qiáng)制關(guān)鍵字參數(shù),必須以指定參數(shù)名的方式傳參,如果強(qiáng)制關(guān)鍵字參數(shù)沒有設(shè)置默認(rèn)參數(shù),調(diào)用函數(shù)時(shí)必須傳參。

執(zhí)行結(jié)果:

也可以在可變參數(shù)后面命名關(guān)鍵字參數(shù),這樣就不需要星號(hào)分隔符了:

執(zhí)行結(jié)果:

在Python對(duì)象及內(nèi)存管理機(jī)制中介紹了python中的參數(shù)傳遞屬于對(duì)象的 引用傳遞 (pass by object reference),在編寫函數(shù)的時(shí)候需要特別注意。

先來看個(gè)例子:

執(zhí)行結(jié)果:

l1 和 l2指向相同的地址,由于列表可變,l1改變時(shí),l2也跟著變了。

接著看下面的例子:

結(jié)果:

l1沒有變化!為什么不是[1, 2, 3, 4]呢?

l = l + [4]表示創(chuàng)建一個(gè)“末尾加入元素 4“的新列表,并讓 l 指向這個(gè)新的對(duì)象,l1沒有進(jìn)行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個(gè)返回值:

結(jié)果:

下面的代碼執(zhí)行結(jié)果又是什么呢?

執(zhí)行結(jié)果:

和第一個(gè)例子一樣,l1 和 l2指向相同的地址,所以會(huì)一起改變。這個(gè)問題怎么解決呢?

可以使用下面的方式:

也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對(duì)象及內(nèi)存管理機(jī)制。這個(gè)問題在Python編程時(shí)需要特別注意。

本文主要介紹了python函數(shù)的幾種參數(shù)類型:必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)、強(qiáng)制位置參數(shù)、關(guān)鍵字參數(shù)、強(qiáng)制關(guān)鍵字參數(shù),注意他們不是完全獨(dú)立的,比如必選參數(shù)、可選參數(shù)也可以是關(guān)鍵字參數(shù),位置參數(shù)可以是必選參數(shù)或者可選參數(shù)。

另外,python中的參數(shù)傳遞屬于對(duì)象的 引用傳遞 ,在對(duì)可變數(shù)據(jù)類型進(jìn)行參數(shù)傳遞時(shí)需要特別注意,如有必要,使用python的拷貝方法。

參考文檔:

--THE END--

python 程序中,調(diào)用函數(shù)時(shí),(*nums)里面的‘ * ’哪里來的??

Python 星號(hào)表達(dá)式(starred expression)。出現(xiàn)在函數(shù)的參數(shù)中的星號(hào)表達(dá)式?*args?用于將傳入的可迭代參數(shù)序列解析出來,并存入args中。

* 會(huì)將傳入的參數(shù)放入名為args的元組中?

** 會(huì)將傳入的參數(shù)放入名為kwargs的字典中

給個(gè)鏈接你,別人的博客:

網(wǎng)頁鏈接

幫你解釋清楚了,給句謝謝吧

python // 與 / * 和 ** 運(yùn)算符 的含義

1 在 Python 2.2 :

? ? 要引用: from __future__ import division

" / "就表示 浮點(diǎn)數(shù)除法,返回浮點(diǎn)結(jié)果;" // "表示整數(shù)除法。

2? ? Python 3以后? :

" / "就表示 浮點(diǎn)數(shù)除法,返回浮點(diǎn)結(jié)果;" // "表示整數(shù)除法。

python? //10 除以10 然后向下取整

在 Python 中,* 和 ** 具有語法多義性,具體來說是有四類用法。

1. 算數(shù)運(yùn)算

* ?代表乘法

** 代表乘方

2*5

10

2**5

32

2. 函數(shù)形參

*args 和 **kwargs 主要用于函數(shù)定義。

你可以將不定數(shù)量的參數(shù)傳遞給一個(gè)函數(shù)。不定的意思是:預(yù)先并不知道, 函數(shù)使用者會(huì)傳遞多少個(gè)參數(shù)給你, 所以在這個(gè)場(chǎng)景下使用這兩個(gè)關(guān)鍵字。其實(shí)并不是必須寫成 *args 和 **kwargs。 ?*(星號(hào)) 才是必須的. 你也可以寫成 *ar ?和 **k 。而寫成 *args 和**kwargs 只是一個(gè)通俗的命名約定。

python函數(shù)傳遞參數(shù)的方式有兩種:

位置參數(shù)(positional argument)

關(guān)鍵詞參數(shù)(keyword argument)

*args 與 **kwargs 的區(qū)別,兩者都是 python 中的可變參數(shù):

*args 表示任何多個(gè)無名參數(shù),它本質(zhì)是一個(gè) tuple

**kwargs 表示關(guān)鍵字參數(shù),它本質(zhì)上是一個(gè) dict

如果同時(shí)使用 *args 和 **kwargs 時(shí),必須 *args 參數(shù)列要在 **kwargs 之前。

deffun(*args, **kwargs):

... print('args=', args)

... print('kwargs=', kwargs)

...

fun(1,2,3,4, A='a', B='b', C='c', D='d')

args= (1,2,3,4)

kwargs= {'A':'a','B':'b','C':'c','D':'d'}

使用 *args

deffun(name, *args):

... print('你好:', name)

... foriinargs:

... print("你的寵物有:", i)

...

fun("Geek","dog","cat")

你好: Geek

你的寵物有: dog

你的寵物有: cat

使用?**kwargs

deffun(**kwargs):

... forkey, valueinkwargs.items():

... print("{0} 喜歡 {1}".format(key, value))

...

fun(Geek="cat", cat="box")

Geek 喜歡 cat

cat 喜歡 box

3. 函數(shù)實(shí)參

如果函數(shù)的形參是定長(zhǎng)參數(shù),也可以使用 *args 和 **kwargs 調(diào)用函數(shù),類似對(duì)元組和字典進(jìn)行解引用:

deffun(data1, data2, data3):

... print("data1: ", data1)

... print("data2: ", data2)

... print("data3: ", data3)

...

args = ("one",2,3)

fun(*args)

data1:? one

data2:2

data3:3

kwargs = {"data3":"one","data2":2,"data1":3}

fun(**kwargs)

data1:3

data2:2

data3:? one

4. 序列解包

a, b, *c =0,1,2,3

a

b

1

c

[2,3]

python中星號(hào)(*)和雙星號(hào)(**)的用法

一:數(shù)學(xué)運(yùn)算符,*表示乘法,**表示取冪,如:

二:用在變量的前面。

1,向函數(shù)傳遞參數(shù),將變量中可迭代對(duì)象的元素拆解出來,作為獨(dú)立的參數(shù)第傳給函數(shù),如:

雙引號(hào)(**),變量為字典,將其拆解出來,單獨(dú)傳給函數(shù)。如:

2,在函數(shù)定義中使用,收集參數(shù)。將參數(shù)捕捉到一個(gè)元組中,如:

該用法允許我們創(chuàng)建自己的函數(shù)時(shí),可以接收任意數(shù)量的參數(shù)。

雙星號(hào)可以將參數(shù)捕捉到字典中,如:

網(wǎng)頁名稱:python函數(shù)內(nèi)星號(hào) python函數(shù)參數(shù)加星號(hào)
網(wǎng)頁路徑:http://muchs.cn/article30/hphcpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)全網(wǎng)營(yíng)銷推廣、域名注冊(cè)、網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)