• 万能参数,命名空间,函数的嵌套


    万能参数

    *的魔性用法

    1. #万能参数
      可以接受所有的实参。
      万能参数:*args,约定俗称:arge
      函数定义时,*代表聚合。他将所有的位置参数聚合成一个元祖,赋值给了args。
      
      def eat(*args):
          print(args)
          print('我请你吃:%s,%s,%s,%s,%s,%s'%args)
          
      eat('蒸羊羔','蒸熊掌','蒸鹿影','烧花鸭','烧雏鸡','烧子鹅')
      
      #写一个函数:计算你传入函数的所有数字的和。
      def func(*args):
          count=0
          for i in args:
              count+=i
          return count
      print(func(1,2,3,4,5))
      
      **kwargs
      函数的定义时:**将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs
      def func(**kwargs):
          print(kwargs)
          
      func(name='alex',age=73,sex='laddyboy')
      
    2. 万能参数:*args,**kwaygs,
      def func(*args,**kwargs):
          print(arhs)
          print(kwargs)
      func()
      
      #在函数调用时,*代表打散。**代表打散字典
      def func(*args,**kwargs):
          print(args)
          print(kwargs)
          
      func(*[1,2,3,4],*[22,33]) #func(1,2,3,22,33)
      func(**{'name':'太白'},**{'age':18}) #func(name='太白',age='18')
      
      
    3. 仅限关键字参数(了解)

    4. 形参的最终顺序

      1. #形参角度的参数顺序
         *args的位置
        def func(*args,a,b,sex='男'):
        	print(a,b)
        func(1,2,3,4)
        #args得到实参的前提,sex必须被覆盖
        def func(a,b,*args,sex='男'):
            print(a,b)
            print(sex)
            print(args)
        func(1,2,3,4,5,sex='女')
        
        #**kwargs 位置
        def func(a,b,*args,sex='男',**kwargs):
            print(a,b)
            print(sex)
            print(args)
            print(kwargs)
        func(1,2,3,4,5,sex='女',name='alex',age=80)
        
        #形参角度第四个参数:仅限关键字参数(了解)
        def func(a,b,*args,sex='男',c,**kwargs):
            print(a,b)
            print(sex)
            print(args)
            print(c)
            print(kwargs)
        func(1,2,3,4,5,sex="女",c='666',name='alex',age=80)
        #形参角度最终的顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs
        
        
    5. 名称空间

      1. 全局名称空间

      2. 局部名称空间

      3. 加载顺序,取值顺序

        #命名空间。
        #python分为三个空间
        	#内置名称空间(builtins.py)
            #全局名称空间(当前py文件)
            #局部名称空间(函数,函数执行时才开辟)
        #加载顺序:
        #内置命名空间--->全局名称空间--->局部名称空间(函数执行时)
        #取值顺序(就近原则)单项不可逆
        LEGB原则
        def func():
            print(input)
        func()
        
        #(从局部找时)局部名称空间--->全局名称空间--->内置名称空间
        
        input = '太白金星'
        def func():
            input = 'alex'
            
            
        func()
        print(input)
        

    作用域。

    #两个作用域;
    	#全局作用域:内置名称空间
        #局部作用域:局部名称空间
        
    局部作用域可以引用全局作用域的变量
    date = '星期五'
    def func():
        a = 666
        print(date)
    print(a)
    func()
    print(a)
    
    局部作用域不能改变全局变量。
    count = 1
    def func():
        count += 2
        print(count)
    func()	# local variable 'count' referenced before assignment
    局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了你对一个变量进行修改
    解释器会认为你在局部已经定义过这个去不得变量了,他就从局部找这个局部变量,报错了。
    
    #可以使用,不能修改
    def func():
        count = 1
        def inner():
            print(count)
        inner
    func()
    

    函数的嵌套(高阶函数)

    def func1():
        print('in func1')
        print(3)
        
    def func2():
        print('in func2')
        print(4)
        
    func1()
    print(1)
    func2()
    print(2)
    #in func1 3 1 in func2 4 2
    
    def func1():
        print('in func1')
        print(3)
        
    def func2():
        print('in func2')
        func1()
        print(4)
        
    print(1)
    func2()
    print(2)
    
    def func2():
        print(2)
        
        def func3():
            print(6)
            
         print(4)
        fun3c()
        print(8)
        
    print(3)
    fun2()
    print(5)
    

    内置函数 globals locals

    a = 1
    b = 2
    def func():
        name = 'alex'
        age =73
        print(globals())#返回的是字典:字典里面的键值对:全局作用域的所有内容
        print(locals())#返回的是字典:字典里面的键值对:当前作用域的所有内容
    print(globals())#返回的是字典:字典里面的键值对,全局作用域的所有内容
    print(locals())#返回的是字典:字典里面的键值对:当前作用域的所有内容
    func()
    
  • 相关阅读:
    .NET基础篇——利用泛型与反射更新实体(ADO.NET Entity Framework)(转)
    反射奥秘
    ubuntu 安装chmsee
    ubuntu安装sublime,新立得
    Ubuntu 升级VisualBox后无法启动 Kernel driver not installed
    ubuntu安装stardict并导入词典
    PHP运行模式
    Ubuntu ibus输入法图标消失的解决办法
    MySQL 获得当前日期时间(以及时间的转换)
    mysql索引之or条件
  • 原文地址:https://www.cnblogs.com/wang-xing-hao/p/10877939.html
Copyright © 2020-2023  润新知