概述
代码执行过程
【参考:python中函数的定义和调用的先后顺序问题_独孤尚良dugushangliang的博客-CSDN博客】
【参考:python main,类变量 - bhz - 博客园】
【参考:local variable referenced before assignment 原因及解决办法_斗南花卉市场的博客-CSDN博客】
def a(temp):
print(temp)
def b():
print(y) # 访问全局变量
def c():
global y # 全局变量 (如果把这句去掉下面会报错,因为【在函数内部试图更改全局变量会导致错误】)
y+=1 # 函数内没有局部变量x,所以要使用全局变量
print(y)
def d():
y=100 # 局部变量
print(y)
x=1 # 全局变量 全局变量一定是定义在函数外部的
a(x) # 执行 1
# print(y) # 报错
if __name__ == '__main__': # 这个不是函数,这就是给if语句
y=2 # 是全局变量
#(但前面print(y)无法访问,因为程序从上到下执行,执行print(y)时 全局变量中还没有y )
a(y) # 执行 2
b() # 执行 3
c() # 执行 4
d() # 执行 5
1
2
2
3
100
- 代码从上到下依次执行
- 不要在函数内部改变全局变量的值,如果确实想改变全局变量的值(以y为例),那么需要在函数内部首先声明,即加上global y这一行代码。
- 当.py文件被直接运行时,
if __name__ == '__main__'
之下的代码块将会运行;
当.py文件以模块形式被导入时,if __name__ == '__main__'
之下的代码块不会运行。
变量
【参考:Python之全局变量、局部变量、类变量、实例变量的解读_叫我王员外就行的博客-CSDN博客】
全局变量
:模块内、所有函数外、所有class外
局部变量
:函数内、class的方法(类方法、静态方法、实例方法)内,且变量前面没有修饰
类变量
:class内,不在class的任何方法内
实例变量
:class的方法内,使用self修饰
class G():
fly = False # 类变量(类中的全局变量)
def __init__(self):
self.long = 2 # 实例变量
def run(self):
r = 4 #局部变量
print("I am running!.")
obj=G() # 实例对象
全局变量与局部变量同名
firstValue = "Hello World" # 全局
def print_str():
firstValue = "hi man" # 局部
print(firstValue) # 这里的firstValue调用的是局部变量firstValue,在方法中直接覆盖掉同名的全局变量firstValue
print_str() # hi man
省略global关键字
# global first = 100
first = 100 # first是全局变量
def my_hello():
print(first) #只是访问(读取)全局变量first的值,无需global修饰(加上global更规范)
my_hello() # 100
不可省略global关键字
name = "王员外"
def change_name():
global name
name = name + "非常牛" # 对全局变量name进行操作
print(name)
change_name() # 王员外非常牛
- 加上global修饰变量说明:先访问全局变量name的值,然后再相加,最后赋值全局变量,
- 如果没有global修饰,Python解释器会无法找到name,因为此时Python解释器认为name为局部变量,应该先创建,一般会看到下午的Error,表示未创建局部变量
UnboundLocalError: local variable ‘name’ referenced before assignment
不可省略global关键字2
my_name = "员外"
def baby():
my_name = "四大才子"
print(my_name) #注意:此处访问的是局部变量my_name,全局变量my_name并没有改变
baby() # 四大才子
print(my_name) # 员外
【参考:关于python类变量和实例变量 - 波波波波波 - 博客园】
class Dog():
size = [] # 类变量
def __init__(self,name):
self.name = name # 实例变量
d1 = Dog("A")
d1.size.append("A")
# 此时 类变量size=['A']
print(d1.size) # ['A']
d2 = Dog("B")
print(d2.size) # ['A']
d2.size.append("B")
# 此时 类变量size=['A', 'B']
print(d1.size) # ['A', 'B']
print(d2.size) # ['A', 'B']
class Dog():
def __init__(self,name):
size = [] # 局部变量
self.name = name
self.size = size # 实例变量
# 在类的构造函数init中,如果定义的变量,是类的局部变量,
# 这个类局部变量,在类实例化对象的时候,会赋值给对象,以后对象对该属性值的修改,不会影响由类创建的其他实例
d1 = Dog("A")
d1.size.append("A")
print(d1.size) # ['A']
d2 = Dog("B")
print(d2.size) # []
d2.size.append("B")
print(d1.size) # ['A']
print(d2.size) # ['B']
最后
以上就是能干水杯为你收集整理的【python】代码执行过程、全局变量、局部变量代码执行过程变量的全部内容,希望文章能够帮你解决【python】代码执行过程、全局变量、局部变量代码执行过程变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复