Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何制作;“与报表相关的返回”;要成为函数参数值的代码?_Python_Python 3.x_Parameters_Parameter Passing - Fatal编程技术网

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
icd9_obj
的引用,这并非意外,但我有点困惑如何在我的案例中引用它们。

“不正确”-什么不正确?您是否收到错误消息,如果收到,请将错误消息的全文编辑到您的问题中。你的代码是a吗?如果没有,你应该完成它,这样任何人都可以将它粘贴到文件中,而不添加任何内容,看到与你相同的错误-这意味着你应该包含任何所需的最小数据来查看结果。也许在你构建pc_gen_obj之前,你可以声明一个新的伪对象,即
fake=random_setup()
然后将其也传递到init函数中,而不是在generate_pc_行中生成它(或者另外,不确定该函数正在做什么)“它不正确”-什么不正确?您是否收到错误消息,如果收到,请将错误消息的全文编辑到您的问题中。你的代码是a吗?如果没有,你应该完成它,这样任何人都可以将它粘贴到文件中,而不添加任何内容,看到与你相同的错误-这意味着你应该包含任何所需的最小数据来查看结果。也许在你构建pc_gen_obj之前,你可以声明一个新的伪对象,即
fake=random_setup()
然后将其也传递到init函数中,而不是在generate_pc_行中生成它(或者另外,不确定该函数正在做什么)