Python 如何制作;“与报表相关的返回”;要成为函数参数值的代码?
以下是工作代码,为了简洁起见省略了一些行Python 如何制作;“与报表相关的返回”;要成为函数参数值的代码?,python,python-3.x,parameters,parameter-passing,Python,Python 3.x,Parameters,Parameter Passing,以下是工作代码,为了简洁起见省略了一些行 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,
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', end_date='-1y'),
'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','PSYC','UROL',p=[0.4,0.5,0.1]),'START_DT假.date介于(START_date='-2y',end_date='-1y'),'end_DT假.date介于(START_date=-2y',end_date之间),'DELV_SITE_FUNCTR_TYPE_CODE':np.随机选择(['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(),}
从内部生成pc_行(自)
函数到接口层。我在下面展示了我想做的事情,但这是不正确的。也就是说,我为添加了另一个函数参数(generateCrow()
),以便以后可以为其他用例指定gen_criteria
值gen_criteria
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, 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, 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]), gen_criteria = {'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', end_date='-1y'), '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(), } ) 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)
错误()表示找不到对namererror:name'fake'未定义
和fake
的引用,这并非意外,但我有点困惑如何在我的案例中引用它们。“不正确”-什么不正确?您是否收到错误消息,如果收到,请将错误消息的全文编辑到您的问题中。你的代码是a吗?如果没有,你应该完成它,这样任何人都可以将它粘贴到文件中,而不添加任何内容,看到与你相同的错误-这意味着你应该包含任何所需的最小数据来查看结果。也许在你构建pc_gen_obj之前,你可以声明一个新的伪对象,即icd9_obj
然后将其也传递到init函数中,而不是在generate_pc_行中生成它(或者另外,不确定该函数正在做什么)“它不正确”-什么不正确?您是否收到错误消息,如果收到,请将错误消息的全文编辑到您的问题中。你的代码是a吗?如果没有,你应该完成它,这样任何人都可以将它粘贴到文件中,而不添加任何内容,看到与你相同的错误-这意味着你应该包含任何所需的最小数据来查看结果。也许在你构建pc_gen_obj之前,你可以声明一个新的伪对象,即fake=random_setup()
然后将其也传递到init函数中,而不是在generate_pc_行中生成它(或者另外,不确定该函数正在做什么)fake=random_setup()