动态传参,作用域和函数嵌套

1. 动态传参(重点) *, **
  *, ** :
    形参: 聚合
      位置参数* ->聚合成 元组

def func(*food) :
    print(food)
func("卢本伟牛逼","义薄云天卢本伟","和你不熟赵梦玥")

  


      关键字** -> 聚合成 字典

def func(**food) :
    print(food)
func(义薄云天卢本伟 = "和你不熟赵梦玥", 赌神 = "周润发",赌侠 = "陈刀仔",赌怪 = "white")

  


    实参: 打散
      列表, 字符串, 元素 -> *

def func(*food) :
    print(food)
func(*"卢本伟牛逼克里斯关下门")

  


      字典 -> ** (字典里面添加新的"key""和"value"时用到)

dic ={"55开":"faker","赌神":"周润发"}
def func(**food) :
    print(food)
func(**dic,white = "卢本伟")

  


   形参顺序(重点):
    位置, *args, 默认值, **kwargs

   无敌传参
    def func(*args, **kwargs):                    (arguments参数 keyword-arguments关键字参数)
      pass

2. 作用域和名称空间
  名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的

  1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....
  2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)
  3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)

  名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰

  作用域:
  1. 全局作用域: 内置+全局
  2. 局部作用域: 局部

    globals() 查看全局作用域
    locals() 查看当前作用域

3. 函数的嵌套
  在函数中声明函数
  在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置

4. nonlocal和global关键字(重点)
  global: 在局部引入全局变量   (局部对该变量进行赋值,全局的变量也会改变)

a ="卢本伟nb"
def func() :
    global a
    a = a.upper()
    print(a)
func()
print(a)

  


  nonlocal: 在局部...内层函数引入外层离他最近的那个变量.

 

posted on 2018-12-07 17:23  哎呀!土豆  阅读(91)  评论(0编辑  收藏  举报

导航