Тем не менее, я также хотел бы передать вывод в виде списка
Вы имеете в виду «вернуть вывод в виде словаря» - будьте осторожны; -)
Одна вещь, которую вы могли бы сделать, это использовать способность интерпретатора Python автоматически преобразовывать в строку результат любого выражения. Для этого создайте пользовательский подкласс dict
, который, когда его попросят преобразовать себя в строку, выполнит любое удобное форматирование, какое вы захотите. Например,
class PrettyDict(dict):
def __str__(self):
return '''Pretty printer status check 0.02v
NOTE: This is so totally not written for giant robots
=================================
System operational: ... %s
Time to ion canon charge is %dm %ds
Booster rocket in %s state
(other stuff)
''' % (self.conf_op and 'ok' or 'OMGPANIC!!!',
self.t_canoncharge / 60, self.t_canoncharge % 60,
BOOSTER_STATES[self.booster_charge],
... )
Конечно, вы, вероятно, могли бы придумать более красивый способ написания кода, но основная идея заключается в том, что метод __str__
создает симпатично напечатанную строку, которая представляет состояние объекта и возвращает его. Затем, если вы вернете PrettyDict
из функции check_status()
, когда вы наберете
>>> check_status()
вы бы увидели
Pretty printer status check 0.02v
NOTE: This is so totally not written for giant robots
=================================
System operational: ... ok
Time to ion canon charge is 9m 21s
Booster rocket in AFTERBURNER state
Range check is optimal
Rocket fuel is 10h 19m 40s to depletion
Beer served is type WICKSE LAGER, chill optimal
Suggested catchphrase is 01_FIGHTING_SPIRIT_GOGOGO
Virtual ... on
Единственный улов в том, что
>>> not_robot_stat = check_status()
>>> print not_robot_stat
даст вам то же самое, потому что такое же преобразование в строку происходит как часть функции print
. Но для использования этого в некотором реальном приложении я сомневаюсь, что это имело бы значение. Если вы действительно хотите, чтобы возвращаемое значение было чистым, вы могли бы сделать
>>> print repr(not_robot_stat)
вместо этого, и он должен показать вам
{'cond_op': 1, 't_canoncharge': 1342, 'stage_booster': 5, 'range_est_sigma': 0.023, 'fuel_est': 32557154, 'beer_type': 31007, 'beer_temp': 2, 'catchphrase_suggestion': 1023, 'virtual_on': 'hell yes'}
Дело в том, что, как говорили другие авторы, у функции в Python нет способа узнать, что будет сделано с ее возвращаемым значением ( EDIT : ладно, может быть странный способ взлома байт-кода, но не делайте этого) - но вы можете обойти это в тех случаях, когда это имеет значение.