Python变量的作用域,python类中的全局变量

  Python变量的作用域,python类中的全局变量

  我们先来看代码。问题不是很多吗?

  defscope_test(:defdo_local)):

  垃圾邮件=本地垃圾邮件

  defdo_nonlocal():

  非本地垃圾邮件

  spam=非本地spam

  defdo_global () :globalspam

  spam= global spam spam= test spam do _ local()print)、afterlocalassignment:)、spam)).

  do_nonlocal () print)、afternonlocalassignment:)、spam)。

  do_global () print)、afterglobalassignment:)、spam)。

  scope_test () print)、 inglobalscope:、spam)和的输出:

  自适应3360测试间隔

  afternonlocalassignment 3360非本地垃圾邮件

  Erglobalisation 3360非局部空间

  全局空间:全局空间

  当你不知道第三个原因时,加上

  x=0defouter():

  x=1

  定义者(:globalx

  x=2

  print(inner:x))))))))))))))).

  内部()打印)、外部: )、x).

  outer () print(global:,x ) inner :2 # outer :1 # global:

  如果局部变量与全局变量同名,则首先调用局部变量,从而解决上述问题。

  首先,了解全局变量和局部变量。

  1.全局变量和局部变量的区别在于范围。全局变量在整个py文件中声明,可以全局使用;局部变量是在函数内部声明的,并且只能在函数内部使用。当超出使用范围(函数外)时,就会出错。

  A=100 #全局变量通常用大写字母表示。

  deffunc(:

  A=50 #局部变量通常用小写字母表示。

  打印(aa))。

  func () #150

  打印(一)#100

  Print(a) #错误消息名称错误:名称“a”未定义,表明局部变量只能在函数中使用

  2.在函数内部,如果局部变量与全局变量同名,将首先调用局部变量。

  A=100

  deffunc(:

  A=250

  打印(a)打印(a) #打印所有变量100

  Func(#局部变量250

  3.如果要改变函数内部的全局变量,必须在它前面加上global关键字。函数执行后,全局变量的值也会改变。

  A=100

  deffunc(:globala

  A=200

  打印(a)打印(a) #打印全局变量100

  Func(#局部变量200

  Print(a) # changed全局变量200

  4.如果全局变量是列表类型(如果全局变量是可变对象,可以处理内部元素),可以使用list的list方法修改列表,而不是使用global进行声明。

  list _1=[ 1,2,56, list]defchangeList():

  list_1。append ("over"(print ) list _1))))))))).

  changelist (# [ 1,2,56, list , over])

  print(list_1) # [ 1,2,56, list , over]

  5.如果函数中有一个全局关键字,那么这个变量本质上就是一个全局变量,是可读的,可赋值的。

  NAME=尼古拉斯

  print(1,NAME)def change _ NAME)):global NAME

  NAME=牛逼

  打印(更改名称,名称).

  Change_NAME () print(2),NAME) # has global,定义了一个全局变量,可以赋值也可以修改。

  请注意全球立场。如果global需要改变全局变量,这里的global不能位于name=nick 下

  6.如果全局变量是不可变对象(不是列表),就不能在函数中修改,但是如果要修改,可以使用全局变量。

  count=0defglobal_test():

  计数=1

  打印(计数)

  global _ test()# unboundlocalrerror:在赋值前引用了局部变量“count”

  非局部的

  Python变量引用顺序:从当前作用域开始查找变量,如果找不到,则转到上一个作用域,如果找不到,则转到下一级。

  即当前作用域的局部变量-外作用域变量-外作用域变量-当前模块的全局变量-pyhton内置变量。

  全局:全局变量

  非局部:外部嵌套函数的变量

  使用摘要:

  1.global用于在局部范围内改变全局变量。Global也可以定义新的全局变量。

  2.内函数用非局部变量改变外函数。非局部不能定义新的外部函数变量,只能改变已有的外部函数变量(全局作用域的上一级没有外层,会报错)。同时,非局部不能改变全局变量。

  没有非局部

  A=当前模块的10 #a1全局变量

  defouter():

  A=9 #a2当前外部作用域的局部变量

  定义者():

  A=8 #a3当前内部作用域的局部变量

  Print(a) #a3 8,a3在内部的局部范围内被发现

  inner() #inner()函数结束,a3作为内部局部变量被释放。

  Print(a) #a2 9,在外部局部范围中查找a2

  outer() #outer()函数结束,a2作为外部局部变量被释放。

  一个 8

  九

  10

  用于在内部函数中改变外部函数的变量

  A=当前模块的10 #a1全局变量

  defouter():

  A=9 #a2外部局部变量

  定义者():

  非局部的

  A=8 #a3既是内部局部变量又是外部局部变量。

  Print(a) #a3 8,a3在内部的局部范围内被发现

  inner() #inner()函数结束,a3作为外部变量(外部局部变量)保留为a2

  Print(a) #a2 8,在外部局部范围内查找a2(在内部已更改)

  outer() #outer()函数结束,a2作为外部局部变量被释放。

  Print(a) #a1 10,在当前模块的全局范围内发现a1

  输出

  八

  八

  10

  如果在外层没有找到变量A,它将继续在外层搜索,直到全局范围的下一层。

  A=当前模块的10 #a1全局变量

  defouter2():

  A=9 #a2外部2范围局部变量

  打印(a) #a2 9,未被a3更改

  Defouter1():print(a) #a2 9,如果在outer1中没有找到局部变量A,那么就寻找外部变量a2(没有被a3改变)

  定义者():

  非局部的

  A=0 #a3既是内部局部变量,也是外部2范围变量。

  Print(a) #a3 0,找到内部局部变量a3

  inner() #inner()函数结束,a3保留为a2作为外部变量(outer2局部变量)

  Print(a) #a2 0,如果在outer1中没有找到局部变量A,就会找到外部变量a2(被a3改变)。

  Outer1()print(a) #a2 0,在Outer1中找到outer1的局部变量a2(被a3改变)

  Outer2()print(a) #a1 10,在当前模块的全局范围内发现a1。

  输出

  九

  九

  0

  0

  0

  10

  全局变量不是外部变量,也不会被非局部搜索。

  A=当前模块的10 #a1全局变量

  de fouter():definer():

  非局部a#在当前作用域的外局部作用域,即外局部作用域中没有找到外局部变量A。外部范围是全局范围。非本地不继续找,报错。

  a=8

  打印(一份)

  内部()打印(a)

  Outer()print(a) #a1 10,在当前模块的全局范围内发现a1

  输出

  语法错误:未找到非本地“a”的绑定“”

  注意:用global关键字修饰的变量以前可能不存在,而用非local关键字修饰的变量必须已经存在于嵌套的作用域中。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: