python传递参数方式
1、当形参如*arg时表示传入数组,当形参如**args时表示传入字典。
复制代码 代码示例:
def myprint(*commends,**map):
for comm in commends:
print comm
for key in map.keys():
print key,map[key]
myprint("hello","word",username="tian",name="wei")
输出:
hello
word
username tian
name wei
python中定义一个函数,可以通过正常的只传入值或key-value的方法调用。
若第一个时参数传入的是key-value的方法,则其后必须都是key-value方法。
如果第一个不是,则其后根据情况再传入值就可以了。
例子:
复制代码 代码示例:
def parrot(voltage="fff",state='a stiff',action='voom',type='Norwegian Blue'):
print "-- This parrot wouldn't", action,
print "if you put", voltage, "volts through it."
print "-- Lovely plumage, the", type
print "-- It's", state, "!"
parrot(1000)#可以
parrot(action = 'VOOOOOM', voltage = 1000000)
#可以,都是key-value方法
parrot('a thousand', state = 'pushing up the daisies')
#可以,第一个实参为直接传入法,后面无所谓了
parrot('a million', 'bereft of life', 'jump')
#可以,都是传值,而且由于形参都有默认值,则按顺序一个个替换
parrot(voltage="33","ff","abc")
#不可以,第一个为Key-value传值法,以后的都必须是
python函式定义的四种方式:
① F(arg1,arg2,...),最常见的定义方式,一个函式可以定义任何个参数,每个参数间用逗号分割,用这种参数在调用的时候必须在函式名后面的小括号中提供个数相等的值(实参),并且顺序必须相同,形参与实参一一对应
def a(x,y):
print x,y
调用a函式,a(1,2)则x=1,y=2,如果a(1)或者a(1,2,3)则会出错
② F(arg1,arg2=value2,...agrN=valueN),则将为函式提供默认值。
def a(x,y=3):
print x,y
调用该函式,a(1,2)则x=1,y=2,如果a(1)不会导致错误,此时x=1,y=3,y值将使用默认值,a(y=4,x=2)同理
可变参数:
③ F(*arg1),以一个*加形参的方式来表示函式的实参个数不确定,参数个数>=0,采用这样的方式定义函式,在函式内部将以实参名的方式构建一个元组(tuple)
复制代码 代码示例:
def a(*x):
# 定义一个名为x的元组
def a(*t):
print x
>>>a(1)
(1,)
>>>a()
None
>>>a(1,2,3)
(1,2,3)
遍历该元组(计算总和)的一种方式,此时r定义为一元组:
复制代码 代码示例:
def y(*r):
x = 0
for t in r:
x += t
print x
④ F(**arg)形参名前加2个**表示在函式内部将被存放在以形参名为标识符的dictionary,这时调用将使用arg1=value1,arg2=value2...
复制代码 代码示例:
def a(**b):
print b
>>>a()
None
>>>a(x=1,y=2)
{'y':2,'x':1}
#注意遍历返回的顺序与形参位置顺序相反
>>>a(1,2) #error
可通过以下方式来获取预期键值对,如果形参是未定义'y'的键,将返回None。
复制代码 代码示例:
def a(**x):
print x.get('y')
>>>a(x=1,y=2)
2
>>>a(x=1)
None
>>>a(x=1,b=2)
None
Python参数调用过程按照以上四种方法优先级依次降低:
①方式解析,然后是②中的arg=value方式,再分别按照③>④优先级传参。