我有一个问题,我将如何在python中执行以下任务。 (我使用python 3k)
我所拥有的是几个可以在这些变量之上产生更多变量的变量 而且每个人都有更多的变数 例如:
通用名称是
item_version_type =
其中每个部分(项目,版本和类型)引用不同的变量(这里每个部分有3个)
item = item_a, item_b, item_c
version = range(1,3)
itemtype = itemtype_a, itemtype_b, itemtype_c
简单地列出每个名称并定义它很烦人:
itema_ver1_typea =
itemb_ver1_typea =
itemc_ver1_typea =
itema_ver2_typea =
etc.
etc.
etc.
特别是当我有一个变量依赖于其他东西的东西时 例如:
if value == True:
version = ver + 1
并且最重要的是,整个例子简单地与我实际相比 与...合作。
我很好奇的一件事是使用多个“。”类的类型如:
item.version.type
我知道这可以做到 我只是无法弄清楚如何获得一个有多个点的类
或者如果有人能指出我更好的方法
感谢您的帮助。
答案 0 :(得分:3)
这样的数据分组可以在Python中以三种方式完成。
第一种方式是元组:
myvariable = ('Sammalamma', 1, 'Text')
第二种方式是字典:
myvariable = {'value': 'Sammalamma', 'version': 1, 'type': 'Text'}
第三种方式是一个班级:
class MyClass(object):
def __init__(self, value, version, type):
self.value = value
self.version = version
self.type = type
>>> myvariable = MyClass('Sammalamma', 1, 'Text')
>>> myvariable.value
'Sammalamma'
>>> myvariable.version
1
>>> myvariable.type
'Text'
在每种情况下使用哪一个取决于你,虽然在这种情况下我会声称元组似乎不是最好的选择,我会去字典或类。
这些都不是Python 3独有的,它适用于任何版本的Python。
答案 1 :(得分:1)
除@Lennart Regebro's answer之外,如果项目是不可变的:
import collections
Item = collections.namedtuple('Item', 'value version type')
items = [Item(val, 'ver'+ver, t)
for val in 'abc' for ver in '12' for t in ['typea']]
print(items[0])
# -> Item(value='a', version='ver1', type='typea')
item = items[1]
print(item.value, item.type)
# -> b typea
答案 2 :(得分:0)
很抱歉在这里发布此内容而不是评论,但我不知道如何在这里工作。
澄清
我需要的是基本上能够获得所谓的输出等 我可以采取广泛的区域(项目)进一步缩小它(版本)甚至更远(类型的项目类型,如让我们说类型是勺子,刀,叉)
或更好的描述就像arm.left.lower =左下臂 我也可能喜欢leg.left.lower
所以我可以用arm.both.upper来获得左右上臂 其中一个值将分配给两者。
我需要的是能够进行真值测试等并让它返回允许的值 比如
如果leg == True
输出是 - > leg.both.lower,leg.both.upper,leg.left.upper leg.right.upper等等。
如果upper == True
输出是 - > leg.both.upper,leg.left.upper等等。
希望有帮助
基本上我知道如何获得像item.version
这样的东西,但我如何得到一些东西
比如item.version.type
我需要让它更具体而不仅仅是item.version 我需要能够判断项目是否为此,版本是那个类型将是x
像 item.version.type
if version == 3:
item.version = spoon.3.bent
#which is different from
if version == 2:
item.version.type = spoon.2.bent