zoukankan      html  css  js  c++  java
  • 【python】函数相关知识

    函数定义规范:
    def test(a):
        """
        返回输入字符
        :param a:
        :return: a
        """
        return a
    
    
    # 函数定义规范:
    # def:定义函数的关键字
    # test:函数名
    # ():可定义形参
    #""" """: 函数介绍
    #return:定义返回值
    

     

    函数参数

    形参:在定义函数和函数体的时候使用的参数,目的是在函数调用的时候接受实参(形参和实参要一一对应)
    实参:调用函数传给函数的参数,可以是常量、变量、表达式、函数
    实参:大概分为位置参数、默认参数、关键字参数、参数组

    调用函数实参使用标准: 形参和实参要一一对应;关键字参数一定要放在位置参数的后面;关键字参数调用,位置无需固定
    def test(x,y):
        print("y= %s"%y,end=",")
        print("x= %s"%x)
    
    test(3,4)  ##纯位置参数调用
    #>>>y= 4,x= 3
    test(y=5,x=3)##纯关键字参数调用,可以无序
    #>>>y= 5,x= 3
    test(3,y=5)
    #>>>y= 5,x= 3
    test(x=3,4)   ###这样调用会报错,因为关键字参数一定要放在位置参数的后面
    #>>>报错
    test(3,x=4) ##这样也会报错,相当于位置参数给形参x赋值了,然后关键字参数又给x赋值了
    #>>>TypeError: test() got multiple values for argument 'x'
    
    形参使用标准: 必须是最先为位置参数,然后为默认参数,最后为参数组(先**args,再**kwargs)
    def test(x,y,z=3,*args,**kwargs):
        print("x= %s"%x,end=",")
        print("y= %s"%y,end=",")
        print("z= %s" %z)
    
    test(1,3,4)
    #>>>x= 1,y= 3,z= 4
    

     默认参数和参数组调用

    默认参数:既可以用位置参数调用,也可以用关键组参数调用
    *args:把N个位置参数转换为元组形式
    有两种方法调用:1.接受一般位置参数
    2.*和数组|元组|集合进行搭配
    **kwargs:把N个关键字参数转换为字典形式
    有两种方法调用:1.接受一般关键字参数
    2.*和字典进行搭配
     
    def test(x,y,z=3,*args,**kwargs):
        print("x= %s"%x,end=",")
        print("y= %s"%y,end=",")
        print("z= %s" %z,end=",")
        print(args,end=",")
        print(kwargs)
    
    """
    默认参数即可以用位置参数调用,也可以用关键组参数调用
    """
    test(1,3,4)
    #>>>xx= 1,y= 3,z= 4,(),{}
    test(1,3,z=5)
    #>>>x= 1,y= 3,z= 5,(),{}
    
    """
    *args:把N个位置参数转换为元组形式
          有两种方法调用:1.接受一般位置参数
                      2.*和数组|元组|集合进行搭配
    """
    test(1,2,3,4,5,6)
    #>>>x= 1,y= 2,z= 3,(4, 5, 6),{}
    test(1,2,3,*(4,5,6))
    #>>>x= 1,y= 2,z= 3,(4, 5, 6),{}
    test(1,2,3,*[4,5,6])
    #>>>x= 1,y= 2,z= 3,(4, 5, 6),{}
    test(1,2,3,*{4,5,6})
    #>>>x= 1,y= 2,z= 3,(4, 5, 6),{}
    
    
    """
    *args:把N个关键字参数转换为字典形式
          有两种方法调用:1.接受一般关键字参数
                      2.*和字典进行搭配
    """
    test(1,2,3,m=4,n=5)
    #>>>x= 1,y= 2,z= 3,(),{'m': 4, 'n': 5}
    test(1,2,3,**{"m":4,"n":5})
    #>>>x= 1,y= 2,z= 3,(),{'m': 4, 'n': 5}
    关键字参数调用无序性:
    def test(x,y,z=3,*args,**kwargs):
        print("x= %s"%x,end=",")
        print("y= %s"%y,end=",")
        print("z= %s" %z,end=",")
        print(args,end=",")
        print(kwargs)
    
    test(1,2,m=4,n=5,z=6)
    #>>>x= 1,y= 2,z= 6,(),{'m': 4, 'n': 5}
    

    返回值:  

    返回值数为0时,返回None;
    返回值数为1时,返回object;
    返回值数>1时,返回元组

    def test1(x):
        pass
    
    def test2(x):
        return x
    
    def test3(x,y,z):
        return x,y,z
    
    
    print(test1(1))
    #>>>None
    print(test2(1))
    #>>>1
    print(test3(True,"hello",3))
    #>>>(True, 'hello', 3)
    
    高阶函数:

    一个函数可以接受另一个函数作为参数。
    a:把一个函数名当做实参传给另一个函数
    b:返回值中包含函数名
    def add(x, y, f):
        return f(x) + f(y)  ##理解f为函数名
    #当我们调用add(-5, 6, abs)时,参数x,y和f分别接收-5,6和abs
    
    print(add(-5,6,abs))  ##调用时直接使用函数名调用
    #>>>11
    

      

    递归函数:
    递归函数特点:
    1.必须有一个明确的结束条件
    2.每次进入更深的递归时,问题规模相比上次递归应有所减少
    3.递归效率不高
    def test(n):
        if n>0:
            n = n // 2
            print(n)
            return test(n)
        return "over"
    
    print(test(10))
    

      





  • 相关阅读:
    server2012/win8 卸载.net framework 4.5后 无法进入系统桌面故障解决【转】
    Entity Framework中AutoDetectChangesEnabled為false時更新DB方法
    git常用命令备忘录
    MSSQL日誌傳輸熱備份注意事項
    c#生成唯一编号方法记录,可用数据库主键 唯一+有序
    Angular 隨記
    使用dumpbin命令查看dll导出函数及重定向输出到文件【轉】
    UML类图与类的关系详解【转】
    知識隨記
    session不会过期
  • 原文地址:https://www.cnblogs.com/paulwinflo/p/5825573.html
Copyright © 2011-2022 走看看