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
posted @ 2020-06-08 22:23  康帅博丶  阅读(71)  评论(0编辑  收藏  举报