Python学习笔记(六)
如果我们在一个程序中需要反复执行同一项任务时,我们可以不用重复编写该任务代码,我们可以使用函数,从而减少我们的代码量。
一.定义函数
如果要定义函数,我们使用关键字def,基本格式为关键字+函数名,最后以冒号结尾。
>>> def greet():
print('Hello')
>>> greet()
Hello
上边这个例子是一个最简单的函数,我们调用greet()函数打印Hello
1.函数传递信息
我们最常使用的函数还包含有两个参数,叫做形参与实参。Python中的函数我们可以类比数学中的函数。如同y=x+1,式子中的x如同形参,我们对x赋值2,2就相当于实参。把实参传递给形参,就相当于一个赋值的过程。
>>> def greet(name):
print('Hello,'+ name)
greet('libai')
Hello,libai
上边这个例子中name 就是形参,libai就是实参。
2.传递实参
函数中可能存在多个形参,用户使用时也可能包含多个实参。
位置实参:每一个调用的实参都必须对应于一个形参,这种关联方式称为位置实参。
>>> def message(name,age):
print('My name is '+ name +',and I am '+ age +' years old')
>>> message('libai','20')
>>> message('dufu','15')
My name is libai,and I am 20 years old
My name is dufu,and I am 15 years old
注意:我们在调用实参的时候,注意和形参对应,顺序不能错。
关键字实参:传递给函数的名称与值对应,明确指明形参对应的实参。
>>> def message(name,age):
print('My name is '+ name +',and I am '+ age +' years old')
>>> message(age = '20',name = 'libai')
My name is libai,and I am 20 years old
3.默认值
编写函数时,我们可以对函数形参使用默认值。如果调用函数时,提供了对应的实参值,就输出实参;如果没有提供实参,那么就会输出默认值。
>>> def message(name,age='20'):
print('My name is '+ name +',and I am '+ age +' years old')
>>> message('libai','20')
>>> message('libai')
My name is libai,and I am 20 years old
My name is libai,and I am 20 years old
以上三种函数调用可以混合使用,但是需要注意的是使用函数时必须实参和形参相匹配。如果实参多于或少于形参,Python将会报错。
有些时候,我们对于实参取值具有不确定性,所以我们可以让实参变成可选的。我们对形参进行处理,如上例中令age=’ ',让它变成一个空字符串。这样,我们的实参对于age将可有可无。
二.返回值
函数并非总是直接显示输出,它可以处理一些数据,并返回一个值。函数返回的值的称为返回值。我们通常使用return语句将值返回到调用函数的代码行。
>>> def message(name,age):
full_name = 'My name is '+ name +',and I am '+ age +' years old'
return full_name
>>> full_name = message('libai','20')
>>> print(full_name)
My name is libai,and I am 20 years old
函数可以返回任何类型的值,我们让它可以返回成字典结构。
>>> def message(name,age):
full_name = {'name':name,'age':age}
return full_name
>>> full_name = message('libai','20')
>>> print(full_name)
{'name': 'libai', 'age': '20'}
三.传递列表
有些时候,我们可以对列表进行传递,列表中可以是名字,年龄等。传递列表,可以提高我们的效率。
>>> def greet(names):
for name in names:
full_name = 'My name is '+ name
print(full_name)
>>> message = ['libai','dufu','dumu']
>>> greet(message)
My name is libai
My name is dufu
My name is dumu
四.传递任意数量的实参
>>> def greet(*name):
print(name)
>>> greet('libai')
>>> greet('libai','dufu','dumu')
('libai',)
('libai', 'dufu', 'dumu')
有时候我们不知道会接收多少个实参,我们通过形参名前加一个星号(*)创建一个空元组,将实参传递的所有值送给这个空元组中。
我们还可以通过形参名前加两个星号(**)创建一个空字典,将实参传递的所有值送给这个空字典中。
这种方法也可以结合位置实参和任意数量实参;或者结合任意数量的关键字实参使用。