函数的名称空间、作用域以及global,nonlocal关键字

函数

动态参数:*args  **kwargs

args是元祖形式,接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中

*的魔性用法:

def func1(*args):

    print(args)

func1(*l1,*l2)

在函数的定义时,在*位置参数,**位置参数聚合。

在函数的调用(执行)时,在*位置参数,**位置参数打散。

形参传参的顺序:

位置参数--->*args--->默认参数--->**kwargs

全局名称空间:用来存放变量与值得关系的空间。

局部名称空间:代码运行时临时开辟出来的空间。

内置名称空间:pycharm解释器提供的拿过来就可以用的方法。

三种命名空间的加载和取值顺序:

加载顺序:内置命名空间(程序运行前加载)---->全局命名空间(程序运行中,从上到下加载)---->局部命名空间(程序运行中,调用时加载)

取值顺序:    就近原则

在局部调用:局部命名空间--->全局命名空间--->内置命名空间

在全局调用:全局命名空间--->内置命名空间

作用域:

全局作用域:包含内置名称空间,全局名称空间,整个文件的任意位置都能被引用,全局有效

局部作用域:局部名称空间,只能在局部范围内有效

关键字  global和nonlocal

global:声明一个全局变量,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到global

count=1

def func1():

  global count

  count=2

  return count

print(func1())

nonlocal:不能修改全局变量,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层以下的此变量全部发生改变。

def func1():
count=666
def inner():
print(count)
def func2():
nonlocal count
count+=1
print('func2',count)
func2()
print('inner',count)
inner()
print('func1',count)
func1()

 

 

posted @ 2018-08-16 15:39  .why  阅读(265)  评论(0)    收藏  举报
Live2D