zoukankan      html  css  js  c++  java
  • 第十章

    day 10

    第十章

    1、函数进阶:

    def eat(a,b,c,d,e,f)
    	print(a,b,c,e,f)
    eat("麻辣烫","大烧饼","大煎饼","大腰子","韭菜","羊蝎子")
    

    如何解决参数数量太多?

    (1)动态位置参数:

    • def eat(*args):    # 函数的定义阶段 *聚合(打包)    
          print(args)    # tuple    
          print(*args)   # 函数体中的 *    打散(解包)
      eat("麻辣烫","大烧饼","大煎饼","大腰子","韭菜","羊蝎子")
      
    • def eat(a,b,*c):       #位置参数 > 动态位置参数
          print(a)    
          print(b)    
          print(c)     # tuple
      eat("面条","米饭","馒头","大饼")
      
    • def eat(a,b,*args,d=2,**c):  # 位置参数 > 动态位置参数 > 默认参数 > 动态默认参数   
          print(a)    
          print(b)   
          print(d)    
          print(args)     # tuple  
          print(c)        # dict
      eat("面条","米饭","大烧饼","大煎饼",a1=1,b1=2)        # 位置 > 关键字
      
    • def eat(*args,**kwargs):  # (万能传参)   
          print(args) # tulpe    
          print(kwargs) #
          lst = [1,23,4,6,7]
          dic = {"key1":1,"key2":3}应用场景
       eat(lst,dic)
       eat(*lst,**dic) # eat(1,23,4,6,7,"key1"=1,"key2"=2)
      
    • 总结:

      1. *args(聚合位置参数)大家伙都用的名字,可以进行修改但是不建议修改
      2. **kwargs(聚合关键字参数)大家伙都用的名字,可以进行修改但是不建议修改
        • 函数的定义阶段 * 都是聚合
        • 函数体中*就是打散 * args 将元组进行打散,** kwargs将字典的键获取

    (2)形参:

    1. 位置参数

      动态位置参数:先执行位置参数,位置参数接受后额外的参数由动态位置参数进行接受,获取的是一个元组

    2. 默认参数

      动态关键字参数(默认):先执行默认参数,默认参数额外后的由默认进行接受,获取的是一个字典

      实参和函数体:

      • *打散
      • **实参时能够使用

    2、函数的注释:

    def a(a:int,b:int):  
        """求和    
        :param a: int 
        :param b: int  
        :return:  int 
        """    
        return a + b
    def b(a:int,b:int):  
        """求差   
        :param a: int  
        :param b: int  
        :return:  int   
        """   
        return a - b
    
    1. 函数名. __ doc __ 查看函数的注释
    2. 函数名. __ name __ 查看函数的名字

    3、命名空间

    1. 内置空间:python解释器自带的空间

    2. 全局空间:py文件中顶个写的就是全局空间

    3. 局部空间:函数体中就是局部空间

      1. 加载顺序:

        • 内置空间

        • 全局空间

        • 局部空间

          def func():
              a = 1
              print(a)
          func()
          
      2. 取值顺序:

        • 局部空间

        • 全局空间

        • 内置空间

          a = 10
          def func():
              print(a)
          func()
          
    4. 作用域:

      • 全局作用域:全局+内置
      • 局部作用域:局部

    4、函数嵌套:

    不管在什么位置,只要是函数名()就是在调用一个函数

    • 混合嵌套:

      def f1():
          print(11)
      def f2():
          print(22)
          f1()
      def f3():
          print(33)
          f1()
      def run():
          f3()
          f2()
          f1()
      run()
      
      def foo():
          a = 10
          def f1(b):
              c = b
              def foo(c):
                  print(c)
                  print(foo.__doc__)
              foo()
              print(b)
          f1()
          print(a)
      foo(25)
              
      

    5、global 只修改全局

    6、nonlocal: 只修改局部,修改离nonlocal最近的一层,上一层没有继续向上上层查找,只限在局部

    a = 10
    def func():
        global a
        a = a - 6
        print(a)
    print(a)
    func()
    print(a)
    
    a = 100
    def func():
        b = 10
        def foo():
            b = a
            def f1():
                nonlocal b
                b = b + 5
                print(b)
        	f1()
        	print(b)
        foo()
        print(b)
    func()
    print(a)
     
         
    

    enumerate() 默认从0开始数,第一个参数是可迭代对象,第二个对象是起始值

  • 相关阅读:
    asp.net core 3 WebApi System.Text.Json 返回数据配置
    linux 版本
    netcore HttpClient Post 提交数据
    mysql information_schema 常用命令
    linux 发布console 控制台命令
    mysql 创建数据库脚本
    C# 两个 List 数组 元素是否相同 数组相等
    windows 安装redis64
    阿里云 linux 安全组
    linux 安装redis
  • 原文地址:https://www.cnblogs.com/yuancw/p/11503751.html
Copyright © 2011-2022 走看看