Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Str已定义为全局变量_Python_String_Variables_Global - Fatal编程技术网

Python 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”的变量充当全局变量?

在使用函数时,我注意到一些非常奇怪的事情。看起来变量名“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_