版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chuhe163/article/details/89077621
文章目录
1、局部变量
name = "全局变量"
def test():
name = "局部变量"
print(name)
if __name__ == "__main__":
test()
输出:
局部变量
2、gloabl
python在使用全局变量时需要在函数内部先对变量加一个global
name = "全局变量"
def test():
global name #不可写成global name="修改全局变量"
name="修改全局变量"
print(name)
if __name__ == "__main__":
test()
输出:
修改全局变量
2、nonlocal
name="全局变量"
def outer():
name="outer" #outer函数内声明了局部变量
def inner():
nonlocal name #引用上一级的name,如果上一级未定义name会报错
print(name) #打印的是上一级的name,即outer的name
inner()
print(name) #打印outer的name
if __name__=="__main__":
outer()
print(name)
输出:
outer
outer
全局变量
3、函数内不可以修改全局变量的值
a = 1
def test():
a+=1 #如果写成a=a+1,相当于声明了a为局部变量
print(a)
if __name__ == "__main__":
test()
报错:
UnboundLocalError: local variable ‘a’ referenced before assignment
name="全局变量"
def test():
print(name)
name="局部变量"
test()
报错:
UnboundLocalError: local variable ‘name’ referenced before assignment
4、函数内可以访问全局变量
a = 1
def test():
print(a)
if __name__ == "__main__":
test()
输出:
1
5、函数内可以修改全局变量元素的值
a = [1,2,3]
def test():
a[0]=11
print(a)
if __name__ == "__main__":
test()
输出:
[11, 2, 3]
6、函数中访问同名的全局变量和局部变量
name="全局变量"
def test()
name="局部变量"
global name
name="修改变量"
print(name)
if __name__=="__main__":
test()
报错:
SyntaxError: invalid syntax
python中无法像C++一样可以用::或者this来区别函数中同名的全局变量和局部变量(此结论有待验证)
6、隐藏变量(非专业术语)
global适用于函数内部修改全局变量的值
nonlocal适用于嵌套函数中内部函数修改外部变量的值
如果没有使用以上关键字,对全局变量或者外部变量进行修改,python会默认将全局变量隐藏起来
def outer():
var = 1
def inner():
var = 2
print(var)
inner()
if __name__ == "__main__":
outer()
输出:
2
将上例中第4、5行代码调换位置,如下
def outer():
var = 1
def inner():
print(var) # inside函数改变了var所以python将var隐藏了起来,这里的print找不到var因而报错。
var = 2
inner()
if __name__ == "__main__":
outer()
报错:
print(var) # inside函数改变了var所以python将var隐藏了起来,这里的print找不到var因而报错。
UnboundLocalError: local variable ‘var’ referenced before assignment
7、全局变量和局部变量的命名
- 全局变量:大写字母,单词之间用_分割 ,例:
NUMBER
COLOR_WRITE
- 普通变量:小写字母