我陷入了一个可能很简单的问题: 当对函数使用choice时,似乎所有函数都被执行,而只有一个函数应该被执行。 示例:
from ordereddict import OrderedDict
from random import choice
def PrintStrings():
Text = choice(["Gutentag!", "Ni hao!", "Hola!"])
print "Chosen Text is:", Text
return Text
class Greeting():
fields = OrderedDict([
("Morning", "Hi"),
("Afternoon", "Good Afternoon!"),
("Evening", "Good Evening!"),
])
def change(self):
self.fields["Morning"] = "Good morning!"
def changerandom(self, n = 1):
function=[
{self.fields["Morning"]: PrintStrings()},
{self.fields["Afternoon"]: PrintStrings()},
{self.fields["Evening"]: PrintStrings()},
]
result = {}
for i in range(n):
result.update(choice(function))
print "Updated string:",result
return result
text = Greeting()
text.change()
text.changerandom()
当运行这个脚本时,我得到所有3个
{self.fields["Morning"]: PrintStrings()},
{self.fields["Afternoon"]: PrintStrings()},
{self.fields["Evening"]: PrintStrings()},
执行,但不应该。 此脚本返回:
Chosen Text is: Ni hao!
Chosen Text is: Gutentag!
Chosen Text is: Hola!
Updated string: {'Good morning!': 'Hola!'}
预期结果是:
Chosen Text is: Hola!
Updated string: {'Good morning!': 'Hola!'}
抛开一些奇怪的数据结构选择,您正在调用
function
中的函数。去掉括号',将函数作为对象传递。你知道吗PrintStrings()
->;PrintStrings
以下是获得所需输出的可能解决方案:
使用这种方法,我们获取随机键,并在同一次迭代中调用
PrintStrings()
。你知道吗对象将为您提供仅在序列化时而不是在实例化时运行代码的方法:
剩下的代码可以按原样使用,这个类将替换
PrintStrings
函数。你知道吗相关问题 更多 >
编程相关推荐