01.05 笔记 - 函数作用域

2019-01-05  本文已影响0人  xxxQinli

什么是变量的作用域

变量能够使用的范围

全局变量和局部变量


全局变量

a = 100

for y in range(5):

 print(y)

\# y 可以在循环外中使用,y为全局变量,但是y以最后一次赋值为准

def func1():

 print(y)

func1()

print(y)


局部变量


#num1 是局部

"""

def func2(num1):

 print(num1)

func2(10)

\# print(num1) 报错


aa = 100

def func5():

 aa = 200

 print('函数里', aa)

func5()

print('外部', aa)


重点 - global - 在函数中声明了一个全局变量,不需要一定在全局中有这个变量

在函数中:

global 变量名 (global只能在函数中使用)

变量名 = 值

重点 - 创建函数,其实是创建一个函数的单独的空间,在这个空间里给局部变量赋值,函数执行结束后,函数的单独空间销毁

重点 - 若用globl在函数中指定全局变量,函数会先在全局中找是否又这个变量,有就用全局变量,没有的话,就重新在全局变量中声明一个新的变量


\# print(cc)

bb = 11

def func6():

 global bb

 bb = 22

 print(bb)

 global cc

 cc = 200

func6()

print(bb) \# 全局变量被修改了

print(cc)


重点 - nonlocal - 想要在局部的局部中去修改局部变量的值,就使用nonlocal对变量进行说明,前提,父函数里必须要有这个变量

在子函数中使用,将变量不当做局部函数(不重新声明一个变量),而用父函数的这个变量,若父函数没有,就报错SyntaxError: no binding for nonlocal 'abc' found


def func11():

 abc = 123

 print('func11', abc)

 def func12():

 nonlocal abc \# abc 为父函数里的同名变量

 abc = 333

 print('func12', abc)

 func12()

 print('func11', abc)

func11()


list1 = []

for i in range(1,6):

 list1.append(lambda x: x + i)

print(list1)

print(list1[0](2)) 

重点-在将函数添加进列表的时候,只是将一个函数块放入列表,只有当函数要调用的时候,才会执行函数块中的代码,根据代码情况调用里面的变量

简单意思就是,只是存入了一个函数块,并不会执行代码块,当要调用的时候,才会执行里面的函数

上一篇下一篇

猜你喜欢

热点阅读