函数参数
python中的函数参数很灵活,具体体现在传递参数有多种形式。
使用关键字参数调用函数
为了提高函数调用的可读性,在函数调用时可以使用关键字参数调用
# /usr/bin/python
# -*- coding: utf-8 -*-
# descrition:create funcation
def print_area(width, height):
area = width * height
print("{0} * {1} 长方形的面积:{2}".format(width, height, area ))
print_area(10.0, 20.0)
print_area(width=10.0, height=20.0)
print_area(height=20.0, width=10.0)
# print_area(width=10.0, 20.0) # 报错
print_area(20.0, height=10.0)
调用者能够清晰的看出来传的参数的含义,关键字调用时,参数顺序可以和定义的顺序不同。一旦其中的一个采用了关键字,那么其后的参数都必须采用关键字形式传递。
参数默认值
在定义参数的时候可以为参数设置一个默认值,调用时可以忽略该参数。
def make_coffee(name="卡布奇洛"):
return "制作一杯{0}咖啡".format(name)
print(make_coffee())
print(make_coffee("拿铁"))
可变参数
python中函数的参数的个数可以变化,它可以接受不确定数量的参数,这种参数称为可变参数。python中可变参数有两种,即参数前加 * 或 ** 形式,
*
可变参数在函数中被组装成为一个元组
**
可变参数在函数中被组装成为一个字典
* 可变参数
def sum(* numbers, multiple = 1):
total = 0.0
for number in numbers:
total += number
return total * multiple
print(sum(10, 20))
print(sum(10, 20, multiple = 2))
double_tuple = (10.0, 30.0)
print(sum(1.0, 2.0, *double_tuple))
计算所有参数之和,*numbers
是可变参数。在函数体中参数被组装成一个元组,可以使用 for
循环遍历numbers 元组。
另外,double_tuple 也可以是列表对象。
*
可变参数不是最后一个参数时,后面的参数必须采用关键字参数形式传递。
** 可变参数
def show_info(sep = ':', **info):
print('---info---')
for key, value in info.items():
print('{0} {1} {2}'.format(key, sep, value))
show_info('->', name = 'tony', age = 18, sex = True )
show_info(name = 'tony', age = 18, sex = True , sep = '-')
s_dict = {'name':'T', 'age':18}
show_info(**s_dict, sex = True , sep = '=')
sep为信息的分隔符号,默认值是冒号, **info 是可变参数,在函数体中参数info被组装成一个字典。
** 可变参数必须放在正规参数之后,例如def show_info(sep = ':', **info):