python如何动态地生成变量


前言

有时候变量名的设置非常有规律,比如路径名称red_path,green_path,blue_path.这三个变量名其实就只改变了rgb而已,其实我们每次输入都是在做重复的工作而已,对于一些强迫症看待长长的代码而且代码大部分都是一样的真的很‘强迫难受’


一、主要用到的函数—exec()

简单来说exec()就是可以让你输入一个字符串,然后python把字符串的内容当做操作语句来运行。

1.直接上代码

这段代码的效果主要看循环部分,我的操作其实都是和’blue’, ‘red’, 'yellow’三个颜色相关的,但是为了代码简洁我不愿意blue_path,red_path,yellow_path这样复制粘贴然后改个颜色来操作。使用exec()就很好的实现动态生成变量来操作的目的。

    import os
    from batchgenerators.utilities.file_and_folder_operations import *
    
    BATCH_SIZE = 8
    colors = ['blue', 'red', 'yellow']
    submission_ids = public_hpa_df_17_single['Image'].values.tolist()
    # for img in public_hpa_df_17_single['Image'].values:
    for i in tqdm(range(0, len(submission_ids), BATCH_SIZE), total=int(np.ceil(len(submission_ids) / BATCH_SIZE))):

        Id = [id.split('/')[-1] for id in submission_ids[i:(i + BATCH_SIZE)]]
        Id_used = [id for id in Id if not os.path.exists(join(seglabel_path, id+'_segmentation.png'))]
        if Id_used == []:
            continue
        label_paths = []
        red_imgs, yellow_imgs, blue_imgs = [], [], []
        for id in Id_used:
            label_path = join(seglabel_path, id+'_segmentation.png')
            exec(f'label_paths.append(label_path)')
            for color in colors:
                # img = img.replace('images.', '')
                img_name = f'{id}_{color}.png'
                exec(f'{color}_path = join(image_path, img_name)')
                exec(f'{color}_img = np.array(Image.open({color}_path))')
                exec(f'{color}_imgs.append({color}_img)')

2.相关函数eval()

这个函数也是可以直接运行字符串所代表的的操作的。给个例子,下面eval()会运行join函数把image_path和img_name路径连接起来,不同于exec(),这里eval()会有一个返回值,我们将返回值赋给了red_path,有时候eval()可能对于函数的运行来说更方便一些,比如model=eval(*)(par1,par2)*代表vgg16,resnet18等生成网络结构的函数名,这样做我自己感觉更舒服一些。当然exec(‘model=vgg16(par1,par2)’)也会生成mdoel变量。

    import os
    from batchgenerators.utilities.file_and_folder_operations import *
    
    red_path = eval(f'join(image_path, img_name)')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值