Могу ли я написать код Python, который изменяет себя во время выполнения? - PullRequest
0 голосов
/ 16 мая 2018

Я имею в виду,

target_ZCR_mean = sample_dataframe_summary['ZCR'][1]
target_ZCR_std = sample_dataframe_summary['ZCR'][2]
lower_ZCR_lim = target_ZCR_mean - target_ZCR_std
upper_ZCR_lim = target_ZCR_mean + target_ZCR_std

target_RMS_mean = sample_dataframe_summary['RMS'][1]
target_RMS_std = sample_dataframe_summary['RMS'][2]
lower_RMS_lim = target_RMS_mean - target_RMS_std
upper_RMS_lim = target_RMS_mean + target_RMS_std

target_TEMPO_mean = sample_dataframe_summary['Tempo'][1]
target_TEMPO_std = sample_dataframe_summary['Tempo'][2]
lower_TEMPO_lim = target_TEMPO_mean - target_TEMPO_std
upper_TEMPO_lim = target_TEMPO_mean + target_TEMPO_std

target_BEAT_SPACING_mean = sample_dataframe_summary['Beat Spacing'][1]
target_BEAT_SPACING_std = sample_dataframe_summary['Beat Spacing'][2]
lower_BEAT_SPACING_lim = target_BEAT_SPACING_mean - target_BEAT_SPACING_std
upper_BEAT_SPACING_lim = target_BEAT_SPACING_mean + target_BEAT_SPACING_std

каждый блок из четырех строк кода очень похожи друг на друга, за исключением нескольких символов.

Могу ли я написать функцию, класс или некоторыедругой фрагмент кода, такой, что я могу обернуть в него всего лишь шаблон из четырех строк кода и позволить ему изменить себя во время выполнения, чтобы заставить код выполнять работу вышеуказанного кода ...?

Кстати, я использую Python 3.6.

1 Ответ

0 голосов
/ 16 мая 2018

Если вы обнаружите, что храните много таких переменных, особенно если они связаны между собой, почти наверняка есть лучший способ сделать это.Динамическое изменение источника никогда не является решением.Одним из способов является использование функции для сохранения повторяющейся логики и использование namedtuple для хранения результирующих данных:

import collections
Data = collections.namedtuple('Data', 'mean, std, lower_lim, upper_lim')

def get_data(key, sample_dataframe_summary):
     mean = sample_dataframe_summary[key][1]
     std = sample_dataframe_summary[key][2]
     lower_lim = mean - std
     upper_lim = mean + std
     return Data(mean, std, lower_lim, upper_lim)

zcr = get_data('ZCR', sample_dataframe_summary)
rms = get_data('RMS', sample_dataframe_summary)
tempo = get_data('Tempo', sample_dataframe_summary)
beat_spacing = get_data('Beat Spacing', sample_dataframe_summary)

, тогда вы можете получить доступ к данным с помощью обозначения ., например zcr.meanи tempo.upper_lim

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...