函数--变量作用域

一.局部变量

1.定义

局部变量,就是在函数内部定义的变量,只在函数内部生效
不同的函数可以定义相同名字的局部变量,且各自使用不会产生影响

2.局部变量的作用

为了临时保存数据需要在函数中定义变量来进行存储

def save_money(money):
    """存钱"""
    allmoney=100 #定义局部变量
    print('存钱前:',allmoney)
    allmoney+=money
    print('存钱后:',allmoney)
def view_money():
    almoney=500 #定义局部变量
    print(almoney)
if __name__ == '__main__':
    save_money(100)
    view_money()

结果

存钱前: 100
存钱后: 200
500

可看出,两个不同函数中都有一个局部变量allmoney,但是是互不影响的。
定义函数时提到,若没有返回值,则默认返回None,这里没有返回None是因为使用了if name=='main

二.全局变量

1.定义

在函数外边定义的变量叫做全局变量
如果一个变量,既能在一个函数中使用,也能在其他函数中使用,这样的变量就是全局变量

  • 全局变量能够在所有函数中进行访问
  • 如果在函数中使用和修改全局变量,那么就需要使用global 变量名进行申明,否则出错
  • 如果全局变量和局部变量的名字相同,那么使用的是局部变量(就近原则)
allmoney=100  #定义全局变量
def save_money(money):
    allmoney=200
    print('存钱前:',allmoney)
    allmoney+=money
    print('存钱后:',allmoney)
if __name__ == '__main__':
    save_money(100)
    print(allmoney)

运行结果

存钱前: 200
存钱后: 300
100

这里有两个allmoney变量,一个是全局变量,一个是局部变量,因为第一个allmoney在函数外部定义,所以为全局变量,且可以在任何地方对他进行访问;另一个在函数内部定义,且没有使用global申明为全局变量,因此是局部变量

allmoney=100  #定义全局变量
def save_money(money):
    global allmoney
    print('存钱前:',allmoney)
    allmoney+=money
    print('存钱后:',allmoney)
def view_money():
    allmoney=500
    print(allmoney)
if __name__ == '__main__':
    save_money(100)
    view_money()

运行结果

存钱前: 100
存钱后: 200
500

这里由于用global将原来的局部变量申明为全局变量,因此一个函数中使用的是刚开始的全局变量,第二个函数没有申明,因此是局部变量

三.如何将局部变量申明为全局变量

如上例中,使用global 变量名

allmoney=100  #定义全局变量
def save_money(money):
    global allmoney   #局部变量申明为全局变量
    print('存钱前:',allmoney)
    allmoney+=money
    print('存钱后:',allmoney)

四.global申明的全局变量

global的本质是申明可以修改全局变量的指向,即变量可以指向新的数据

  • 不可变类型的全局变量:指向的数据不能修改,不使用global时无法修改全局变量,即无法在函数直接对全局变量指向的数据执行改变全局变量大小的表达式

  • 可变类型的全局变量:指向的数据可以修改,不使用global时可以修改全局变量
    python 提供以下三个工具函数来获取指定范围内的“变量字典”:

  • globals():全局范围内所有变量组成的“变量字典”

  • locals():当前局部范围内所有变量组成的“变量字典”

  • vars(object):获取在指定对象范围内所有变量组成的“变量字典”。如果不传入参数object,vars()和locals()的作用完全相同。

allmoney=100  #定义全局变量
def save_money(money):
    global allmoney   #局部变量申明为全局变量
    print('存钱前:',allmoney)
    allmoney+=money
    print('存钱后:',allmoney)
    print(locals())
{'money': 100}

字典为局部变量组成的字典

发布了36 篇原创文章 · 获赞 0 · 访问量 298

猜你喜欢

转载自blog.csdn.net/ANingL/article/details/103811708