Python Str已定义为全局变量
在使用函数时,我注意到一些非常奇怪的事情。看起来变量名“str”已定义为全局变量。看一看:Python Str已定义为全局变量,python,string,variables,global,Python,String,Variables,Global,在使用函数时,我注意到一些非常奇怪的事情。看起来变量名“str”已定义为全局变量。看一看: def Example(x): str = input() return str print (Example(str)) #When typing 'Hello!' Output --> Hello! 变量str在函数示例中定义。那么为什么没有NameError:没有定义名称“str” 当我调用变量x或其他东西(在本例中为“bar”)时: 为什么名为“str”的变量充当全局变量?
def Example(x):
str = input()
return str
print (Example(str))
#When typing 'Hello!' Output --> Hello!
变量str在函数示例中定义。那么为什么没有NameError:没有定义名称“str”
当我调用变量x或其他东西(在本例中为“bar”)时:
为什么名为“str”的变量充当全局变量?在python中,str()是字符串构造函数。它用于将对象强制转换为字符串
您可以在本地使用它,但它将覆盖对函数的访问。您将无法再使用str()
供参考:
类str(对象=“”)
返回一个字符串,该字符串包含可很好打印的
对象对于字符串,这将返回字符串本身。区别
对于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
<class 'str'>
>>> abs
<built-in function abs>
>>> str = abs
>>> str
<built-in function abs>
这里的区别是您将一个字符串(类型为
str
)分配给关键字str
。因此,您永远不能使用str(10)
来获取'10'
,因为这就像调用hello world(10)
失败一样。如果您想使用关键字作为变量名,按照惯例,使用单个尾随下划线来避免与Python关键字发生冲突,例如:
single_trailing_underscore_
请参阅,因为
str
是PythonCheck中的一种类型,用于获取有关str
的详细信息。至于问题本身,我推荐一个Python初学者教程。小点,但是str()
不是用于强制转换的函数。它是str
对象的构造函数。谢谢!使用str()函数确实不再有效(unbundLocalError)。我现在知道了,你永远不应该给变量起像变量类型那样的名字。像float、int等。类重写是的,除非你delstr
。原文还在:)谢谢你的反馈。由于op正在学习,我用一个例子将其添加到了答案中。对于一般知识,我的重点是显示名为“str”的变量和例如“bar”的变量的输出之间的差异。我明白为什么varname='bar'会导致异常。@HugodeHeer,这是因为您正在重新映射与该保留字关联的函数。它不完全是保留字,否则在赋值时会出现语法错误。尝试for=0
str
是一个内置函数。内置名称空间是最后一个搜索的名称空间(在全局名称空间之后)。我上面的评论更多的是针对@HugodeHeer,但忘了提到他。作为补充,当您不关心返回值时,有时会使用单独的下划线\ucode>,通常是在解包包含多个值的元组时。
>>> str
<class 'str'>
>>> input
<built-in function input>
>>> str = input
>>> str
<built-in function input>
>>> str = input()
hello world
>>> str
'hello world'
single_trailing_underscore_