函数的进阶

  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,3,4,5,6,7))
      
      # tu1 = (1, 2, 3, 4, 5, 6, 7)
      # count = 0
      # for i in tu1:
      #     count += i
      # print(count)
      
      # **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])  # func(1,2,3,22,33)
      # func(*'fjskdfsa',*'fkjdsal')  # func(1,2,3,22,33)
      func(**{'name': '太白'},**{'age': 18})  #func(name='太白',age='18')
    • 仅限关键字参数(了解)。
    • 形参的最终顺序。
      # 形参角度的参数的顺序
      # 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)
      
      # 形参角度第四个参数:仅限关键字参数 (了解)
      
      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
    1. 名称空间。
      1. 全局名称空间,局部........

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

      1. 加载顺序,取值顺序。

        #名称空间;命名空间。
        
         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)
        python
        # 加载顺序:
        # 内置名称空间 ---> 全局名称空间  ----> 局部名称空间(函数执行时)
        # def func():
        #     pass
        # func()
        # a = 5
        # print(666)
        
        # 取值顺序(就近原则) 单向不可逆
        # LEGB原则
        # input = '太白金星'
        def func():
            # input = 'alex'
            print(input)
        # func()
        
        # (从局部找时)局部名称空间  ---> 全局名称空间  --->  内置名称名称空间
        
        
        # input = '太白金星'
        # def func():
        #     input = 'alex'
        #
        # func()
        # print(input)
      2. 作用域。
        # 作用域:
        # 两个作用域:
        # 全局作用域 :内置名称空间 全局名称空间
        # 局部作用域:局部名称空间

        #  局部作用域可以引用全局作用域的变量
        # 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()
    2. 函数的嵌套(高阶函数)。
      # 例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(5)
      
      
      # glbals() locals()
    3. 内置函数 globals locals
      """
      本文件:研究内置函数:globals locals
      """
      a = 1
      b = 2
      def func():
      name = 'alex'
      age = 73
      print(globals()) # 返回的是字典:字典里面的键值对:全局作用域的所有内容。
      print(locals()) # 返回的是字典:字典里面的键值对:当前作用域的所有的内容。
      # print(globals()) # 返回的是字典:字典里面的键值对:全局作用域的所有内容。
      # print(locals()) # # 返回的是字典:字典里面的键值对:当前作用域的所有的内容。
      func()

    4. 关键字:nonlocal global。

转载于:https://www.cnblogs.com/940531gbh/articles/11297503.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值