pythonday10

匿名 (未验证) 提交于 2019-12-02 22:56:40

一. 函数参数--动态传参

        def chi(quality_food, junk_food):             print("我要吃", quality_food, junk_food)          chi("大米饭", "小米饭")    # "大米饭"传递给quality_food  "小米饭"传递给junk_food 按照位置传 

        def chi(*food):             print("我要吃", food)          chi("大米饭", "小米饭")          结果: 我要吃 ('大米饭', '小米饭')  # 多个参数传递进去. 收到的内容是元组tuple  

    注意:动态接收实参的时候, 动态形参必须在位置形参后面!

    否则传递进去的所有位置实参都被动态形参接收,后面的位置形参则就收不到参数.

    

        def chi(a, b, c='馒头', *food):             print(a, b, c, food)          chi("香蕉", "菠萝")  # 香蕉 菠萝 馒头 (). 默认值生效          chi("香蕉", "菠萝", "葫芦娃")  # 香蕉 菠萝 葫芦娃 ()    默认值不生效          chi("香蕉", "菠萝", "葫芦娃", "口罩")    # 香蕉 菠萝 葫芦娃 ('口罩',) 默认值不生效

        def chi(a, b, *food, c="娃哈哈"):             print(a, b, food, c)          chi("香蕉", "菠萝")  # 香蕉 菠萝 () 娃哈哈   默认值生效          chi("香蕉", "菠萝", "葫芦娃")  # 香蕉 菠萝 ('葫芦娃',) 娃哈哈    默认值生效          chi("香蕉", "菠萝", "葫芦娃", "口罩")    # 香蕉 菠萝 ('葫芦娃', '口罩') 娃哈哈  默认值生效     

    那么你的默认值是永远都生效的.

    注意:顺序:位置参数, 动态参数*, 默认值参数.

    在python中可以动态的位置参数, 但是 * 这种情况只能接收位置参数无法接收关键字参数.

        def func(a, b, c, d):             print(a, b, c, d)                  # 关键字参数必须在位置参数后面, 否则参数会混乱          func(1, 2, c=3, 4)    

    所以关键字参数必须在位置参数后面. 由于实参是这个顺序. 所以形参接收的时候

    也是这个顺序.也就是说位置参数必须在关键字参数前面.动态接收关键字参数也要在后面

    在形参的位置上的 * 表示把接收到的参数组合成一个元组

 

    

        def fun(**kwargs):             print(kwargs)          dic = {'a':1, 'b':2}          fun(**dic) 

 

  时候函数只是加载进来, 仅此而已, 只有当函数被调用和访问的时候, 解释器才会根据函数内部

 

  

  2. 我们给存放名字和值的关系的空间起一个名字叫: 命名空间.

    1> 命名空间分类:

      3. 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int


      1. 内置命名空间

      2.全局命名空间

      3.局部命名空间(函数被执行的时候)

     3> 取值顺序

      1. 局部命名空间

      2. 全局命名空间

      3. 内置命名空间

        a = 10          def func():                 a = 20                 print(a)         func()  # 20  

    全局作用域: 包含内置命名空间和全局命名空间. 在整个文件的任何位置都可以使用

    2> 我们可以通过globals()函数来查看全局作用域中的内容, 也可以通过locals()

 

三. 函数的嵌套

  1. 只要遇见了() 就是函数的调用. 如果没有 () 就不是函数的调用

  

        def fun1():             print(111)            def fun2():             print(222)             fun1()          fun2()          print(111)                # 函数的嵌套         def fun2():             print(222)             def fun3():                 print(666)             print(444)             fun3()             print(888)          print(33)          fun2()          print(555)     

 

 

  

 

        a = 1          def fun_1():             a = 2             def fun_2():                 nonlocal a                 a = 3                 def fun_3():                    a = 4                     print(a)                 print(a)                 fun_3()                 print(a)             print(a)             fun_2()             print(a)         print(a)          fun_1()          print(a)

    *这样的程序如果能分析明白. 那么作用域, global, nonlocal就没问题了.

文章来源: pythonday10
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!