python函数的作用域、局部变量、全局变量

python函数的作用域、局部变量、全局变量,第1张

作用域指的是函数中变量的访问权限:

全局变量 → 全局作用域
局部变量 → 局部作用域

代码示例:

场景:老师欢迎新生入学

我们定义一个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_nameteacher_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之后,我们再重新打印学校名称,可以发现输出结果由清华大学(全局变量)改为了北京大学。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/867346.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-12
下一篇 2022-05-12

发表评论

登录后才能评论

评论列表(0条)

保存