作用域指的是函数中变量的访问权限:
全局变量 → 全局作用域
局部变量 → 局部作用域
代码示例:
场景:老师欢迎新生入学
我们定义一个welcom(student)
函数,这个函数的作用就是在我们传入自己的student
信息时,老师teacher
会对我们说一句包含学校、学生姓名和老师姓名的欢迎语。
school_name = 'Tsinghua University'
#school_name是全局变量
def welcome(student_name):
teacher = 'Peter'
#teacher是局部变量
print(f"hello, {student_name}, welcome to {school_name}, I'm your teacher, my name is {teacher_name}")
welcome('Lily') #hello, Lily, welcome to Tsinghua University, I'm your teacher, my name is Peter
print(school_name)#输出结果为Tsinghua University
print(teacher_name)#输出失败
在这段代码中,出现了一个全局变量school_name
和一个局部变量teacher
。
当我们调用函数welcome
的时候,输出结果为hello, Lily, welcome to Tsinghua University, I’m your teacher, my name is Peter,这也就意味着我们在调用welcome
的时候成功访问到了该函数内部的局部变量teacher
。
可是当我们想要输出school_name
和teacher_name
的时候,只有school_name
成功输出了,teacher_name
并没有被输出,原因就是school_name
是全局变量,我们可以访问到,可是teacher_name
是局部变量,所以我们在全局里访问不到,只有在welcome
函数内部才可以访问到。
注意:局部变量可以在局部作用域中修改全局变量,但是不会真的改变全局变量。
school_name = 'Tsinghua University'#全局变量school_name
def welcome(student):
school_name = 'Peking University'#在局部作用域中修改把school_name的值从Tsinghua University改为Peking University
teacher_name = 'Peter'
print(f"hello, {student}, welcome to {school_name}, I'm your teacher, my name is {teacher_name}")
welcome('Lily')#输出结果为hello, Lily, welcome to Peking University, I'm your teacher, my name is Peter
print(school_name)#输出结果为Tsinghua University
在以上代码中,我们在函数welcome
中把school_name
的值从清华大学改为了北京大学,所以当我们调用welcome
函数时,欢迎语中出现的是北京大学(局部变量);可是当我们直接打印school_name
的时候,输出的仍然是清华大学(全局变量)。可见,在局部作用域中修改全局变量的时候,修改的内容只在局部作用域中产生影响,在全局中并不真的发生改变。
如果想要在局部中修改全局变量,并且保证该变量在全局中也已经修改,则需要引入global
school_name = 'Tsinghua University'#全局变量school_name
def welcome(student):
global school_name#声明引入全局变量
school_name = 'Peking University'#在局部作用域中修改把school_name的值从Tsinghua University改为Peking University
teacher_name = 'Peter'
print(f"hello, {student}, welcome to {school_name}, I'm your teacher, my name is {teacher_name}")
welcome('Lily')#输出结果为hello, Lily, welcome to Peking University, I'm your teacher, my name is Peter
print(school_name)#输出结果为Peking University
在welcome
函数中声明global school_name
之后,我们再重新打印学校名称,可以发现输出结果由清华大学(全局变量)改为了北京大学。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)