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