分配变量以表示代码块

时间:2012-07-17 06:33:17

标签: python variables

我是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:我想要一大堆东西,任何东西,无论内容或长度,都要分配给代表那些东西的变量(或其他东西),就像以前一样,所以我可以把这个变量放在某个东西的中间,它仍然像原始代码那样运行。

5 个答案:

答案 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'}]