关于精简(函数化)因为输入数据多条而导致的冗杂代码的总结

碰到很多变量名时。
尤其是在处理数据的时候,会面临着数据名多而导致的代码冗杂问题。
比如说在读取数据的时候,如果目录、路径比较多,代码会比较冗杂
但同时,绝对路径往往可以分割成主目录,文件序号,文件前缀名,文件后缀名等部分。
通过处理字符串,将字符串转化为变量,类内属性的赋值等方法可以简化代码

当然,首先我们都知道使用数组(列表)来存储变量名,要把被重复调用的代码封装成函数或者类,然后将输入数据以参数的形式给它们,这是最基本的。

那如果不使用数组(列表)呢?

一、生成具有一定规律的字符串

利用Python 的 f 关键字,例子如下:

for i in range(5):
    str1 = f'{i**2}_question_{i+1}'
    print(str1)

输出

0_question_1
1_question_2
4_question_3
9_question_4
16_question_5

二、对象属性赋值函数 setattr

利用 Python 内置的 为对象的属性赋值的函数 setattr 可以完成对象级别的具有规律性属性变量的赋值。
注意:需要取到该属性的值时,要用 getattr 内置函数。
例子

class Big:
    def __init__(self):
        pass


big = Big()
for i in range(5):
    setattr(big, f'small{i+1}', np.random.rand(3))
for i in range(5):
    tmp_value = getattr(big, f'small{i+1}')
    print(tmp_value)

输出

[0.14843873 0.54310117 0.22508172]
[0.6554616  0.49570728 0.41131248]
[0.93567319 0.24442312 0.17684138]
[0.2707888  0.11886321 0.87704171]
[0.32423134 0.81861119 0.89903461]

三、将字符串转换为变量

globals() locals() 两个内置函数 能达到将字符串转换为变量的目的。
例子如下

例1

str = "list_path"
path1 = '/mnt/data3/home/data1/file1'
path2 = '/mnt/data3/home/data1/file2'
locals()[str] = [path1,path2]
print('\nlist_path type: ',type(list_path))
print('list_path value: ',list_path)

输出:

list_path type:  <class 'list'>
list_path value:  ['/mnt/data3/home/data1/file1', '/mnt/data3/home/data1/file2']

例2

dir_OnlyRGB = 'D:/Desktop/OnlyRGB/'
dir_DepthMSE = 'D:/Desktop/DepthMSE/'

file_name_loss = 'save_list_loss_depth.npy'
file_name_psnr = 'save_list_psnr.npy'

list_path_OnlyRGB = []
list_path_OnlyRGB.append(dir_OnlyRGB+file_name_loss)
list_path_OnlyRGB.append(dir_OnlyRGB+file_name_psnr)

list_path_DepthMSE = []
list_path_DepthMSE.append(dir_DepthMSE+file_name_loss)
list_path_DepthMSE.append(dir_DepthMSE+file_name_psnr)

list_loss_type = ['list_path_OnlyRGB','list_path_DepthMSE']

for loss_type in  list_loss_type:
    for path in globals()[loss_type]:
        print(path)

输出:

D:/Desktop/OnlyRGB/save_list_loss_depth.npy
D:/Desktop/OnlyRGB/save_list_psnr.npy
D:/Desktop/DepthMSE/save_list_loss_depth.npy
D:/Desktop/DepthMSE/save_list_psnr.npy

globals() :返回当前作用域内全局变量的字典

locals() 函数功能返回当前作用域内的局部变量的字典

四、glob函数 获取文件的全路径

        self.color_paths = sorted(
            glob.glob(os.path.join(self.input_folder, 'colour', '*.png')))

参考

  1. 3 Ways to Convert String to Variable Name in Python

  2. 关键字local、global和内置函数【locals、globals】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值