Powiedzmy, że mam takiej sytuacji w Pythonie:Czy literał literowy Pythona zostanie oceniony w kolejności, w jakiej został napisany?
_avg = {'total':0.0, 'count':0} # HACK: side-effects stored here
def procedure(n):
_avg['count'] += 1
_avg['total'] += n
return n
def get_average():
return _avg['total']/_avg['count']
my_dict = {
'key0': procedure(0),
'key2': procedure(2),
'key1': get_average()
}
assert(my_dict['key1'] == 1.0)
wiem, że kolejność my_dict.keys()
jest niezdefiniowana, ale zastanawiam się, co jest to, czy inicjalizacji poprzez dosłowne tak jest gwarantowane w określonej kolejności. Czy wartość my_dict['key1']
zawsze będzie równa 1.0
jako zapewniona?
Dobra rozmowa. Chociaż to naprawdę ma znaczenie dla twojego kodu, powinieneś prawdopodobnie to sprawdzić, szczególnie ze względu na przenośność. – Marcin
Z wyjątkiem http://bugs.python.org/issue11205, który pokazuje, że istnieje błąd w implementacji Pythona z tą regułą. –