Performance: leverage dict comprehension in PEP-0274
PEP-0274 introduced dict comprehensions to replace dict constructor with a sequence of length-2 sequences, these are benefits copied from [1]: The dictionary constructor approach has two distinct disadvantages from the proposed syntax though. First, it isn't as legible as a dict comprehension. Second, it forces the programmer to create an in-core list object first, which could be expensive. Nova dropped python 2.6 support, we can leverage this now. There is deep dive about PEP-0274[2] and basic tests about performance[3]. Note: This commit doesn't handle dict constructor with kwagrs. This commit also adds a hacking rule. [1]http://legacy.python.org/dev/peps/pep-0274/ [2]http://doughellmann.com/2012/11/12/the-performance-impact-of-using-dict-instead-of-in-cpython-2-7-2.html [3]http://paste.openstack.org/show/154798/ Change-Id: Ifb5cb05b9cc2b8758d5a8e34f7792470a73d7c40
This commit is contained in:
@@ -86,9 +86,7 @@ class BlockDeviceDict(dict):
|
||||
if bdm_dict.get('device_name'):
|
||||
bdm_dict['device_name'] = prepend_dev(bdm_dict['device_name'])
|
||||
# NOTE (ndipanov): Never default db fields
|
||||
self.update(
|
||||
dict((field, None)
|
||||
for field in self._fields - do_not_default))
|
||||
self.update({field: None for field in self._fields - do_not_default})
|
||||
self.update(list(bdm_dict.iteritems()))
|
||||
|
||||
def _validate(self, bdm_dict):
|
||||
@@ -139,8 +137,8 @@ class BlockDeviceDict(dict):
|
||||
non_computable_fields = set(['boot_index', 'disk_bus',
|
||||
'guest_format', 'device_type'])
|
||||
|
||||
new_bdm = dict((fld, val) for fld, val in legacy_bdm.iteritems()
|
||||
if fld in copy_over_fields)
|
||||
new_bdm = {fld: val for fld, val in legacy_bdm.iteritems()
|
||||
if fld in copy_over_fields}
|
||||
|
||||
virt_name = legacy_bdm.get('virtual_name')
|
||||
|
||||
@@ -203,8 +201,8 @@ class BlockDeviceDict(dict):
|
||||
copy_over_fields |= (bdm_db_only_fields |
|
||||
bdm_db_inherited_fields)
|
||||
|
||||
legacy_block_device = dict((field, self.get(field))
|
||||
for field in copy_over_fields if field in self)
|
||||
legacy_block_device = {field: self.get(field)
|
||||
for field in copy_over_fields if field in self}
|
||||
|
||||
source_type = self.get('source_type')
|
||||
destination_type = self.get('destination_type')
|
||||
|
||||
Reference in New Issue
Block a user