函数定义的时候,参数的顺序要符合以下顺序,不然就会报错。
各个参数的术语的定义如下:
形参(Parameter):
函数执行需要的信息数据实参(Argument):
在函数调用时提供的具体信息位置参数(Positional Argument):
实参的顺序和形参顺序相同,参数放置的顺序很重要关键字参数(Keyword Argument):
实参由变量名和值通过等号连接组成默认值参数(Default Value Augument):
定义函数时给形参的默认赋值,如果调用的时候没有实参赋值则给形参赋默认值,如果有实参,默认值会被忽略,其实就是一个备胎值可变(任意)数量位置参数(Variable number of Positional Argument):
又叫做不定长度参数列表,在定义的时候在形参名字之前加一个星号(*)本质上python会用一个元组来存放他收到的一些列数值。在函数调用的时候,可以使用for循环来操作这些列表中的参数。可变(任意)数量的关键字参数(Varialbe number of Keyword Argument):用两个星号开头的形参,在使用的时候可以自定义实参的名字,并且用关键词的形式 “name=value”来表示。在调用函数的时候,可以使用字典的方式来读取使用传入的实参。
我们来看代码:
def greet_user(hostname,username='Allen'):
message = "Hello " + username + " I'm " + hostname
print(message)
greet_user('Wu') #Positional argument + Default value
greet_user('Wu','Bob') #Positional argument
greet_user(username='Curry',hostname='Wu') #Keyword argument
输出结果如下:
Hello Allen I'm Wu
Hello Bob I'm Wu
Hello Curry I'm Wu
其中,在def定义参数的时候使用到的hostname和username就被称为是形参parameter,也叫参数、参量、系数;在使用的时候填入的value就是实参augument,又叫证据哈哈。
我们可以使用 形参 = 实参 的名-值 对来在调用函数的时候指定参数的对应关系,如果不指定的话,python会根据位置的顺序来进行对应,这样的参数就叫做positional augument(位置参数),如果我们在形参列表中看到了这样的名-值对,那么如果在调用的时候没有提到这个参数,缺省值将作为备胎赋值给这个形参,这叫做缺省参数,或者叫做可选参数,如果没有缺省值的形参,叫做必选参数。
对于带星号的形参,也就是可变任意参数,我们用以下这个例子来说明:
def make_pizza(*toppings):
print("Make a pizza with the following toppings:")
for topping in toppings:
message = "- " + topping
print(message)
make_pizza("mushrooms")
make_pizza("greens","cheese")
运行结果:
Make a pizza with the following toppings:
- mushrooms
Make a pizza with the following toppings:
- greens
- cheese
[Finished in 0.9s]
我们看到,第一次函数调用值填入了一个实参mushroom,第二次调用使用了两个参数“green”和"cheese”,python可以使用for循环来遍历这些参数进行操作,函数都可以正常的处理,这样可以解决不定参数的问题。
对于可变长度的关键词参数(在函数定义的形参列表里面我们使用两个星号来表示),我们可以通过以下的程序进行演示:
def build_profile(first,last,**user_info):
profile = {}
profile['fist_name'] = first
profile['last_name'] = last
for key,value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('albert','einstein',location='princeton',field='physics')
print(user_profile)
运行结果如下:
{'fist_name': 'albert', 'last_name': 'einstein', 'location': 'princeton', 'field': 'physics'}
[Finished in 0.8s]
我们可以看到可变长度关键字参数对呗存放在了一个key,value的字典当中。