ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

day 10

2020-04-07 13:02:19  阅读:234  来源: 互联网

标签:count 10 args func kwargs print day def


day10:

一、今日内容大纲:

  1. 形参角度:
    • 万能参数
    • *的魔性用法
    • 仅限关键字参数(了解)
    • 形参的最终顺序
  2. 名称空间:
    1. 全局名称空间,局部........
    2. 加载顺序,取值顺序
    3. 作用域
  3. 函数的嵌套(高阶函数)
  4. 内置函数 globals locals
  5. 关键字:nonlocal global

二、昨日内容回顾:

  • 函数是以功能为导向,减少重复代码,提高代码的可读性。

    def func()
    	函数体
    
  • 函数的调用:func()

  • 函数的返回值:return

    • 结束函数

      def func()
      	count = 1
      	while 1:
      		count += 1
      		print(count)
      		return  # 结束函数,循环也随之结束
      func()  # 2
      
    • return单个值:类型跟值相同

    • return多个值:元组类型

  • 函数的参数:

    • 实参角度:位置、关键字、混合。
    • 形参角度:位置、默认。

三、具体内容:

  1. 形参角度:

    • 万能参数

      def eat(a,b,c,d):
          print('我请你吃:%s,%s,%s,%s' %(a,b,c,d))
      
      eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭')
      
      def eat(a,b,c,d,e,f):
          print('我请你吃:%s,%s,%s,%s,%s,%s' %(a,b,c,d,e,f))
      
      eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭','烧雏鸡','烧子鹅')
      
      # 急需要一种形参,可以接受所有的实参,即万能参数。
      # *args, 约定俗称:args.
      # 函数定义时,*代表聚合。他将所有的位置参数聚合成一个元组,赋值给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,30,1))
      
      # **kwargs
      # 函数的定义时: ** 将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs.
      def func(**kwargs):
          print(kwargs)
      func(name='alex',age=73,sex='laddyboy')
      
      # 万能参数:*args, **kwargs,
      def func(*args,**kwargs):
          print(args)
          print(kwargs)
      func()
      print()
      
    • *的魔性用法

      # * **在函数的调用时,*代表打散。
      def func(*args,**kwargs):
          print(args) # (1,2,3,22,33)
          print(kwargs)
      
      func(*[1,2,3],[22,33])  # (1, 2, 3, [22, 33])
      func(*'fjs',*'fkj')  # ('f', 'j', 's', 'f', 'k', 'j')
      func(**{'name': '太白'},**{'age': 18})  # {'name': '太白', 'age': 18}
      
    • 仅限关键字参数(了解)

      # 位于*,**之间(c)
      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,6,7,sex='女',c='666',name='Alex',age=80)
      
    • 形参的最终顺序

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

      • 全局名称空间:

        整个文件里,变量与值,函数名与函数体的对应关系。

      • 局部(临时)名称空间:

        函数体里,变量与值的对应关系,随着函数的结束而消失。

      • 内置名称空间:

        python源码给你提供的一些内置的函数,print,input..

      • 加载顺序:

        内置名称空间 ---> 全局名称空间 ----> 局部名称空间(函数执行时)

      • 取值顺序:

        • 就近原则(LEGB原则),且单向不可逆。

        • (从局部找时)局部名称空间 ---> 全局名称空间 ---> 内置名称名称空间

          # 从局部找
          input = '太白金星'
          def func():
              # input = 'alex'
              print(input)
          func()
          
          #从全局找(全局-->内置)
          input = '太白金星'
          def func():
              input = 'alex'
          func()
          print(input)
          
    1. 作用域:

      • 全局作用域:内置名称空间,全局名称空间

      • 局部作用域:局部名称空间

        #  局部作用域可以引用全局作用域的变量
        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()  # 1
        
        def func():
            count = 1
            def inner():
                count += 1
                print(count)
            inner()
        func()  # local variable 'count' referenced before assignment
        
  3. 函数的嵌套(高阶函数)

    # 例1:
    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
    
    # 例2:
    def func1():
        print('in func1')
        print(3)
    
    def func2():
        print('in func2')
        func1()
        print(4)
    
    print(1)
    func2()
    print(2)
    # 1 in func2 in func1 3 4 2
    
    # 例3:
    def fun2():
        print(2)
    
        def fun3():
            print(6)
    
        print(4)
        fun3()
        print(8)
    
    print(3)
    fun2()
    print(5)
    # 3 2 4 6 8 5
    
  4. 内置函数 globals locals

    """
    本文件:研究内置函数:globals locals
    """
    a = 1
    b = 2
    def func():
        name = 'alex'
        age = 73
        print(globals())  # 返回的是字典:字典里面的键值对:全局作用域的所有内容。
        print(locals())  # 返回的是字典:字典里面的键值对:当前作用域的所有的内容。
    # print(globals())  # 返回的是字典:字典里面的键值对:全局作用域的所有内容。
    # print(locals())  # # 返回的是字典:字典里面的键值对:当前作用域的所有的内容。
    func()
    
  5. 关键字:nonlocal global

标签:count,10,args,func,kwargs,print,day,def
来源: https://www.cnblogs.com/sunzhijie/p/12652740.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有