[英]Python: What is the difference between a global variable, vs. a variable with the prefix “self.”, vs. a local variable?
多年来,我已经接触过类似C / C ++ / Java的语法,而Python变量的定义方式让我感到困惑。 任何人都可以描述q中提到的三个差异吗?
全局变量就是 - 全局可访问的变量。 局部变量是仅可由当前范围访问的变量,例如单个函数定义中使用的临时变量。 实例变量(例如:当使用self.
前缀时)是与对象的特定实例相关联的数据。 当然,您也可以使用object.x
引用对象外部的实例对象,其中object
是对该对象的引用。
如果变量以self
为前缀,则既不是本地变量也不是全局变量。 它是对象的特定实例的构成的一部分。 粗略地说,实例变量表示特定对象的属性。
在以下示例中, lx
是一个局部变量,是方法greet
的本地变量。 gx
是可在模块中的任何位置访问的全局变量, ix
是一个实例变量,可以为对象的每个实例提供唯一值。 在对象定义内部引用时,您将引用带有前缀self
ix
,以及带有对象引用前缀的对象外部。
gx = "hello"
class Foo:
def __init__(self, who):
self.ix = who
def greet(self):
lx = "%s, %s" % (gx, self.ix)
return lx
foo = Foo("world")
print foo.greet()
print foo.ix
self
工作就像this
从C ++和Java。 您将获得对可以随后访问的对象的引用.
运算符( ->
在C ++中)。
在Python中,访问实例变量的唯一方法是通过self
明确表达。 实例变量不会放在与本地或全局变量相同的“正常”范围内。
有时返回第一原则非常有用:
当我们谈论变量是本地变量或全局变量时,我们指的是它的“范围”(或上下文)。 函数内部的变量被认为是函数的本地变量。 以下是Swaroop优秀指南“ A Byte of Python ”的插图:
x = 50
def func(x):
print('x is', x)
x = 2
print('Changed local x to', x)
func(x)
print('x is still', x)
输出:
x是50
将本地x更改为2
x仍然是50
接下来说明全局变量如何遍历函数内部和外部之间的上下文:
x = 50
def func():
global x
print('x is', x)
x = 2
print('Changed global x to', x)
func()
print('Value of x is', x)
输出:
x是50
将全局x更改为2
x的值是2
这就是它的全部。
当我们利用Python的面向对象编程方面时,“ 自我 ”的概念变得相关。 类实例和实例被认为是“对象”和“ 自我” 。 前缀允许我们的代码区分我们是引用本地/全局变量还是引用对象的属性。
再一次, Swaroop用禅宗般的简洁解释了这个概念。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.