什么是掩盖在这里

时间:2016-10-15 10:30:36

标签: python

在python教程中:

在交互模式下,最后打印的表达式将分配给变量_。这意味着当您使用Python作为桌面计算器时,继续计算会更容易一些,例如:

>>> tax = 12.5 / 100
>>> price = 100.50
>>> price * tax
12.5625
>>> price + _
113.0625
>>> round(_, 2)
113.06

该变量应被用户视为只读。不要为其明确赋值 - 您将创建一个具有相同名称的独立局部变量使用其魔术行为屏蔽内置变量

这里有什么遮掩?

一般来说在python中屏蔽或屏蔽变量是什么意思?

感谢

3 个答案:

答案 0 :(得分:3)

如果存在具有相同名称的其他变量,则会屏蔽变量,这是首选。一个例子是拥有一个全局变量x。如果您在一个也具有局部变量x的函数中,那么全局不可访问,无需特殊措施,只要在函数内部使用标识符x,首选局部变量。

好像你的教室里有两个叫玛丽的孩子,其中一个更接近,并且会更早地听到你的声音,所以总是给出最快的答案。如何给对方女孩一个机会?

答案 1 :(得分:2)

覆盖 / 重新分配 新范围

中先前命名的标识符

让我们看看这段代码,例如

def f():
    return 3

def g():
    f = 5
    f()

try:
    print(g())
except TypeError:
    print(f())

g的范围内,标识符f已从一个返回整数的函数重新分配给一个整数。因此,当您尝试在f内调用g时,您会收到类型错误,因为您无法调用int。但是在g之外,f仍然是一个返回3

的函数

解释器有自己的范围,因此当您将_分配给另一个值时,它会忘记它以前的功能来替换新值,直到您重新启动解释器,或者在此特殊情况下删除使用del关键字

答案 2 :(得分:1)

_内置于解释器,它具有特殊含义。它只是一个只读变量。当您从中读取时,解释器将其替换为最后计算的值。如果您执行类似

的操作
_ = 1 + 1

您实际上是在当前命名空间中创建一个名为_的新变量(在创建变量之前和之后尝试运行locals()函数)。由于现在存在一个与内置_解释器同名的变量,因此当您进行后续读取时首先访问该变量,从而隐藏内置的含义,或掩蔽它。

您也可以使用Python内置函数执行操作,例如定义名为int的函数参数。在本地函数名称空间中,如果您尝试在值上调用int()函数,它将尝试使用您的参数int作为可调用对象,因为有一个具有该名称的局部变量屏蔽了构建-in function int。当你尝试做类似这样的事情时,有些IDE会警告你,因为在实践中,掩盖这样的内置名称通常是一个坏主意,因为你正在消除那个符号的用途。

如果你做了类似

的事情,那么制作就会出现
val = 20

def do_stuff(val):
    # parameter masks the value defined in outer scope
    print('Value of a inside function: {}'.f format(val))

do_stuff(10)  # prints 10 

这为变量val赋值20,但是当调用函数do_stuff时,它有自己的名为val的局部变量。从函数中访问val将为您提供传入的值,在这种情况下为10,而不是20来自外部变量,因为函数中的a 掩盖外部范围。