Python爬坑之变量作用域
本文是基于Python3进行说明
talk is cheap,show me the code.
- 变量作用域
- python 中块级作用域概念
- 作用域链
- 把局部变量变成全局变量
变量作用域
在python中,定义一个函数是通过关键字 def
来定义的。同大多数语言一样,python也具有全局变量
和局部变量
num = 100 # 全局作用域变量num
def add(a, b): # 通过def来定义一个add函数
num = a + b # 函数内部作用域局部变量num
print(num)
add(1, 2) # 打印 3
print(num) # 打印 100
一般情况下,在全局作用域
中是无法访问局部作用域
中的变量的:
def demo():
c = 10 # 函数内部有一个变量 c
print(c) # 此时在函数外部打印c是会报错的 因为在全局作用域中没有变量c
块级作用域概念
在 python 中没有块级作用域的概念。函数内部可以是一个作用域,但没有块作用域(比如if / for ..的作用域
)。类似于在其他语言中的块级作用域 在python中这些块级作用域
就和函数作用域
是一个级别的。所以 在python中可以在 for 循环外部
获取 for 循环内部
的值
def demo():
c = 10 # 函数内部变量c
for i in range(0, 10): # for循环
a = 'tiger' # for循环内部变量a
c += 1 # for循环内部操作for循环外部变量c
print(a) # 在python中 可以在for循环外部直接获取到for循环内部的变量
print(c) # 此时 函数内部变量c 相对于for循环内部是 全局变量
demo()
作用域链
和JS一样,python中也有作用域链:
c = 1
def func1():
c = 2 # 如果没有此处变量c的声明 那么就会向上一级请寻找 即 c = 1
def func2():
c = 3 # 如果没有此处变量c的声明 那么就会向上一级请寻找 即 c = 2
print(c)
func2()
func1()
局部变量变成全局变量
我们知道, 一般情况下,在全局作用域中是无法访问局部变量的。但是可以通过关键字global
将一个局部变量变成一个全局变量,从而就可以在全局作用域中访问局部中的变量了
def demo():
global c # 通过global关键字将局部变量变成全局变量
c = 100
demo()
print(c) # 虽然没有在全局中定义变量c,但是在函数内部使用了global关键字来定义变量c,使c变成一个全局变量