2.变量

a = "dasdsa"

如上定义了变量a,并赋值。

  • python变量的声明及定义,不需要指明变量的类型(当然python中变量是没有类型的),也不需要其他关键字表明定义一个变量(如swift 中的var)。

  • 但是变量定义后必须赋值,不然没有任何意义,而且会报错,如下:

变量作用域

python 的变量作用域由变量在哪里定义的决定,

  • L (Local) 局部作用域

  • E (Enclosing) 闭包函数外的函数中

  • G (Global) 全局作用域

  • B (Built-in) 内置作用域(内置函数所在模块的范围)

g_count = 0  # 全局作用域
def outer():
    o_count = 1  # 闭包函数外的函数中
    def inner():
        i_count = 2  # 局部作用域

内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问

if True:
   a = "123"
else
   b = "1234"
print(a)          # a 定义了且可以访问; 只有模块,类,函数可以引入新的作用域
print(b)          # b 没有定义,代码没有执行到

全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问


a = 11            # 全局变量
def func():
    print(a)      # 可以直接访问全局变量
func()

a = 11            # 全局变量
def func():
    a = 12        # 定义局部变量     
    print(a)      # 这里a为局部变量
func()

a = 11            # 全局变量
def func():   
    a = a + 1     # 这里会报错; 后面的a 是局部变量,但是没有被定义
    print(a)      
    
func()

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了


# 修改全局变量

a = 11            # 全局变量
def func():
    global a      # 声明这里的a 为全局变量a     
    a = a + 1
    print(a)      # 可以直接访问全局变量
func()

print(a)          # 这里a已经被修改



def func1():
    b = 11
    def func2():
        nonlocal b
        b = b + 1

最后更新于