函数进阶

  1. 今日内容大纲

    1. 如何在工作中让别人看出你是自学的?

      • 第一天环境安装等等,小白各种问。

      • 项目需求不清晰,也不敢问。

    2. 形参角度:

      • 万能参数。

      • *的魔性用法。

      • 仅限关键字参数(了解)。

      • 形参的最终顺序。

    3. 名称空间。

      1. 全局名称空间,局部........

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

      3. 作用域。

    4. 函数的嵌套(高阶函数)。

    5. 内置函数 globals locals

    6. 关键字:nonlocal global。

  2. 昨日内容回顾作业讲解

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

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

      1  func()
      2  func()
      3  func()
    • 函数的返回值 return

      • 终止函数。

      • return 单个值:

      • return 多个值:(1,2,3,'alex')

    • 函数的参数:

      • 实参角度:位置参数,关键字参数,混合参数。

      • 形参角度:位置参数,默认参数。

       

  3. 今日内容

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

      • 第一天环境安装等等,小白各种问。

      • 项目需求不清晰,也不敢问。

      • 我们6个月一定要学会自主学习,自己解决问题的能力。

    2. 形参角度:

      • 万能参数。

      • *的魔性用法。

         1  # 万能参数。
         2  # def eat(a,b,c,d):
         3  #     print('我请你吃:%s,%s,%s,%s' %(a,b,c,d))
         4  #
         5  # eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭')
         6  7  # def eat(a,b,c,d,e,f):
         8  #     print('我请你吃:%s,%s,%s,%s,%s,%s' %(a,b,c,d,e,f))
         9  #
        10  # eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭','烧雏鸡','烧子鹅')
        11 12  # 急需要一种形参,可以接受所有的实参。#万能参数。
        13  # 万能参数: *args, 约定俗称:args,
        14  # 函数定义时,*代表聚合。 他将所有的位置参数聚合成一个元组,赋值给了 args。
        15 16  # def eat(*args):
        17  #     print(args)
        18  #     print('我请你吃:%s,%s,%s,%s,%s,%s' % args)
        19  #
        20  # eat('蒸羊羔', '蒸熊掌', '蒸鹿邑','烧花鸭','烧雏鸡','烧子鹅')
        21 22  # 写一个函数:计算你传入函数的所有的数字的和。
        23  # def func(*args):
        24  #     count = 0
        25  #     for i in args:
        26  #         count += i
        27  #     return count
        28  # print(func(1,2,3,4,5,6,7))
        29 30  # tu1 = (1, 2, 3, 4, 5, 6, 7)
        31  # count = 0
        32  # for i in tu1:
        33  #     count += i
        34  # print(count)
        35 36  # **kwargs
        37  # 函数的定义时: ** 将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs.
        38  # def func(**kwargs):
        39  #     print(kwargs)
        40  # func(name='alex',age=73,sex='laddyboy')
        41 42  # 万能参数:*args, **kwargs,
        43  # def func(*args,**kwargs):
        44  #     print(args)
        45  #     print(kwargs)
        46  # func()
        47  # print()
        48 49  # * **在函数的调用时,*代表打散。
        50  def func(*args,**kwargs):
        51      print(args) # (1,2,3,22,33)
        52      print(kwargs)
        53 54  # func(*[1,2,3],*[22,33])  # func(1,2,3,22,33)
        55  # func(*'fjskdfsa',*'fkjdsal')  # func(1,2,3,22,33)
        56  func(**{'name': '太白'},**{'age': 18})  #func(name='太白',age='18')
        57

         

      • 仅限关键字参数(了解)。

      • 形参的最终顺序。

         1  # 形参角度的参数的顺序
         2  # *args 的位置?
         3  # def func(*args,a,b,sex= ''):
         4  #     print(a,b)
         5  # func(1,2,3,4)
         6  # args得到实参的前提,sex必须被覆盖了。
         7  # def func(a,b,sex= '',*args,):
         8  #     print(a,b)
         9  #     print(sex)
        10  #     print(args)
        11  # func(1,2,3,4,5,6,7,)
        12 13  # def func(a,b,*args,sex= ''):
        14  #     print(a,b)
        15  #     print(sex)
        16  #     print(args)
        17  # func(1,2,3,4,5,6,7,sex='')
        18 19  # **kwargs 位置?
        20  def func(a,b,*args,sex= '',**kwargs,):
        21      print(a,b)
        22      print(sex)
        23      print(args)
        24      print(kwargs)
        25  # func(1,2,3,4,5,6,7,sex='',name='Alex',age=80)
        26 27  # 形参角度第四个参数:仅限关键字参数 (了解)
        28 29  def func(a,b,*args,sex= '',c,**kwargs,):
        30      print(a,b)
        31      print(sex)
        32      print(args)
        33      print(c)
        34      print(kwargs)
        35  # func(1,2,3,4,5,6,7,sex='',name='Alex',age=80,c='666')
        36 37  # 形参角度最终的顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs
        38  
    3. 名称空间。

      1. 全局名称空间,局部........

       

       

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

       

       

       

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

         

         1  #名称空间;命名空间。
         2  3  # a = 1
         4  # b = 2
         5  # def func():
         6  #     f = 5
         7  #     print(f)
         8  # c = 3
         9  # func()
        10 11  # 内置名称空间:python源码给你提供的一些内置的函数,print input
        12  # print(666)
        13  # python分为三个空间:
        14      # 内置名称空间(builtins.py)
        15      # 全局名称空间(当前py文件)
        16      # 局部名称空间(函数,函数执行时才开辟)
        17 18  # 加载顺序:
        19  # 内置名称空间 ---> 全局名称空间  ----> 局部名称空间(函数执行时)
        20  # def func():
        21  #     pass
        22  # func()
        23  # a = 5
        24  # print(666)
        25  python
         
         1 # 加载顺序:
         2  # 内置名称空间 ---> 全局名称空间  ----> 局部名称空间(函数执行时)
         3  # def func():
         4  #     pass
         5  # func()
         6  # a = 5
         7  # print(666)
         8  9  # 取值顺序(就近原则) 单向不可逆
        10  # LEGB原则
        11  # input = '太白金星'
        12  def func():
        13      # input = 'alex'
        14      print(input)
        15  # func()
        16 17  # (从局部找时)局部名称空间  ---> 全局名称空间  --->  内置名称名称空间
        18 19 20  # input = '太白金星'
        21  # def func():
        22  #     input = 'alex'
        23  #
        24  # func()
        25  # print(input)

         

      2. 作用域。

         1  # 作用域:
         2  # 两个作用域:
         3      # 全局作用域 :内置名称空间 全局名称空间
         4      # 局部作用域:局部名称空间
         5  6  #  局部作用域可以引用全局作用域的变量
         7  # date = '周五'
         8  # def func():
         9  #     a = 666
        10  #     print(date)
        11  # print(a)
        12  # func()
        13  # print(a)
        14 15  # 局部作用域不能改变全局变量。
        16  # count = 1
        17  # # def func():
        18  # #     count += 2
        19  # #     print(count)
        20  # # func()  # local variable 'count' referenced before assignment
        21  # 局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了你对一个变量进行修改的操作,
        22  # 解释器会认为你在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了。
        23 24  # 使用可以,不能改变
        25  # def func():
        26  #     count = 1
        27  #     def inner():
        28  #         print(count)
        29  #     inner()
        30  # func()
        31 32  def func():
        33      count = 1
        34      def inner():
        35          count += 1
        36          print(count)
        37      inner()
        38  func()
        39

         

    4. 函数的嵌套(高阶函数)。

       
       1  # 例1:
       2  def func1():
       3      print('in func1')
       4      print(3)
       5  6  def func2():
       7      print('in func2')
       8      print(4)
       9 10  func1()
      11  print(1)
      12  func2()
      13  print(2)
      14  # in func1 3 1 in func2 4 2
      15 16 17 18  # 例2:
      19  def func1():
      20      print('in func1')
      21      print(3)
      22 23  def func2():
      24      print('in func2')
      25      func1()
      26      print(4)
      27 28  print(1)
      29  func2()
      30  print(2)
      31 32 33  # 例3:
      34  def fun2():
      35      print(2)
      36 37      def fun3():
      38          print(6)
      39 40      print(4)
      41      fun3()
      42      print(8)
      43 44  print(3)
      45  fun2()
      46  print(5)
      47 48 49  # glbals() locals()
       

       

    5. 内置函数 globals locals

       1 """
       2 本文件:研究内置函数:globals locals
       3 """
       4 a = 1
       5 b = 2
       6 def func():
       7     name = 'alex'
       8     age = 73
       9     print(globals())  # 返回的是字典:字典里面的键值对:全局作用域的所有内容。
      10     print(locals())  # 返回的是字典:字典里面的键值对:当前作用域的所有的内容。
      11 # print(globals())  # 返回的是字典:字典里面的键值对:全局作用域的所有内容。
      12 # print(locals())  # # 返回的是字典:字典里面的键值对:当前作用域的所有的内容。
      13 func()

       

    6. 关键字:nonlocal global。

       

  4. 今日总结

    1. 参数:万能参数,仅限关键字参数(了解),参数的顺序,*的魔性用法:聚合,打散。

    2. 名称空间,作用域,取值顺序,加载顺序。

    3. globals locals

    4. 高阶函数:执行顺序。

    5. 以上全部都是重点。  

原文地址:https://www.cnblogs.com/zhangxiangning/p/10215872.html