05-函数
1. 函数
函数是用来封装一个功能,并使这个功能达到可重复使用的效果的一个代码片段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python
提供了许多内建函数,比如print()
。但你也可以自己创建函数,这被叫做用户自定义函数。
定义函数需要遵循以下几个规则:
- 函数代码块以
def
关键词开头,后接函数标识符名称和圆括号()
。 - 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
return [表达式]
结束函数,选择性地返回一个值给调用方。不带表达式的return
相当于返回None
。
举例:
def index():
print("hello world")
当函数定义并且代码功能编写完成之后,此时这个 函数内部的代码是不会被执行的,需要在函数的外部,使用 函数名()
的形式来调用这个函数,这样,这个 函数内部的代码才会被执行:
def index():
print("hello world")
index() # hello world
在定义好函数之后,在函数外面使用函数名,可以调用执行定义好的函数。
函数的参数
在python
中,函数是可以有函数所需要的一些参数的,这些参数传递到函数内部,在函数内部被使用,使函数的使用灵活性增加。
函数的类型大致分为三种:位置参数,默认参数,不定长参数。但是在这些参数之前,参数还有形参和实参的区别。
形参
在定义函数时,写在函数名 后面的括号中的变量,就是所谓的形参。形参的意义就相当于是占位,表名在函数内部,需要使用这些参数,来完成整个函数的程序执行;
实参
实参与形参其实是相辅相成的,实参是在函数调用时,实际传递给函数运用到啊函数体内部的变量。
在形参和实参之后,才有的位置参数,默认参数和不定长参数的划分。
位置参数
每一个 位置参数都相当于一个已经挖好的坑,再向函数传递参数的时候,根据每一个参数的位置,将传递的数值按顺序依次填到坑里,放到函数内部进行调用。
def search_football_player(gender, age):
if gender == "女":
if 15 <= int(age) <= 22:
return 0
return 1
return 2
search_football_player("男", 18)
上述的例子就是用了位置参数来调用函数。如果在函数调用时,传递的第一个参数是一个int
数字,那么会导致整个函数在运行时直接报错。所以位置参数需要严格与形参一一对应。
默认参数
默认参数是在 函数定义的时候,直接在函数名后的括号中直接定义了一个参数,并给出这个参数的参数值,这种参数就是默认参数。
默认参数有一个特点:就是在调用函数时,如果给这参数传递了数据,那么就使用调用时传递的数据进入函数体内部,如果没有传递数据,那么就使用定义时默认的参数值,进入函数体内部。
def index(age, name="Tom"):
print(age)
print(name)
index(18) # 18,Tom
index(18, "Jack") # 18,Jack
在上述例子中,调用了两次函数。第一次调用时 ,只传递了一个18,这个参数被形参age
捕获到,而由于没有向形参name
传递参数,所以形参name
最后的值就是默认值Tom
;
而在第二次调用时,向函数中传递了两个参数,这样一来由于向默认参数name
传递了参数,所以name
的默认值就被传递的值覆盖了,打印出来的就是Jack
。
不定长参数
不定长参数 有两种,分别是: *args
和 **kwargs
。
不定长参数的作用,就是当不知道函数具体需要传递多少个参数时,使用不定长参数,不定长参数能够接受多个参数。
*args
*args
接受的参数,在返回时会将它接收到的参数组成一个元组形式返回。
def index(*args):
print(arg)
index(10,20,30) # (10,20,30)
**kwargs
**kwargs
这种不定长参数,会将一切属于**kwargs
的参数数值,组合成一个字典的形式。
def index(**kwargs):
print(kwargs)
index(a=1,b=2) # {"a":1,"b":2}
但是需要注意一点:**kwargs
所捕获的参数,一定是关键字参数,也就是类似a=1
这样的参数,否则是不会被**kwargs
所捕获到的。
上述的所有类型的参数,在传递的时候,有一定的顺序:位置参数 --> *args --> 默认参数 --> **kwargs
。在调用函数的时候,python
会严格按照这个顺序来传递参数。
return
关键字
return关键字是只能使用在函数内部的一个关键字。
return
的作用大致有两个:一个是当函数运行到某种程度,达成某种条件,来结束函数的运行;另一个就是可以在return
后面跟上一个或是多个数据,在函数结束将这些数据返回,这个返回的数据可以使用一个变量进行接收,常用来在其他函数内部调用另外的函数以获取到对应的返回值,充当变量使用。
return
如果后面跟的有数据,那么调用接收时得到的就是这个数据;如果return
后面没有跟数据,那么调用接收时得到的就是None
。
def index():
print(123)
return
res = index()
print(res)
"""
123
None
这是因为调用 函数时,函数内部的代码执行,打印了123,但是因为函数没有返回值,所以在使用变量接收时,接收到的就是一个None
"""
return
可以返回任意类型的数据,但是如果返回的数据有多个,而且是以逗号链接的多个字符串,那么最后在调用函数并接受函数返回值时,得到的将会是一个元组类型的数据。
def index(a,b,c):
return a,b,c
res = index(10,20,30)
print(res) # (10,20,30)
当然,如果是这种情况的返回值,也可以多个数据来接收返回值,那么最后获得多个数据。
def index(a,b,c):
return a,b,c
res1,res2,res3 = index(10,20,30)
print(res1) # 10
print(res2) # 20
print(res3) # 30