Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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_Python 3.x_Pygame - Fatal编程技术网

Python 我们如何仅用名称(str)定义局部变量

Python 我们如何仅用名称(str)定义局部变量,python,python-3.x,pygame,Python,Python 3.x,Pygame,我正在开发一个pygame游戏,我添加了一个“控制台”,以便能够用我的控制台设置一个变量。因此,当我键入命令“set”时,它将接受我的两个参数:一个是变量名,另一个是变量值。但问题是,我找不到如何只设置变量的名称 以下是一个例子: self.myVar = "ThisIsMyVar" self.args = ['var', 'value'] # Here is where I check if the var exist in the code and if it is I

我正在开发一个pygame游戏,我添加了一个“控制台”,以便能够用我的控制台设置一个变量。因此,当我键入命令“set”时,它将接受我的两个参数:一个是变量名,另一个是变量值。但问题是,我找不到如何只设置变量的名称

以下是一个例子:

self.myVar = "ThisIsMyVar"
self.args = ['var', 'value']
# Here is where I check if the var exist in the code and if it is I want to add the value 
#of self.args[1] to the self.myVar
对不起,如果我解释错了,但是我的英语不是很好,
如果你能帮助我,我将不胜感激

根据自身判断,这些是实例变量,而不是局部变量

那样的话,你真走运
setattr
将允许您按名称设置实例变量的值:

self.myVar = "ThisIsMyVar"
args = ['var', 'value']
setattr(self, args[0], args[1])

self
判断,这些是实例变量,而不是局部变量

那样的话,你真走运
setattr
将允许您按名称设置实例变量的值:

self.myVar = "ThisIsMyVar"
args = ['var', 'value']
setattr(self, args[0], args[1])

正如人们在评论中提到的那样,Python字典在这里是一个很好的选择

Python字典有点像索引列表,只是它们也可以用字符串索引

console_variables = {}   # empty dictionary to hold console "set" commands
因此,当用户在控制台中输入
set
命令时,例如:
set color red

set_name, set_value = parseSetCommand( user_input )   # extract set command from input
console_variables[ set_name ] = set_value             # save the setting
get_name = parseGetCommand( user_input )              # extract get command from input
if ( get_name in console_variables.keys() ):          # does this set exist
    consoleWrite( console_variables[ get_name ] )     # Yes: write it back
else:
    consoleWrite( "[" + get_name + "] has not been set" )  # No: error
以后,可以使用任何字符串查找项目。假设您还有一个控制台命令
get
,这样用户可以输入
get color
,并期望它输出
红色

set_name, set_value = parseSetCommand( user_input )   # extract set command from input
console_variables[ set_name ] = set_value             # save the setting
get_name = parseGetCommand( user_input )              # extract get command from input
if ( get_name in console_variables.keys() ):          # does this set exist
    consoleWrite( console_variables[ get_name ] )     # Yes: write it back
else:
    consoleWrite( "[" + get_name + "] has not been set" )  # No: error

如果你想要更多的例子,这里有一些。需要注意的一点是,字典是区分大小写的,因此在上面的例子中,尝试在字典中查找“color”将失败,因为它存储为“color”(注意大写字母
C
)。显然,您的代码可以通过在相同的大写字母大小写中存储和检查来轻松处理此问题,可能所有内容都是
.lower()

正如人们在评论中提到的那样,Python字典将是一个很好的选择

Python字典有点像索引列表,只是它们也可以用字符串索引

console_variables = {}   # empty dictionary to hold console "set" commands
因此,当用户在控制台中输入
set
命令时,例如:
set color red

set_name, set_value = parseSetCommand( user_input )   # extract set command from input
console_variables[ set_name ] = set_value             # save the setting
get_name = parseGetCommand( user_input )              # extract get command from input
if ( get_name in console_variables.keys() ):          # does this set exist
    consoleWrite( console_variables[ get_name ] )     # Yes: write it back
else:
    consoleWrite( "[" + get_name + "] has not been set" )  # No: error
以后,可以使用任何字符串查找项目。假设您还有一个控制台命令
get
,这样用户可以输入
get color
,并期望它输出
红色

set_name, set_value = parseSetCommand( user_input )   # extract set command from input
console_variables[ set_name ] = set_value             # save the setting
get_name = parseGetCommand( user_input )              # extract get command from input
if ( get_name in console_variables.keys() ):          # does this set exist
    consoleWrite( console_variables[ get_name ] )     # Yes: write it back
else:
    consoleWrite( "[" + get_name + "] has not been set" )  # No: error

如果你想要更多的例子,这里有一些。需要注意的一点是,字典是区分大小写的,因此在上面的例子中,尝试在字典中查找“color”将失败,因为它存储为“color”(注意大写字母
C
)。显然,您的代码可以通过在相同的大写情况下存储和检查来轻松处理此问题,可能所有内容都是
.lower()

好的,但如果我的“var”类似于:self.fpscoller它不起作用,我希望能够仅使用其名称
setattr(self,name,value)设置任何变量
将能够在
self
上设置任何值。当然,如果您立即重新分配值,例如在游戏循环的下一次迭代中,这是另一回事。这几乎不是正确的解决方案。是的,它从字面上回答了OP的问题,但这几乎可以肯定是一个典型的X-Y问题,初学者不知道字典和类似的数据结构。好吧,我可以改变变量的状态(它是bool),但我的计数器仍然在屏幕上,我不知道为什么?@Lucy这是另一个问题。要解决这个问题,你必须在另一个问题中,而不是在注释中显示更多的代码。好的,但如果我的“var”类似于:self.fpsconter它不起作用,我希望能够用他的名字设置任何变量
setattr(self,name,value)
将能够在
self
上设置任何值。当然,如果您立即重新分配值,例如在游戏循环的下一次迭代中,这是另一回事。这几乎不是正确的解决方案。是的,它从字面上回答了OP的问题,但这几乎可以肯定是一个典型的X-Y问题,初学者不知道字典和类似的数据结构。好吧,我可以改变变量的状态(它是bool),但我的计数器仍然在屏幕上,我不知道为什么?@Lucy这是另一个问题。要解决这个问题,您必须在另一个问题中,而不是在注释中显示更多的代码。最好的方法可能是让一个
dict
保存配置(或其他任何配置),然后(a)检查
“var”
是否是该dict中的键(默认值),以及(b)相应地设置值。您也可以使用
hasattr
getattr
setattr
,但这样您就为玩家打开了大门,让他们以您不希望的方式干扰您的游戏。如果您使用的是Python2,
eval('var=“value”)
(这里可能会出现一些格式设置),但这在Python3(.5)中不再可用。最好的方法可能是让一个
dict
保存配置(或其他任何配置),然后(a)检查
“var”
是否是该dict中的键(默认值),以及(b)相应地设置值。您也可以使用
hasattr
getattr
setattr
,但这样您就为玩家打开了大门,让他们以您不希望的方式干扰您的游戏。如果您使用的是Python2,
eval('var=“value”)
(这里可能会出现一些格式设置),但这在Python3(.5)中不再可用。