[英]Str is already defined as a global variable
在使用函数时,我注意到一些非常奇怪的东西。 看起来变量名'str'已经定义为全局变量。 看一看:
def Example(x):
str = input()
return str
print (Example(str))
#When typing 'Hello!' Output --> Hello!
变量str在函数Example中定义。 那么为什么没有NameError:未定义名称'str'?
当我调用变量x或其他变量(在这种情况下为“ bar”)时:
def Example(x):
bar = input()
return bar
print (Example(bar))
#Output: NameError: name 'bar'is not defined
为什么名称为“ str”的变量充当全局变量?
在python中,str()是字符串构造函数。 它用于将对象转换为字符串。
您可以在本地使用它,但是它将覆盖对功能的访问。 您将无法再使用str()。
供参考: https : //docs.python.org/2/library/functions.html#str
类str(object ='')
返回一个字符串,其中包含对象的可很好打印的表示形式。 对于字符串,这将返回字符串本身。 与repr(object)的区别在于str(object)并不总是尝试返回eval()可接受的字符串; 它的目标是返回可打印的字符串。 如果未提供任何参数,则返回空字符串“”。
出于一般知识的目的,如果删除变量,则可以找回构造函数。 例如:
test = 1
str(test)
>>>'1'
str = 2
str(test)
>>>TypeError: 'int' object is not callable
del str
str(test)
>>>'1'
失败的原因:
def Example(x):
bar = input()
return bar
print (Example(bar))
#Output: NameError: name 'bar'is not defined
是因为您试图将变量bar
传递给Example()
方法,但是从未在调用之前的任何位置定义bar
。
我不确定如何用此方法完成什么,因为您传递了变量但根本不使用它。
评论回应:
str
不是内置函数(尽管已在页面上列出),但它是内置类型str
的构造函数。 为了表明您只是简单地重新分配了与关键字(不一定是保留的,但是仍然是关键字)关联的方法,请考虑以下事项:
>>> str
<class 'str'>
>>> abs
<built-in function abs>
>>> str = abs
>>> str
<built-in function abs>
因此,您实际上已经覆盖了对str
类构造函数的分配。 在此示例中,我使用了abs
,但对于input
同样适用(略有不同):
>>> str
<class 'str'>
>>> input
<built-in function input>
>>> str = input
>>> str
<built-in function input>
>>> str = input()
hello world
>>> str
'hello world'
区别在于,您为关键字str
分配了一个字符串(类型为str
)。 因此,您永远不能使用str(10)
来获取'10'
因为这就像调用hello world(10)
失败。
如果要使用关键字作为变量名,则按照惯例,使用单个的下划线来避免与Python关键字发生冲突,如下所示:
single_trailing_underscore_
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.