• Python函数


    Python函数

    函数

    数学定义

    • y=f(x), y是x的函数,x是自变量。y=f(x0,x1,…xn)

    Python函数

    • 由诺干语句组成的语句块、函数名、参数列表构成,它是组织代码的最小单元
    • 能完成一定的功能
    • 是一个可调用对象,可以使用callable(函数名)判断该名称是否是一个可调用对象

    函数的作用

    • 结构化编程对代码的最基本封装,一般按照功能组织一段代码
    • 封装的目的为了复用,减少冗余代码
    • 代码更加简洁美观、可读易懂

    函数的分类

    • 内建函数,如:max()、reversed()等
    • 库函数,如math.ceil()
    • 自定义函数,使用def等关键字定义

    函数定义

    def 函数名(参数列表):
        函数体(代码块)
        return 返回值
    • 函数名就是标识符。命名要求和标识符命名要求一样。
    • 语句块必须缩进,约定4个空格
    • Python的函数如果没有return语句,那么默认会返回None值
    • 定义中的参数列表成为形式参数,只是一种符号表达(标识符),简称形参

    函数调用

    • 函数定义,只是在内存中声明了一个函数。需要调用才能执行该函数
    • 调用方法:函数名加上小括号,如果有必要参数,需要在括号内写上参数
    • 调用时写的参数是实际参数,是实实在在传入的值,简称实参
    def add(x,y):     #函数定义
        result = x + y   #函数体
        return result   #返回值
    
    out = add(4,5)    #函数调用,可能有返回值,让变量接收这个值
    print(out)       #print函数加上括号也是调用,out是实参

    上面代码解释:

    1. 定义一个函数add,函数名是add,只能接受2个参数
    2. 该函数计算的结果,通过返回值返回,需要return语句
    3. 调用时,通过函数名add后加2个参数,通过返回值可使用变量接收
    4. 函数名也是标识符
    5. 返回值也是值
    6. 定义需要在调用之前,就是说调用时,已经被定义过了,否则抛出NameError异常
    7. 函数是可调用对象,Callable(add)返回True

    函数参数

    • 参数是调用函数时传入的。参数要和函数定义的形参想匹配(可变参数例外)
    • 位置参数:按照参数定义顺序传入实参

    关键字参数:

    • 使用形参的名字来传入实参的方式。如果使用了关键字参数,那么传参顺序就可以和定义顺序不同
    • 例如: def f(x,y,z)调用使用f(x=1,z=2,y=3)

    位置参数:

    • 按照参数定义顺序传入实参
    • 例如: def f(x,y,z)调用使用f(1,3,5)

    混合调用

    • 如果使用位置参数和关键字参数混合调用。那么位置参数必须要在关键字参数之前传入,参数不能重复

    例:

    def add(x,y,z):
        return x+y+z
    #使用位置参数调用
    add(1,2,3) #此时形参x=1,y=2,z=3的方式按照顺序获取实参
    #使用关键字参数调用
    add(z=1,y=3,x=5) #直接指定形参的值调用函数
    #形参和实参混合调用
    add(4,z=5,y=3) ##正确, #错误写法add(4,x=3,z=8)

    形参缺省值

    • 在定义函数的形参时,给形参附加一个值。

    例:

    #4为函数形参x的默认值,5为函数形参y的默认值
    def add(x=4,y=5):
        return x+y
    • 注意:如果定义函数时,有缺省值的参数必须放在没有缺省值参数的后面。

    例:

    def add(x,y=5):
        return x+y

    作用

    • 参数的默认值可以在未传入足够的实参时,对没有给定的参数赋值即为默认值
    • 参数非常多的时候,并不需要用户每次都输入所有的参数,简化函数调用

    函数的可变参数

    可变位置参数

    • 一个形参可以匹配任意个参数。会收集多个实参组成一个tuple
    • 注意:
    1. 可变位置参数必须要在位置参数后面
    2. 可变位置参数不能使用关键字传参

    例:

    def sum(*args):
        sum = 0
        for x in args:
            sum += 1
        return sum
    print(sum(1,3,5))

    可变关键字参数

    • 表示方法:【**变量名】
    • 形参前使用**符号,表示可以接收多个关键字参数
    • 收集的实参名称和值组成一个字典
    • 注意:
    1. 可变关键字参数,必须要在所有参数最后面(即,参数,可变参数,可变位置参数)
    ##可变关键字传参定义
    def showname(**kwargs):
        for k,v in kwargs.items():
            print("{}:{}".format(k,v))
    ##调用
    showname(a=1,b=2,c=3)

    混合使用

    • 混合使用参数的时候,可变关键字参数要放到参数列表的最后,普通参数需要放到参数列表的前面,关键字参数 要放在可变位置参数和可变关键字参数之间
    • 混合定义参数顺序:普通参数,缺省值参数,可变位置参数,关键字参数(keyword-only)(可带缺省值),可变关键字参数
    • 混合定义参数传参顺序:位置参数在关键字参数前面
    • 注意:混合传参时,可变关键字参数名称不能与普通参数名称相同。

    例:

    def showname(name,sex=6,*args,b=15,c,**kwargs):
        print("name={}
    sex={}
    args={}
    b={}
    c={}
    kwargs={}".format(name,sex,args,b,c,kwargs))
    ##调用
    showname(1,5,4,5,b=23,c=34,hh=23)

    参数解构

    • 在集合类型前使用*或者**,把集合类型的解构解开,提取所有元素作为函数的实参
    • 非字典类型使用*解构成位置参数
    • 字典类型使用**解构成关键字参数
    • 提取出来的元素数目要和参数的要求匹配,也要和参数的类型匹配

    例:

    def add(x,y):
        return x+y
    add(*[4,5]) #相当于add(4,5)
    add(*{'x':4,'y':5}) #相当于add("a","b")
    add(**{"x":4,"y":5}) #等价于add(x=4,y=5),其中两个星号表示两层解构

    函数返回值

    • Python函数使用return语句返回“返回值”
    • 所有函数都有返回值,如果没有return语句,隐试调用return None
    • return语句并不一定是函数语句块中最后一条语句
    • 一个函数可以存在多个return语句,单是只有一条可以被执行。如果没有一条return语句被执行到,就会隐试调用return None
    • 如果函数执行了return语句,函数就会返回,当被执行的return语句之后的其他语句就不会被执行了
    • return的作用:结束函数调用、返回“返回值”
    • return 不能同时返回多个值

    例:

    def showvalue():
        return 1,2,3  #这里实际返回的是将1,2,3封装成一个元组tuple

    总结

    • 有位置可变参数和关键字可变参数
    • 位置可变参数在形参前使用一个星号*,关键字可变参数使用两个星号**
    • 位置可变参数和关键字可变参数都可以手机若干个实参,位置可变参数收集形成一个tuple,关键字可变参数收集成一个dict
    • 混合使用参数的时候,可变关键字参数要放到参数列表的最后,普通参数需要放到参数列表的前面,关键字参数 要放在可变位置参数和可变关键字参数之间
    • 混合定义参数传参顺序:位置参数在关键字参数前面
  • 相关阅读:
    Palindrome Linked List 解答
    Word Break II 解答
    Array vs Linked List
    Reverse Linked List II 解答
    Calculate Number Of Islands And Lakes 解答
    Sqrt(x) 解答
    Find Median from Data Stream 解答
    Majority Element II 解答
    Binary Search Tree DFS Template
    188. Best Time to Buy and Sell Stock IV
  • 原文地址:https://www.cnblogs.com/fjjj/p/12688229.html
Copyright © 2020-2023  润新知