我是python编程的新手,我有一个(也许)特定的问题。 我不知道python是否允许你这样做,但基本上我想分配一个变量来代表一整块东西。
例如我有这个:
item.history[len(item.history)] = {'user': item.user,
'email': item.email, 'phone': item.phone,
'status': item.status, 'usage': item.usage,
'checkouttime': item.checkouttime,
'checkintime': item.checkintime,
'timeout': item.checkintime - item.checkouttime}
这在一个地方有很多东西,在我的程序中,这个代码的相同块(下面显示为ShortHis)重复约15次,更改历史记录键,不同的变量而不是checkintime和checkouttime有时,所以我想如果我这样做了:
ShortHis = ('user': item.user,
'email': item.email, 'phone': item.phone,
'status': item.status, 'usage': item.usage,
'checkouttime': item.checkouttime,
'checkintime': item.checkintime,)
然后这个:
item.history[len(item.history)] = {ShortHis
'timeout': item.checkintime - item.checkouttime}
可以工作,我可以节省一些空间,仍然能够编辑密钥和checkintime和checkouttime变量,但事实并非如此。 为什么这不起作用,我怎么能做出像我想要的东西? (如果存在类似的东西)
如果我遗漏了这些内容的具体术语,我很抱歉,因为我说我是python编程的新手。
更多Clarity:我想要一大堆东西,任何东西,无论内容或长度,都要分配给代表那些东西的变量(或其他东西),就像以前一样,所以我可以把这个变量放在某个东西的中间,它仍然像原始代码那样运行。
答案 0 :(得分:1)
在这里使用一个函数可能是个好主意
def get_short_history(item):
return {
'user': item.user,
'email': item.email,
'phone': item.phone,
'status': item.status,
'usage': item.usage,
'checkouttime': item.checkouttime,
'checkintime': item.checkintime
}
然后您可以重复使用此块
items.history.append(get_short_history(item).update({checkintime: 'overwrite'}))
答案 1 :(得分:1)
......一个表示整块东西的变量。
然后您应该使用class,并选择properties。
class Item(object):
def __init__(self, user, ...):
self.user = user
...
someitem = Item(me, ...)
print someitem.timeout
答案 2 :(得分:0)
您可以使用“更新”方法修改字典的内容。请参阅以下示例:
dict1 = {'a':1, 'b':2}
dict1.update({'c':3})
因此,创建一个原始字典并使用modify方法更新它,而不是将值存储在某个临时变量中。
答案 3 :(得分:0)
尽管问题中的代码是否有效,但任何Python赋值都意味着分配对象的引用。这样,任何指定的对象实际上都是通过另一个参考共享的。换句话说, Python分配意味着共享。
如果共享块是常量,那么您可以将其视为内存空间使用的优化。如果共享块不是常数,那么它取决于原始意图。
任何Python变量都是对目标对象的引用。
现在,如果我理解你,你想要将新记录追加到历史列表中。 'timeout'
很特殊,ShortHis
将被共享。如果是这种情况,则必须使用共享块的新密钥(例如'ref'
)并使用ShortHis
块作为密钥的值。像这样:
record = { 'timeout': item.checkintime - item.checkouttime,
'ref': ShortHis }
item.history.append(record)
答案 4 :(得分:0)
或许这样吗?
class Item(object):
def __init__(self, user='', email='', phone=''):
self.user = user
self.email = email
self.phone = phone
self.time = ''
self.history = []
def add_short(self):
self.time = time.asctime()
self.history.append( {'user':self.user, 'time': self.time} )
def add_long(self):
self.time = time.asctime()
self.history.append( {'user':self.user, 'email': self.email,
'phone': self.phone, 'time': self.time } )
示例用法:
import time
from pprint import pprint as pp
item = Item('dudely', 'dudely@doright.com', '111-222-3333')
item.add_short()
time.sleep(1)
item.add_short()
time.sleep(1)
item.add_long()
time.sleep(1)
item.add_short()
time.sleep(1)
item.add_long()
pp(item.history)
示例输出:
[{'time': 'Tue Jul 17 04:26:05 2012', 'user': 'dudely'},
{'time': 'Tue Jul 17 04:26:06 2012', 'user': 'dudely'},
{'email': 'dudely@doright.com',
'phone': '111-222-3333',
'time': 'Tue Jul 17 04:26:07 2012',
'user': 'dudely'},
{'time': 'Tue Jul 17 04:26:08 2012', 'user': 'dudely'},
{'email': 'dudely@doright.com',
'phone': '111-222-3333',
'time': 'Tue Jul 17 04:26:09 2012',
'user': 'dudely'}]