首頁 後端開發 Python教學 跟老齐学Python之总结参数的传递

跟老齐学Python之总结参数的传递

Jun 16, 2016 am 08:41 AM
傳遞 參數

就前面所讲,函数的基本内容已经完毕。但是,函数还有很多值得不断玩味的细节。这里进行阐述。

参数的传递

python中函数的参数通过赋值的方式来传递引用对象。下面总结通过总结常见的函数参数定义方式,来理解参数传递的流程。

def foo(p1,p2,p3,...)

这种方式最常见了,列出有限个数的参数,并且彼此之间用逗号隔开。在调用函数的时候,按照顺序以此对参数进行赋值,特备注意的是,参数的名字不重要,重要的是位置。而且,必须数量一致,一一对应。第一个对象(可能是数值、字符串等等)对应第一个参数,第二个对应第二个参数,如此对应,不得偏左也不得偏右。

复制代码 代码如下:

>>> def foo(p1,p2,p3):
...     print "p1==>",p1
...     print "p2==>",p2
...     print "p3==>",p3
...
>>> foo("python",1,["qiwsir","github","io"])    #一一对应地赋值
p1==> python
p2==> 1
p3==> ['qiwsir', 'github', 'io']

>>> foo("python")
Traceback (most recent call last):
  File "", line 1, in
TypeError: foo() takes exactly 3 arguments (1 given)    #注意看报错信息

>>> foo("python",1,2,3)
Traceback (most recent call last):
  File "", line 1, in
TypeError: foo() takes exactly 3 arguments (4 given)    #要求3个参数,实际上放置了4个,报错


 def foo(p1=value1,p2=value2,...)

这种方式比前面一种更明确某个参数的赋值,貌似这样就不乱子了,很明确呀。颇有一个萝卜对着一个坑的意味。

还是上面那个函数,用下面的方式赋值,就不用担心顺序问题了。

复制代码 代码如下:

>>> foo(p3=3,p1=10,p2=222)
p1==> 10
p2==> 222
p3==> 3

 也可以采用下面的方式定义参数,给某些参数有默认的值

复制代码 代码如下:

>>> def foo(p1,p2=22,p3=33):    #设置了两个参数p2,p3的默认值
...     print "p1==>",p1
...     print "p2==>",p2
...     print "p3==>",p3
...
>>> foo(11)     #p1=11,其它的参数为默认赋值
p1==> 11
p2==> 22
p3==> 33
>>> foo(11,222)     #按照顺序,p2=222,p3依旧维持原默认值
p1==> 11
p2==> 222
p3==> 33
>>> foo(11,222,333)  #按顺序赋值
p1==> 11
p2==> 222
p3==> 333

>>> foo(11,p2=122)
p1==> 11
p2==> 122
p3==> 33

>>> foo(p2=122)     #p1没有默认值,必须要赋值的,否则报错
Traceback (most recent call last):
  File "", line 1, in
TypeError: foo() takes at least 1 argument (1 given)

 def foo(*args)

这种方式适合于不确定参数个数的时候,在参数args前面加一个*,注意,仅一个哟。

复制代码 代码如下:

>>> def foo(*args):         #接收不确定个数的数据对象
...     print args
...
>>> foo("qiwsir.github.io") #以tuple形式接收到,哪怕是一个
('qiwsir.github.io',)
>>> foo("qiwsir.github.io","python")
('qiwsir.github.io', 'python')

 上一讲中已经有例子说明,可以和前面的混合使用。此处不赘述。

def foo(**args)

这种方式跟上面的区别在于,必须接收类似arg=val形式的。

复制代码 代码如下:

>>> def foo(**args):    #这种方式接收,以dictionary的形式接收数据对象
...     print args
...

>>> foo(1,2,3)          #这样就报错了
Traceback (most recent call last):
  File "", line 1, in
TypeError: foo() takes exactly 0 arguments (3 given)

>>> foo(a=1,b=2,c=3)    #这样就可以了,因为有了键值对
{'a': 1, 'c': 3, 'b': 2}

 下面来一个综合的,看看以上四种参数传递方法的执行顺序

复制代码 代码如下:

>>> def foo(x,y=2,*targs,**dargs):
...     print "x==>",x
...     print "y==>",y
...     print "targs_tuple==>",targs
...     print "dargs_dict==>",dargs
...

>>> foo("1x")
x==> 1x
y==> 2
targs_tuple==> ()
dargs_dict==> {}

>>> foo("1x","2y")
x==> 1x
y==> 2y
targs_tuple==> ()
dargs_dict==> {}

>>> foo("1x","2y","3t1","3t2")
x==> 1x
y==> 2y
targs_tuple==> ('3t1', '3t2')
dargs_dict==> {}

>>> foo("1x","2y","3t1","3t2",d1="4d1",d2="4d2")
x==> 1x
y==> 2y
targs_tuple==> ('3t1', '3t2')
dargs_dict==> {'d2': '4d2', 'd1': '4d1'}

 通过上面的例子,看官是否看出什么名堂了呢?

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

什麼是 Windows 11 中的傳遞最佳化文件,您可以刪除它們嗎? 什麼是 Windows 11 中的傳遞最佳化文件,您可以刪除它們嗎? Sep 29, 2023 pm 04:09 PM

什麼是 Windows 11 中的傳遞最佳化文件,您可以刪除它們嗎?

PHP 5.4版本新功能:如何使用callable類型提示參數接受可呼叫的函數或方法 PHP 5.4版本新功能:如何使用callable類型提示參數接受可呼叫的函數或方法 Jul 29, 2023 pm 09:19 PM

PHP 5.4版本新功能:如何使用callable類型提示參數接受可呼叫的函數或方法

i9-12900H參數評測大全 i9-12900H參數評測大全 Feb 23, 2024 am 09:25 AM

i9-12900H參數評測大全

產品參數是什麼意思 產品參數是什麼意思 Jul 05, 2023 am 11:13 AM

產品參數是什麼意思

C++程式以給定值為參數,找出雙曲正弦反函數的值 C++程式以給定值為參數,找出雙曲正弦反函數的值 Sep 17, 2023 am 10:49 AM

C++程式以給定值為參數,找出雙曲正弦反函數的值

PHP Warning: in_array() expects parameter的解決方法 PHP Warning: in_array() expects parameter的解決方法 Jun 22, 2023 pm 11:52 PM

PHP Warning: in_array() expects parameter的解決方法

C++ 函式參數型別安全檢查 C++ 函式參數型別安全檢查 Apr 19, 2024 pm 12:00 PM

C++ 函式參數型別安全檢查

機器學習超參數調優總結(PySpark ML) 機器學習超參數調優總結(PySpark ML) Apr 08, 2023 pm 07:21 PM

機器學習超參數調優總結(PySpark ML)

See all articles