zoukankan      html  css  js  c++  java
  • 万能参数,命名空间,函数的嵌套

    万能参数

    *的魔性用法

    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()
    
  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/wang-xing-hao/p/10877939.html
Copyright © 2011-2022 走看看