zoukankan      html  css  js  c++  java
  • 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
    • 混合使用参数的时候,可变关键字参数要放到参数列表的最后,普通参数需要放到参数列表的前面,关键字参数 要放在可变位置参数和可变关键字参数之间
    • 混合定义参数传参顺序:位置参数在关键字参数前面
  • 相关阅读:
    POJ2253 Frogger
    搜索专题(复习)
    机器学习资料整理
    51nod 1873 初中的算术
    Canny检测理解和Matlab实现
    Floyd+限制路径步数(快速幂优化)
    bitset优化背包问题
    Educational Codeforces Round 44 (Rated for Div. 2)
    BZOJ 3224 SBT 普通平衡树
    本科课程大数据基础
  • 原文地址:https://www.cnblogs.com/fjjj/p/12688229.html
Copyright © 2011-2022 走看看