0

我是 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 编程的新手。

更清晰:我希望将一大块东西,任何东西,无论内容或长度如何,都分配给一个代表该东西的变量(或其他东西),就像以前一样,所以我可以将该变量放在某物的中间它仍然像原始代码一样运行。

4

5 回答 5

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'}))
于 2012-07-17T07:13:31.840 回答
1

... 一个代表一整块东西的变量。

那么您应该使用一个具有可选属性的

class Item(object):
  def __init__(self, user, ...):
    self.user = user
     ...

someitem = Item(me, ...)
print someitem.timeout
于 2012-07-17T08:11:05.050 回答
0

您可以使用“更新”方法来修改字典的内容。参考下面的例子:

dict1 = {'a':1, 'b':2}
dict1.update({'c':3})

因此,创建一个原始字典并使用 modify 方法对其进行更新,而不是将值存储在某个临时变量中。

于 2012-07-17T07:14:18.387 回答
0

不管问题中的代码是否有效,任何 Python 赋值都意味着将引用分配给对象。这样,任何分配的对象实际上都通过一个引用共享。换句话说,Python 赋值意味着共享

如果共享块是恒定的,那么您可以将其视为内存空间使用的优化。如果共享块不是恒定的,那么它取决于初衷。

任何 Python 变量都是对目标对象的引用。

现在,如果我理解你的话,你想将新记录附加到历史列表中。'timeout'是特别的,是ShortHis要分享的。如果是这种情况,您必须将新密钥用于共享块(例如'ref')并将该ShortHis块用作密钥的值。像这样的东西:

record = { 'timeout': item.checkintime - item.checkouttime,
           'ref': ShortHis }

item.history.append(record)
于 2012-07-17T07:14:24.360 回答
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'}]
于 2012-07-17T08:31:11.040 回答