基本上,我正在考虑一种存储数据的方法。如果Python有表格,就像表格一样。例如,我有一个名称列表,我希望与更改值相关联,然后在表达式中操作它们,最好是通过迭代。这是一个例子:三个名字" foo"," bar"和" baz"声明,递减,然后改变并再次递减(在我的项目中,我列出了十几个名字,但原理是相同的)。
方式1:变量和if-elif-else:
foo = 123
bar = 456
baz = 789
def chooser(n):
if n == 0:
return foo - 1
elif n == 1:
return bar - 1
elif n == 2:
return baz - 1
for i in range(3):
print chooser(i)
foo = 1
bar = 2
baz = 3
for i in range(3):
print chooser(i)
方式2:字典
data = {'foo':123, 'bar':456, 'baz':789}
for i in ('foo', 'bar', 'baz'):
print data[i] - 1
data['foo'] = 1
data['bar'] = 2
data['baz'] = 3
for i in ('foo', 'bar', 'baz'):
print data[i] - 1
然而,我强烈怀疑有一种更好,更pythonic的方式来做同样的事情。社区是否可以提供其他替代方案,如果有的话?
答案 0 :(得分:1)
是的,还有更多的pythonic方式。使用.items()
调用它。严肃的老兄,你不能尝试在Python官方文档中查找dict
吗?
for key, value in data.items():
print(data[key] - 1)
使用字典。它可以将字符串映射到其他对象,如下所示:
>>> data = {'foo' : 123, 'bar' : 456, 'baz' : 789}
>>> data['foo']
123
你的第二种方式甚至不起作用,即使你说它有效。你只是假装它确实有效。你不知道如何从根本上使用字典。
foo
,bar
和baz
作为参数传递。tuple_name[array_index]
访问元组的元素。记住:数组索引从零开始。要在您的情况下创建元组,您需要(123, 456, 789)
目前还不清楚你在这里想要达到的目标。 告诉我们您想要实现的目标。为什么要使用该功能?为什么叫chooser
?为什么不循环这样的元组呢? :
data = (123, 456, 789)
for element in data:
print(element - 1)
我认为您对该代码段中的概念存在基本的误解。
foo, bar, baz = 123, 456, 789
不会创建一个列表,它会将123
分配给foo
,将456
分配给bar
,同样也可以baz
。
你的range(2)
循环 - 这是一个循环!它将覆盖每个值0-1
,因此永远不会达到2
,你在那里做的“非法输入”是什么?
你忘记了函数定义中的参数列表 - 任何函数都需要,即使它没有参数。它应该是def chooser():
。
顺便说一句,^
运算符不是取幂 - 它是位移,这是一个你现在不应该学习的高级概念。要进行取幂,您必须使用**
运算符。
你期待什么? chooser()
将始终返回123^2
。 (这是121
,位移的结果)
目前还不清楚你想要实现的目标。请在您的问题中澄清这一点。
chooser
不会要求用户输入,因为名称意味着。我认为你误解了range()
得到了输入。它不会:它返回一个iterable(0,1)。
如果您想在元组中存储一些变量,可以编写data = (123, 456, 789)
。 然后您不是写foo
,而是写data[0]
,而不是写bar
,而是写data[1]
。等等。 baz
。