第四章 函数(五) 2020-04-30

第五课 变量作用域


1、理解变量作用域


根据定义变量的位置,变量的作用域有两种:


局部变量:在函数中定义的变量包括参数,都被称为局部变量。

全局变量:在函数外面、全局范围内定义的变量,被称为全局变量。


# 全局变量

a = 35

 

def info():

         #局部变量

         b = ‘fkjava’

         #局部变量只能在当前函数内访问

         print(b)

         #全局变量,可在任意函数内访问

         print(a)


def bar():

         # 局部变量

         c = ‘crazyit

#       print(b)  #错误

         # 全局变量,可在任意函数内访问

         print(a)


info()

bar()


2、变量字典


不管是全局范围,还是局部范围,这些变量和它们的值就像一个“看不见”的字典:


        其中变量名就是字典的key

         变量值就是字典的value


获取变量字典


globals():该函数返回全局范围内搜所有变量组成的“变量字典”。


locals():该函数返回当前局部范围内所有变量组成的“变量字典”。


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


# 全局变量

a = 35

name = ‘fkjava’

 

def info():

         # 局部变量

         b = ‘fkjava’

         # 局部变量只能在当前函数内访问

         print(b)

         # 全局变量,可在任意函数内访问

         print(a)

# 局部变量组成的数组

         print(locals())


def bar():

         # 局部变量

         c = ‘crazyit

         # 全局变量,可在任意函数内访问

         print(a)

# 局部变量组成的数组

         print(locals())

 

# 访问全局变量的字典

print(globals())

# locals是获取当前范围的所有局部变量

# 因此如果在全局范围调用locals(),它返回全部的全局变量

# 在全局范围内,用globals和locals()(在全局范围内,它的当前范围就是全局)两个函数的效果是一样的。

print(locals())

 

info()

bar()


3、处理局部变量遮蔽全局变量


全局变量默认可以在所有函数内访问


如果在函数中定义了与全局变量同名的变量,此时就会发生局部变量遮蔽(hide)全局变量的情形。


name = ‘fkjava’

 

def info():

         print(name)

# 在函数内对变量赋值,变成了定义新的name变量

         name = ‘crazyit’

         print(name)


info()


使用globals访问全局变量


可通过globals()在函数中访问被遮蔽的全局变量

name = ‘fkjava’

 

def info():

         #依然访问全局变量name

         print(globals()[‘name’])

# 在函数内对变量赋值,变成了定义新的name变量

         name = ‘crazyit’

         print(name)


info()

# 全局变量name没有改变

print(name)



name = ‘fkjava’

 

def info():

         # 声明:该函数中name始终使用全局变量

         global name

         # 依然访问全局变量name

         print(name)

# 前面已经声明了name始终使用全局变量

# 因此此处不是重新定义局部变量

         name = ‘crazyit’

         print(name)


info()

# 全局变量name会被改变

print(name)



上一篇文章 第四章 函数(四) 2020-04-29 地址:

https://www.jianshu.com/p/6a050bc3968d

下一篇文章 第四章 函数(六) 2020-05-01 地址:

https://www.jianshu.com/p/3c06ec2ff8c9



以上资料内容来源网络,仅供学习交流,侵删请私信我,谢谢。

你可能感兴趣的:(第四章 函数(五) 2020-04-30)