函数定义的时候,参数的顺序要符合以下顺序,不然就会报错。

Python silent参数 python中如何理解参数_赋值


各个参数的术语的定义如下:

形参(Parameter)
函数执行需要的信息数据

实参(Argument)
在函数调用时提供的具体信息

位置参数(Positional Argument)
实参的顺序和形参顺序相同,参数放置的顺序很重要

关键字参数(Keyword Argument)
实参由变量名和值通过等号连接组成

默认值参数(Default Value Augument)
定义函数时给形参的默认赋值,如果调用的时候没有实参赋值则给形参赋默认值,如果有实参,默认值会被忽略,其实就是一个备胎值

可变(任意)数量位置参数(Variable number of Positional Argument)
又叫做不定长度参数列表,在定义的时候在形参名字之前加一个星号(*)本质上python会用一个元组来存放他收到的一些列数值。在函数调用的时候,可以使用for循环来操作这些列表中的参数。

可变(任意)数量的关键字参数(Varialbe number of Keyword Argument):用两个星号开头的形参,在使用的时候可以自定义实参的名字,并且用关键词的形式 “name=value”来表示。在调用函数的时候,可以使用字典的方式来读取使用传入的实参。

Python silent参数 python中如何理解参数_函数调用_02

我们来看代码:

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的字典当中。