day10 函数进阶

今日主要内容

1. 动态传参

  形参: 1.位置参数  2. 默认值参数, 3. 动态传参

    重点:动态传参: 1. *args: 动态接收位置参数      2. **kwargs: 动态接收关键字参数

    顺序: 位置参数 > *args > 默认值参数 >  **kwargs

    无敌传参:  def func(*args, **kwargs):

    *, ** 在形参位置: 聚合作用    在实参位置: 打散作用(针对可可迭代对象list tuple str dict)

def fun(*args):
print(args)
lst = [1, 4, 7]
fun(lst[0], lst[1], lst[2])
fun(*lst) # 可以使⽤*把⼀个列表按顺序打散
s = "⾂妾做不到"
fun(*s) # 字符串也可以打散, (可迭代对象)

def fun(**kwargs):   #字典打散需要**
print(kwargs)
dic = {'a':1, 'b':2}
fun(**dic)      
View Code

  实参: 1. 位置参数  2. 关键字参数  3. 混合参数

2.  名称(命名)空间和作用域:

  名称空间: 存放名字和值的关系的空间

  分类:

  1. 全局命名空间: 在py文件中, 函数外声明的变量都属于全局命名空间

  2. 局部命名空间:  在函数中声明的变量会存放在这里   写的代码从上到下

  3. 内置命名空间:  存放在python解释器为我们提供的名字  函数, 类, 方法, 其他模块, 对象

  加载顺序:  内置  全局   局部(函数执行的时候)

  取值顺序:  局部  全局  内置

  作用域: 作用范围

  分类:

  全局作用域: 全局 + 局部

  局部作用域:  局部

  globals()   查看全局作用域的名字

  locals()   查看当前作用域的名字

  参考: https://www.cnblogs.com/zhangxinhe/p/6963462.html

3. 函数的嵌套(难点)

   明白每一层都会产生独立的的名称空间

4. 关键字 nonlocal  global

  global : 在局部引入全局的内容, 可以升华一个变量为全局变量

  nonlocal : 在局部, 引入上一层名称空间的变量, 如果没有, 继续上一层......

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)
View Code

搞定这段就可以!!!  (1234331)

 

    

posted @ 2018-10-30 20:38  维C_先生  阅读(93)  评论(0编辑  收藏  举报