zoukankan      html  css  js  c++  java
  • 函数相关

    函数

    定义函数

    #定义一个函数
    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为闭包
      
    • 闭包的应用

      • 设计函数的模块
  • 相关阅读:
    使用yield实现一个协成
    串讲-Python基础练习
    Linux练习
    列表生成式
    Jupyter Notebook的快捷键帮助文档
    mysql字段类型
    爬取12306火车票信息
    【Lodop】02 C-Lodop手册阅读上手
    【Lodop】01 Lodop手册阅读上手
    【Redis】06 事务
  • 原文地址:https://www.cnblogs.com/liliudong/p/9572739.html
Copyright © 2011-2022 走看看