python function definition

1.函数参数是如何定义的 

python 函数参数的定义功能很强大,尤其是它的位置参数和关键字参数的定义,这在其他的语言里是没有的。

在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 funcD(a, b, *c):
print a
print b
print “length of c is: %d ” % len(c)
print c
调用funcD(1, 2, 3, 4, 5, 6)结果是
1
2
length of c is: 4
(3, 4, 5, 6)

4.F(**arg1)
形参名前加俩个*表示,所有正常形参之外的其他的关键字参数都将被放置在以形式名为标识符的dictionary中,使用双颗星的时候调用函数的方法则需要采用arg1=value1,arg2=value2这样的形式。

def funcF(a, **b):
print a
for x in b:
print x + “: ” + str(b[x])
调用funcF(100, c=’你好’, b=200),执行结果
100
c: 你好
b: 200

关键字参数(keyword argument)调用函数允许调用函数的时候打乱参数传递顺序。

2.在调用函数的过程中参数是如何被解析

上面这四种方法优先级依次降低,先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’

3.函数返回值 

python 函数返回值有两种形式: 1 返回一个值。 2 返回多个值。 现看看返回一个值的吧。

def firstvalue(a,b):
c = a + b
return c

print firstvalue(1,2)结果:3

再看看返回多个值的: python可以返回多个值:

def secondvalue(a,b):
c = a + b
return (a,b,c)

x,y,z = secondvalue(1,2)
print ‘x:’,x,’y:’,y,’z:’,z

via
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: