1. 程式人生 > >python 函式引數的傳遞(引數帶星號的說明) 元組傳遞 字典傳遞

python 函式引數的傳遞(引數帶星號的說明) 元組傳遞 字典傳遞

python中函式引數的傳遞是通過賦值來傳遞的。函式引數的使用又有倆個方面值得注意:1.函式引數是如何定義的 2.在呼叫函式的過程中引數是如何被解析

先看第一個問題,在python中函式引數的定義主要有四種方式:
1.F(arg1,arg2,...)
這是最常見的定義方式,一個函式可以定義任意個引數,每個引數間用逗號分割,用這種方式定義的函式在呼叫的的時候也必須在函式名後的小括號裡提供個數相等的 值(實際引數),而且順序必須相同,也就是說在這種呼叫方式中,形參和實參的個數必須一致,而且必須一一對應,也就是說第一個形參對應這第一個實參。例 如:
def a(x,y):
print x,y
呼叫該函式,a(1,2)則x取1,y取2,形參與實參相對應,如果a(1)或者a(1,2,3)則會報錯。


2.F(arg1,arg2=value2,...)
這種方式就是第一種的改進版,提供了預設值
def a(x,y=3):
print x,y
呼叫該函式,a(1,2)同樣還是x取1,y取2,但是如果a(1),則不會報錯了,這個時候x還是1,y則為預設的3。上面這倆種方式,還可以更換引數位置,比如a(y=8,x=3)用這種形式也是可以的。


3.F(*arg1)
上面倆個方式是有多少個形參,就傳進去多少個實參,但有時候會不確定有多少個引數,則此時第三種方式就比較有用,它以一個*加上形參名的方式來表示這個函式的實參個數不定,可能為0個也可能為n個。注意一點是,不管有多少個,在函式內部都被存放在以形參名為識別符號的tuple中。
>>> def a(*x):
if len(x)==0:
print 'None'
else:
print x
>>> a(1)
(1,)        #存放在元組中
>>> a()
None
>>> a(1,2,3)
(1, 2, 3)
>>> a(m=1,y=2,z=3)

Traceback (most recent call last):
File "<pyshell#16>", line 1, in -toplevel-
a(m=1,y=2,z=3)
TypeError: a() got an unexpected keyword argument 'm'


4.F(**arg1)
形參名前加倆個*表示,引數在函式內部將被存放在以形參名為識別符號的dictionary中,這時呼叫函式的方法則需要採用arg1=value1,arg2=value2這樣的形式。
>>> def a(**x):
if len(x)==0:
print 'None'
else:
print x  
>>> a()
None
>>> a(x=1,y=2)
{'y': 2, 'x': 1}      #存放在字典中
>>> a(1,2)            #這種呼叫則報錯

Traceback (most recent call last):
File "<pyshell#25>", line 1, in -toplevel-
a(1,2)
TypeError: a() takes exactly 0 arguments (2 given)


上面介紹了四種定義方式,接下來看函式引數在呼叫過程中是怎麼被解析的,其實只要記住上面這四種方法優先順序依次降低,先1,後2,再3,最後4,也就是先把方式1中的arg解析,然後解析方式2中的arg=value,再解析方式3,即是把多出來的arg這種形式的實參組成個tuple傳進去,最後把剩下的key=value這種形式的實參組成一個dictionary傳給帶倆個星號的形參,也就方式4
>>> def test(x,y=1,*a,**b):
print x,y,a,b


>>> test(1)
1 1 () {}
>>> test(1,2)
1 2 () {}
>>> test(1,2,3)
1 2 (3,) {}
>>> test(1,2,3,4)
1 2 (3, 4) {}
>>> test(x=1,y=2)
1 2 () {}
>>> test(1,a=2)
1 1 () {'a': 2}
>>> test(1,2,3,a=4)
1 2 (3,) {'a': 4}
>>> test(1,2,3,y=4)

Traceback (most recent call last):
File "<pyshell#52>", line 1, in -toplevel-
test(1,2,3,y=4)
TypeError: test() got multiple values for keyword argument 'y'

相關推薦

C++呼叫 python 函式及返回值的處理【,字串...】

http://www.cnblogs.com/DxSoft/archive/2011/04/01/2002676.html Python 指令碼  py_test.py : #coding:utf-8 def get_int( ): a = 10 b =

python---基礎之模塊,列表,字典

python3 ack div 第一個 ice lis value bsp 索引 1、 模塊 寫模塊的時候盡量不要和系統自帶的模塊的名字相同 調用模塊的時候,會先在當前目錄下查找是否有這個模塊,然後再會如python的環境變量中查找 a.模塊1:sys 代碼如下: 1

Python中字符串、列表、字典

python、運維1.字符串字符串四種定義方式:' ' " " ''' ''' """ """字符串的下標和切片:如: name = abcd

python學習04-數據類型(字典、集合)

ext false 增刪改 put 一個 section mod ict call 一、基本數據類型——元組   元組:是一種與列表非常相似的數據類型。但是它一旦創建便不能再修改,所以又叫只讀列表。   定義:與列表類似,只不過[]改成()   特性: 可

python中的數據類型之字典

小括號 增加 pytho 元祖 .com objects 必須 err 以及 一、元組:俗稱不可變的列表,又被稱為只讀列表。元組用小括號括起來,裏面可以放任何數據類型的數據,查詢可以,循環也可以,切片也可以,但就是不能修改。 註意:如果元組中只有一個元素,一定要加一個逗號,

Python學習之路——Python基礎之基本資料型別(列表、字典)

基本資料型別 數字 字串 列表 list 元組 tuple 字典 dict 布林值 bool 列表和元組 列表:有序,元素可以被修改元組: 書寫格式:元組的一級元素不可被修改,不能被增加或者刪除,一般寫元租的時候,推薦在最後加入',' 索引:v =

Python基礎【數據結構:列表 | | 集合 | 字典

enume 不能 之前 差集 數字 values 顯示 int list 序列 序列是Python中最基本的數據結構。包括字符串,列表,元組,Unicode字符串,buffer對象,xrange對象。序列中的每個元素都分配一個數字,即它的索引第一個索引是0,第二個索引是

Python基礎學習!容器,列表,字典與集合!(1)

本文是容器 列表知識的筆記! 元組&列表 元組:是不可變的,值被固定元組中就不可以再進行改變! 列表:是可變的,意味著可以隨意插入或者刪除其中的元素 函式呼叫格式: 列表名.函式名(引數)#元素的話要帶著單引號!大多是這樣! ‘,’.join(a)這個連線函式,用法

Python中非數字型變數:列表,字典,字串的總結

列表(儲存一組資料):list,用[]定義,資料之間用“,”分隔 定義列表: 列表名字 = [“引數1”,“引數2”……] 取值和取索引: 列表名字[索引] 索引從0開始(從前到後) 從後到前取值時:索引最後一個是-1,依次-2…… 建立一個空列表,以列表的名字加“.”,按下tab鍵,會看到

Python函式的各種引數(含星號引數)

Python函式的各種引數(含星號引數) Python中函式的引數有4種形式,分別是: 位置或關鍵字引數(Positional-or-keyword parameter) 僅位置的引數(Positional-only parameter) 任意數量的位置引數(var-positional p

Python 函式定義以及引數傳遞

Python 函式定義以及引數傳遞1.函式定義#形如def func(args...): doSomething123以關鍵字def 開頭,後面是函式名和引數下面是函式處理過程。 舉例: def add( a, b ): return a+b12引數可以設定預設值,如: def add( a, b=10

Python函式的各種引數用法(含星號引數)

Python中函式的引數有4種形式,分別是: 位置或關鍵字引數(Positional-or-keyword parameter)僅位置的引數(Positional-only parameter)任意數量的位置引數(var-positional parameter

Python函式:動態引數

前面jacky說,形式引數有幾個,實際引數是不是就有幾個(預設引數除外,預設引數只能放在最後面) 動態引數1-一個星號變元組 動態引數存在的意義? 函式的作者有時候也不知道這個函式到底需要多少個

Python 函式中,引數是傳值,還是傳引用?

在 C/C++ 中,傳值和傳引用是函式引數傳遞的兩種方式,在Python中引數是如何傳遞的?回答這個問題前,不如先來看兩段程式碼。 程式碼段1: def foo(arg): arg = 2 print(arg) a = 1 foo(a) # 輸出:2 print(a) #

關於Python函式中self引數使用介紹

摘要:類中函式定義需要加self,類外函式定義不需要 程式碼片 class Foo(object): #類中方法加入了self引數 def say_someThing(self,s

python datetime和str轉換 計算時間差;Python 函式接收字典引數

server上跑housecleaning的指令碼,需要比較時間內容 例如t1 和t2都是datetime.datetime型別,則可以通過下面的sample code來計算二者的時間差 def __time_diff(t1,t2): seconds = (t1

Python函式定義與引數

函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段,能提高應用的模組性,和程式碼的重複利用率。 1)函式的一般形式 函式定義:def 函式名() 函式呼叫:函式名() 定義函式的簡單規

Python函式的預設引數的設計【原創】

  在Python教程裡,針對預設引數,給了一個“重要警告”的例子: def f(a, L=[]): L.append(a) return L print(f(1)) print(f(2)) print(f(3)) 預設值只會執行一次,也沒說原因。會打印出結果: [1] [1

python3裡函式怎麼樣使用字典作為引數呼叫(複製他人部落格)

在python3中可以採用如下方法:         函式(*(元組))         函式(**{字典}) 如下例子:   &nb

Python-字串-列表--集合-字典-常用方法 And 時間-數學-隨機-模組兒 And 內建函式 And 異常型別

目錄 一、常用方法 1.字串常用方法 2.列表常用方法 3.元組常用方法 4.集合常用方法 5.字典常用方法 二、常用模組 1.時間模組 2.數學模組 3.隨機模組 4.系統模組 三、內建函式