函数相关

函数

定义函数

#定义一个函数
def func():
   '''函数体'''
    return
  • 形参
  • 实参
  • 返回值
  • 函数体

参数

  • 没有参数
  • 一个参数
  • 多个参数 -必须先位置参数,在动态参数,再关键字参数 def func(n, *args, i=1)
    • 位置传参 -必须按照位置数量传实参

        def func(a, b):
            return a+b
        #调用函数
        print(func(1, 2))   #意思就是a = 1, b = 2
        #结果
        3
      
    • 关键字传参

      • 默认参数可以不传实参

      • 可以不按照顺序进行传实际参数

          def func(a, b=2):
              return a+b
          #调用函数
          print(func(1))  #这里只传入一个参数,另外一个参数默认为2
          #结果
          3
        
    • 动态参数

      • 参数名之前用*

      • 传进去是一个元组

      • 接受除了关键字参数的所有的参数

         def func(*args) # *必须有,args是变量可以更换
             for i in args
                 j += i
             return j
             #调用函数
             print(func(1, 2, 3, 4))  #这里传入多个实际参数值
             #结果 1+2+3+4
             10
        
      • 传入多个关键字参数 **kwargs

        • 传入的值是字典

            def func(**kwargs):
                for i in kwargs:
                    print(i.key(), i.value())
            #调用函数
            func(a=1, b=2, c=3)
            #结果
            a, b, c 1, 2, 3
          
      • 动态传参数技巧

        • 给实际参数加*

            li = [1, 2, 3, 4, 5]
            func(*li)   #将列表作为实际参数传入函数中
          

函数的注释

    def func():
        '''
        这里写注释
        函数的功能
        参数1:
        参数2:
        return值的类型
        '''

命名空间和作用域

  • 内置命名空间

    • python解释器自带的函数名,变量等
    • print, input, len, str, int, list, tuple
  • 全局命名空间

    • 程序自上而下执行加载至内存的变量
    • 放置我们自定义的变量名和函数名
  • 局部命名空间

    • 函数内部定义的变量名

    • 调用函数时才能产生这个内存空间,随着函数调用的结束,内存回收

            a = 1
            b = 2
            def test(a, b):
                a = 3
                b = 4
                print(a, b)
            c = test(b, a)
            print(c)
            #结果
            3, 4
            None
            # 说明局部变量优先调用
      
  • globle关键字 全局变量

  • nonlocal关键字 引用小局部的变量,向上寻找第一个接受的局部变量

    • 嵌套的内函数不能直接修改上层变量

嵌套和作用域链

        #套用示范一
        def max(a, b):
            return a if a>b else b
        
        def the_max(x, y, z):
            c = max(x, y)
            return max(c, z)
        #套用示范二
        def outer():
            def iner():
                print('iner')
            iner()

闭包

  • 一定是嵌套的函数

  • 内部函数一定要调用外部函数的变量

  • 闭包的调用上层变量会在程序终止之前存在内存里

          def func():
              a = 1
              def func2():
                  print(a)
              return func2    #闭包的通常调用方式
          #闭包的调用
          inn = func()
          inn()   
          
          #func2是闭包
          #闭包的查询和确认
          print(func2.__closure__)
          返回cell为闭包
    
  • 闭包的应用

    • 设计函数的模块
原文地址:https://www.cnblogs.com/liliudong/p/9572739.html