http://blog.csdn.net/
使用def 语句定义函数是所有程序的基础,
7.1 可接受任意数量参数的函数:
问题:
你想构造一个可接受任意数量参数的函数:
为了能让一个函数接受任意数量的位置参数,可以使用一个*参数,例如:
def avg(first, *rest):
print first;
print sum(rest)
avg(1,2,3,4)
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a44.py
1
9
Process finished with exit code 0
在这个例子中,rest是由所有其他位置参数组成的元组,
然后我们在代码中把它当成了一个序列来进行后续的计算
def avg(first, *rest):
print first;
print sum(rest)
print type(rest)
avg(1,2,3,4)
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a44.py
1
9
<type 'tuple'>
此时的rest被当成了tuple
为了接受任意数量的关键字参数,使用一个以**开头的参数,比如:
def avg(first, *rest):
print first;
print sum(rest)
print type(rest)
def make_element(name,value,**attrs):
print attrs
print type(attrs)
make_element('aa','bb',size='large', quantity=6,sex='man')
这时候的attrs 是一个包含所有被传入进来的键值对字典
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a44.py
{'quantity': 6, 'sex': 'man', 'size': 'large'}
<type 'dict'>
如果你还希望某个函数能同时接受任意数量的位置参数和关键字参数,可以同时使用*和**.
def anyargs(*args, **kwargs):
print(args) # A tuple
print(kwargs) # A dict
使用这个函数时,所有位置参数会被放到args元组中,所有关键字参数会被放到kwargs中。
def anyargs(*args, **kwargs):
print '11111111111111'
print(args) # A tuple
print '22222222222222'
print(kwargs) # A dict
anyargs('a','b','c','d',size='large', quantity=6,sex='man')
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/mycompany/Django/a45.py
11111111111111
('a', 'b', 'c', 'd')
22222222222222
{'quantity': 6, 'sex': 'man', 'size': 'large'}
Process finished with exit code 0