zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    JDBC的PreparedStatement是什么?
    ArrayList、LinkedList、Vector 的区别。
    final finally finalize区别
    面向对象三大特性
    JDBC访问数据库的基本步骤是什么?
    报表中的地图怎么做?
    报表工具如何实现“点击查看原图”
    玩转报表排名之组内排名
    动态隐藏行
    OUT 了??还没玩转报表超链接
  • 原文地址:https://www.cnblogs.com/Pilaoban/p/13068974.html
Copyright © 2011-2022 走看看