Python:全局变量与带有前缀“self。”的变量与本地变量之间的区别是什么?

时间:2011-12-26 20:13:49

标签: python variables

多年来,我接触过类似C / C ++ / Java的语法,而Python变量的定义方式让我感到困惑。任何人都可以描述q中提到的三个差异吗?

3 个答案:

答案 0 :(得分:6)

全局变量就是 - 全局可访问的变量。局部变量是仅可由当前范围访问的变量,例如单个函数定义中使用的临时变量。实例变量(例如:当使用self.前缀时)是与对象的特定实例相关联的数据。当然,您也可以使用object.x引用对象外部的实例对象,其中object是对该对象的引用。

如果变量以self为前缀,则既不是本地变量也不是全局变量。它是对象的特定实例的构成的一部分。粗略地说,实例变量表示特定对象的属性。

在以下示例中,lx是一个局部变量,是方法greet的本地变量。 gx是可在模块中的任何位置访问的全局变量,ix是一个实例变量,可以为对象的每个实例提供唯一值。在对象定义内部引用时,您将引用带有前缀ix的{​​{1}},以及带有对象引用前缀的对象外部。

self

答案 1 :(得分:3)

self就像C ++和Java中的this一样。您可以使用.运算符(C ++中的->)获取对象的引用。

在Python中,通过self明确地访问实例变量的唯一方法。实例变量放置在与本地或全局变量相同的“正常”范围内。

答案 2 :(得分:3)

有时返回第一原则非常有用:

当我们谈论变量是本地变量或全局变量时,我们指的是它的“范围”(或上下文)。函数内的变量被视为函数的 local 。以下是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的面向对象编程方面时,“ self ”的概念变得相关。类实例和实例被视为'对象'和'自我。前缀允许我们的代码区分我们是引用本地/全局变量还是引用对象的属性。

再一次,Swaroop使用类似禅的简单性来解释这个概念。