开发者

Python函数命名空间和作用域(Local与Global)

开发者 https://www.devze.com 2022-12-12 12:17 出处:网络 作者: 网络整理
目录1.Local作用域2.Enclosingfunctionlocals作用域3.Global全局变量4.非局部变量nonlocal5.就近原则6.函数执行顺序7.循环、判断代码块中作用域问题摘要:
目录
  • 1.Local作用域
  • 2.Enclosingfunctionlocals作用域
  • 3.Global全局变量
  • 4.非局部变量nonlocal
  • 5.就近原则
  • 6.函数执行顺序
  • 7.循环、判断代码块中作用域问题

摘要:

python函数是一个包装起来的代码块,通过前面的返回函数,闭包函数等课程,我们发现其内部变量定义在不同的位置,使用起来的效果就有所不同,这就是python函数的作用域和命名空间。

1.Local作用域

a = 100
def func5():
  b = 50
  a = 99
  print('函数内a', a)
  print('函数内b', b)

print('函数外a', a)
func5()
print('函数外b', b)

返回结果:

函数外a 100

函数内a 99

函数内b 50

Traceback (most recent call last):

  File "C:/Users/Administrator/Desktop/python知识总结/2.python自学网-通用模块-视频源码/test.py", line 12, in <module>

    print('函数外b&#编程客栈39;, b)

NameError: name 'b' is not defined

上面函数中定义b变量,所以外面无法输出。

2.Enclosi编程客栈ng function locals作用域

a = 100
def func5():
  b = 50
  print('函数内a', a)
  print('函数内b', b)
  def func6():
    print('下层函数内a', a)
    print('下层函数内b', b)
  func6()
func5()

返回结果:

函数内a 100

函数内b 50

下层函数内a 100

下层函数内b 50

3.Global全局变量

a = 123
def func():
  a = 100
  print(a)
print(a)
func()
pr编程客栈int(a)

a = 123
def func():
  global a # 这里不能使用nonlocal
  a = 100
  print(a)
  print(locals()) # 查看局部变量
  print(globals()) # 查看全局变量
print(a)
func()
print(a)

4.非局部变量nonlocal

def func5():
  b = 50
  print(b)
  def func6():
    nonlocal b # 非局部的,只适用于闭包内部
    b = 60
    print(b)
  func6()
  print(b)
func5()

5.就近原则

b = 1111
def func5():
  b = 50
  print(b)
  def func6():
    b = 60
    print(b) # 这里的b从内到外究竟查找
  func6()
  print(b)
func5()


a = 100
def func5():
  b = 50
  print(a)
  print(b)
  def func6():
    b = 60
    print(b)
    print(a)
func5()

6.函数执行顺序

a = 123
def func1():
  print(a)
  print(b)
func1() # 不能打印b
b = 456
func1(编程客栈) # 可以打印b

7.循环、判断代码块中作用域问题

if True:
  a = 100
print(a)


for i in range(1编程客栈, 10):
  print(i)
print(i)

循环代码块中没有作用域这样的情况。

到此这篇关于Python函数命名空间和作用域(Local与Global)的文章就介绍到这了,更多相关Python命名空间和作用域内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号