今天学习到python函数传递的一些内容,和其他语言的参数传递有很多类似的地方,也有很多是python语言专有的一些特性,记录下,我对python函数参数传递的一些认知。
函数
python函数是一些已经记录好的,可以重复使用的一些代码。函数的定义语句如下所示:
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
在函数的使用中,参数是必不可少的部分,让我们来看下,几乎所有语言都拥有的函数传递是一种传递方式是怎么样的:
def hello(name):
print "hello"+name
hello("john")
在这一段函数之中,hello函数接受一个参数john,最终函数也会输出hello,john为结果。
当然,函数自然也支持多个参数的传递
def printinfo( name, age ):
"打印任何传入的字符串"
print "Name: ", name;
print "Age ", age;
return;
#调用printinfo函数
printinfo( 'miki',50);
这个特性显而易见,而且在其他语言之中也非常常见,下面让我们看下,python之中特有的一些机制,首先是参数顺序的转换
def printinfo( name, age ):
"打印任何传入的字符串"
print "Name: ", name;
print "Age ", age;
return;
#调用printinfo函数
printinfo( age=50, name="miki" );
函数顺序转换完成之后,函数一样能被调用。得到一样的输出结果,这在其他很多语言中并不具备这样的功能
python的变量传递功能并不仅仅只限于这样的功能,当加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 可写函数说明
def printinfo( arg1, *vartuple ):
"打印任何传入的参数"
print "输出: "
print arg1
for var in vartuple:
print var
return;
# 调用printinfo 函数
printinfo( 10 );
printinfo( 70, 60, 50 );
python函数参数传递还有着将字典或者列表传递的过程和其反转过程:
#!/usr/bin/python
def story(**kwds):
return 'Once upon a time there was a '\
'%(job)s called %(name)s.'% kwds
def power (x,y,*others):
if others:s print 'Received redundant parameters:'.others
return pow(x,y)
def interval(start,stop=None,step=1):
'Imitates range() for step > 0'
print start,stop
if stop is None:
start,stop = 0,start
print start,stop
result = []
i = start
while i < stop:
result.append(i)
在上述例子中,使用**kwd 参数,当我们传递的内容是里面所需要的job和name的时候,
print story(job = 'king', name ='gumby' )
参数会自动往里面传递
这个特性特别有意思
args = {name:'aa',job='aa'}
print story(**args)
当往里面传递一个字典时,结果和单个参数的键值对类似。