如何解决如何使“与返回语句相关”的代码成为函数的参数值?
这里是工作代码,为简洁起见,省略了一些行。
class DataGenerator():
def __init__(self):
self.unique_id_list = []
self.demographic_list = []
self.output_list = []
# .. some code omitted
def create_row(self,creation_label,criteria_func,n_row_range_list):
output_placeholder = []
for curr_id in self.unique_id_list:
for curr_dict in self.demographic_list:
if curr_dict['ID'] == curr_id:
extracted_demographic = curr_dict
n_iter = random.randint(n_row_range_list[0],n_row_range_list[1])
for n in range(n_iter):
single_output = criteria_func()
merged_dicts = dict(extracted_demographic,**single_output)
output_placeholder.append(merged_dicts)
return output_placeholder
class GeneratePcRow():
def __init__(self,icd_9_gen,service_code_gen,atc_gen):
self.icd_9_gen = icd_9_gen
self.service_code_gen = service_code_gen
self.atc_gen = atc_gen
def generate_pc_row(self):
fake = random_setup()
icd9_obj = self.icd_9_gen
serviceCode_obj = self.service_code_gen
atc_obj = self.atc_gen
return {'PERS_CAPB_PRVD_SPEC_AD': np.random.choice(['GP','PSYC','UROL'],p=[0.4,0.5,0.1]),'START_DT': fake.date_between(start_date='-2y',end_date='-1y'),'END_DT': fake.date_between(start_date='-2y','DELV_SITE_FUNCTR_TYPE_CODE': np.random.choice(['POFF','IPSR','AMBU'],p=[0.333,0.333,0.334]),'ICD9': icd9_obj.create_icd9(),'SERVICE_CODE': serviceCode_obj.create_service_code(),'ATC': atc_obj.create_atc(),}
def random_setup():
seed = None
random.seed(seed)
np.random.seed(seed)
Faker.seed(seed)
fake = Faker()
return fake
# Main
dg_obj = DataGenerator()
pc_gen_obj = GeneratePcRow(
icd_9_gen = Icd9Generator(p_three_digit_code=0.3,p_four_digit_code=0.3,p_five_digit_code=0.3,p_v_code=0.1,inclusion_list=[],exclusion_list=[]),service_code_gen = ServiceCodeGenerator(p_service=0.9,p_lab=0.1,exclusion_list=[12415125]),atc_gen = AtcGenerator(exclusion_list=[12415125]))
pc_data_part1 = dg_obj.create_row(creation_label='PC data part 1',criteria_func=pc_gen_obj.generate_pc_row,n_row_range_list=[1,1],)
print(pc_data_part1)
但是,理想情况下,为避免重复,我想以某种方式将返回上下文代码{'PERS_CAPB_PRVD_SPEC_AD': np.random.choice(['GP',}
从generate_pc_row(self)
函数内部移至接口层。我在下面显示了我想做的事情,但这是不正确的。即,我为gen_criteria
添加了另一个函数参数(GeneratePcRow()
),以便以后可以为其他用例指定gen_criteria
值。
class DataGenerator():
def __init__(self):
self.unique_id_list = []
self.demographic_list = []
self.output_list = []
# .. some code omitted
def create_row(self,atc_gen,gen_criteria):
self.icd_9_gen = icd_9_gen
self.service_code_gen = service_code_gen
self.atc_gen = atc_gen
def generate_pc_row(self):
fake = random_setup()
icd9_obj = self.icd_9_gen
serviceCode_obj = self.service_code_gen
atc_obj = self.atc_gen
return gen_criteria
def random_setup():
seed = None
random.seed(seed)
np.random.seed(seed)
Faker.seed(seed)
fake = Faker()
return fake
# Main
dg_obj = DataGenerator()
pc_gen_obj = GeneratePcRow(
icd_9_gen = Icd9Generator(p_three_digit_code=0.3,atc_gen = AtcGenerator(exclusion_list=[12415125]),gen_criteria = {'PERS_CAPB_PRVD_SPEC_AD': np.random.choice(['GP',} )
pc_data_part1 = dg_obj.create_row(creation_label='PC data part 1',)
print(pc_data_part1)
错误(NameError: name 'fake' is not defined
)表示找不到对fake
和icd9_obj
的引用,这并不意外,但是我有点困惑如何在我的计算机中引用它们。情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。