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

news/2024/11/20 11:27:08/

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

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

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

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

利用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):passbig = 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】


http://www.ppmy.cn/news/18779.html

相关文章

VUE中的provide和inject用法

一、Vue中 常见的组件通信方式可分为三类 父子通信 父向子传递数据是通过 props&#xff0c;子向父是通过 events&#xff08;$emit&#xff09;&#xff1b; 通过父链 / 子链也可以通信&#xff08;$parent / $children&#xff09;&#xff1b; ref 也可以访问组件实例&…

Python基础学习三

字符串 一个简单的例子 myString "" print (type(myString))执行完以上的代码&#xff0c;结果输出为&#xff1a; <class str>type() 方法是很重要的方法&#xff0c;它返回括号内变量的类型。和其它语言都是一样的。 几个重要的方法 stringVar.count(‘…

3.5 拉普拉斯定理

文章目录基本概念拉普拉斯定理Python实现结语基本概念 在学习拉普拉斯定理之前&#xff0c;先介绍几个重要概念,第一个概念是k阶子式。k-阶子式是指挑选矩阵的k行&#xff0c;k列&#xff0c;按原来的顺序组成的子矩阵的行列式 &#xff0c;记号比较复杂&#xff0c;我举个例子…

[python刷题模板] 树的直径/换根DP

[python刷题模板] 树的直径/换根DP 一、 算法&数据结构1. 描述2. 复杂度分析3. 常见应用4. 常用优化二、 模板代码1. 单纯询问树的直径值2. 求出树的直径两端搞事情3. 换根DP求树的直径(大炮打蚊子&#xff0c;别这么做&#xff0c;只是用来帮助理解换根DP)4. 换根dp求特定…

温室大棚(Python)

Python——广度优先搜索遍历——温室大棚 温室大棚问题 问题引入 【问题描述】 在一个温室大棚中种有西红柿。该温室大棚使用种植架来种植西红柿,并使用人造光来照射西红柿。在种植架上的西红柿果实以二叉树的结构排列,二叉树的结点代表西红柿,二叉树的链接代表茎。不幸的…

一文搞懂go并发编程设计原理

前言 主要学习其设计原则&#xff0c;大体流程&#xff0c;权衡利弊 不要纠结于部分难懂的实现细节&#xff0c;因为不同的人对相同接口的实现细节不一样&#xff0c;就算是相同的人实现两次也可能不一样 context context的作用主要有两个&#xff1a; 在整个请求的执行过程…

《你当像鸟飞往你的山》教育让你内心的山更高,更广

《你当像鸟飞往你的山》教育让你内心的山更高&#xff0c;更广 塔拉韦斯特弗&#xff0c;美国作家、历史学家。1986年生于美国爱达荷州的山区。自学考取杨百翰大学&#xff0c;2009年获得剑桥大学哲学硕士学位&#xff0c;2014年获剑桥大学历史学博士学位。2018年出版处女座《你…

【每日一题Day94】LC1824最少侧跳次数 | 贪心

最少侧跳次数【LC1824】 给你一个长度为 n 的 3 跑道道路 &#xff0c;它总共包含 n 1 个 点 &#xff0c;编号为 0 到 n 。一只青蛙从 0 号点第二条跑道 出发 &#xff0c;它想要跳到点 n 处。然而道路上可能有一些障碍。 给你一个长度为 n 1 的数组 obstacles &#xff0c;…