返回顶部

函数二 10

  1. 如何在工作中不让别人看出你是培训出来的?

    • 第一天环境安装等等,小白各种问。
    • 项目需求不清晰,也不敢问。
    • 我们6个月一定要学会自主学习,自己解决问题的能力。
  2. 形参角度:

    • 万能参数。
    • *的魔性用法。
    万能参数
    def eat(a,b,c,d):
    	print('我请你吃:%s,%s,%s,%s' %(a,b,c,d))
    
    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,3,4,5))
    
    
    **kwars
    函数定义时: **将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwars
    def func(**kwars):
    	print(**kwars)
    func(name='holting',age=19,sex='男')
    
    万能参数 : *args **kwargs
    
    def func(*args,**kwargs)
    	print(args)
    	print(kwargs)
    func()
    print()
    
    在函数调用时,*代表打散。
    def func(*args,**kwargs):
    	print(args)
    	print(kwargs)
    
    func(*[1,2,3],*[22,33])#func(1,2,3,22,33)
    #func(*'fffdfsf',*'sfafef')
    func(**{'name':'holting',**{'age':19}})#()   {'name': 'holting', 'age': 19}
    
    
    • 仅限关键字参数(了解)

    • 形参的最终顺序。

      形参角度的参数的顺序
      *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,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)
      
      # 形参角度第四个参数:仅限关键字参数 (了解)
      
      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='女',name='Alex',age=80,c='666')
      
      # 形参角度最终的顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs
      
  3. 名称空间

    1. 全局名称空间 :py文件(除去函数,类的内部的)的变量,函数名与函数内存地址关系。

    2. 局部名称空间(临时名称空间):存放的函数内部的变量与值的对应关系。

      • 加载顺序,取值顺序。

        #名称空间;命名空间。
        
        # a = 1
        # b = 2
        # def func():
        #     f = 5
        #     print(f)
        # c = 3
        # func()
        
        # 内置名称空间:python源码给你提供的一些内置的函数,print input
        # print(666)
        # python分为三个空间:
            # 内置名称空间(builtins.py)
            # 全局名称空间(当前py文件)
            # 局部名称空间(函数,函数执行时才开辟)
            
        加载顺序;
        内置名称空间-->全局名称空间 --> 局部名称空间(函数执行时)
        # def func():
        #     pass
        # func()
        # a = 5
        # print(666
        
        取值顺序(就近原则)单向不可逆
        即LEGB原则
        input = 'holting'
        def func():
        	input ='太白'
        	print(input)
        func()
        
        # (从局部找时)局部名称空间  ---> 全局名称空间  --->  内置名称名称空间
        
    3. 作用域。

      作用域:
      两个作用域:
      	全局作用域:内置名称空间 全局名称空间
      	局部作用域; 局部名称空间
      
      局部作用域可以应用全局作用域的变量
      # 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 func():
          count = 1
          def inner():
              count += 1#使用可以但不能改变
              print(count)
          inner()
      func()
      
  4. 函数的嵌套(高阶函数)

    # 例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)
    
    
    # 例3:
    def fun2():
        print(2)
    
        def fun3():
            print(6)
    
        print(4)
        fun3()
        print(8)
    
    print(3)
    fun2()#当调用函数时在内部执行完print(2)后,下一步def fun3()不执行,
    print(5)#直到在函数fun2中内部遇到fun3()时,再返回调用
    
    
    # glbals() locals()
    
  5. 内置函数 glbals() locals()

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

posted @ 2020-07-02 22:00  holting  阅读(77)  评论(0编辑  收藏  举报