Python函数基础

行参,实参

def greet_name(username):
	print("Hello," + username.title() + "!")

greet_name('jesse')

形参——在函数 greet_name()的定义中,变量 username为形参——函数完成其工作所需的一项信息

实参——函数在调用时传递给函数的信息,代码 greet_name('jesse')中 'jesse'为实参

 

位置参数

在调用函数时,Python必须将函数中的实参都关联到函数中定义的形参,且关联的顺序为形参的顺序

def test(uername,sex):
	print("He name is:" + uername + ",He is sex is:" + sex)

test("Jonh","man")

在调用函数时,需要给函数传递人名和性别两个参数,代码中"Jonh"传递给username,"man"传递给sex,传递的实参必须与函数定义时的形参对应。

 

关键字实参

def test(x,y):
	print(x)
	print(y)

test(y=1,x=2)

关键字实参是传递给函数的名称-值对,关键字实参的顺序无关紧要。当参数中既有位置参数又有关键字参数时,位置参数必须在关键字参数之后

def test(x,y):
	print(x)
	print(y)

test(1,y=2)

 上述代码,如果在调用的时候写成 test(y = 2,1),会报错。如果写成 tes(1,x=2),也会报错,因为此时python已经将1传递给了x。

 

默认值 

在编写函数时,可以给形参指定默认值

def test(name,sex,age = 23):
    print("name is :" + name)
    print("age is: %s" %age)
    print("sex is:" + sex)

test("Jonh","man")

 默认值参数,在订单函数时已经给形参赋值,如果在调用函数时,没有给默认值的形参传递实参的话,函数执行时会采用默认值,如果赋值了,会采用新值,注意:函数在定义时,默认值参数必须在非默认值参数之后,函数调用传递实参时,也需要按照位置参数的顺序一一对应。

 

传递列表

 可以向函数中的形参传递列表形式的实参

def greet_users(names):
	for name in names:
		msg = "Hello," + name.title() + "!"
		print(msg)

usernames = ['jack','tom','poli']
greet_users(usernames)

上述代码中实参 usernames 以列表的形式传递给函数中定义的形参 names

 

传递任意数量的实参

有时候我们不知道函数需要接收多少个实参,Python允许函数在调用的语句中接收任意数量的实参。

def make_pizza(*toopings):
	print(toopings)

make_pizza('pepperoni')
make_pizza('mushrooms','green peppers','extra cheese')

形参名 *toopings 中 * 表示让Python创建一个名为toopings的空元组,并将所有接收到的值都封装在这个元组中,即使只接收到一个值也是如此。*toopings接收的是任意数量的位置参数转化成元组的形式

 

位置实参与任意数量实参结合

在定义函数时,如果要让函数接收不同类型的实参时,任意数量的形参必须放在位置参数之后,Python先匹配位置实参和关键字实参

def make_pizza(size,*toopings):
	print("Making a " + str(size) + "-inch pizz with the following toopings:" )
	for tooping in toopings:
		print("-" + tooping)

make_pizza(16,'pepperoni')
make_pizza(12,'mushrooms','green peppers','extra cheese')

上述代码中,Python将第一个实参传递给size,将其余的所有值都存储在元组toppings中,在函数中调用

 

使用字典形式的实参

有时候函数需要接收任意数量的实参,但是预先不知道是什么样的数据,这时候可以以键-值对的形式传递给函数

def test(**info):
	print(info)

test(name = 'Jack',age = 23, sex = 'man')

打印结果:
{'name': 'Jack', 'age': 23, 'sex': 'man'}

上述代码中**info将传递的关键字参数转化为字典类型。注意:在函数定义的时候,字典类型的形参必须定义在最后

posted on 2018-01-11 18:10  迟到先生  阅读(105)  评论(0)    收藏  举报