Python 多次检查变量
我正在编写一些分析脚本,其中有许多条件需要满足才能正确实现代码。代码看起来很混乱,因为我必须不断检查某些东西。这是我问题的简化版本 我有一个变量名“测量类型” 测量类型可以是3个值,“透射”、“反射”、“两者”。我需要执行两组不同的指令,这取决于测量类型是处于(“传输”还是“反射”)还是测量类型==“两者” 我将在这里简化我的问题,因为我认为实际的代码并不重要 如果Python 多次检查变量,python,if-statement,coding-style,Python,If Statement,Coding Style,我正在编写一些分析脚本,其中有许多条件需要满足才能正确实现代码。代码看起来很混乱,因为我必须不断检查某些东西。这是我问题的简化版本 我有一个变量名“测量类型” 测量类型可以是3个值,“透射”、“反射”、“两者”。我需要执行两组不同的指令,这取决于测量类型是处于(“传输”还是“反射”)还是测量类型==“两者” 我将在这里简化我的问题,因为我认为实际的代码并不重要 如果测量\u输入(“传输”、“反射”)我只需运行以下命令: table = pd.DataFrame(stuff) arr = [] f
测量\u输入(“传输”、“反射”)
我只需运行以下命令:
table = pd.DataFrame(stuff)
arr = []
for num in table:
arr.append(num)
plt.plot(stuff)
由于我必须考虑度量值\u type==“两者”
,因此我还必须运行此程序来检查:
table1 = pd.DataFrame(stuff)
arr1 = []
if measurement_type == 'both':
table2 = pd.DataFrame(stuff) #always same dimensions as table1
arr2 = []
for j in range(len(table)):
arr1.append(table['data'][j])
if measurement_type == 'both':
arr2.append(table2['data'][j]
plt.plot(stuff)
if measurement_type == 'both':
plt.plot(more stuff)
我必须运行后者,因为我需要考虑measurement\u type='both'
这是无法控制的,因为我必须检查“两者”是否存在
有更好的方法吗?
当我的分析脚本变得越来越长、越来越复杂时,我宁愿不必反复输入
,如果度量值
。您有两个基本上独立的操作:一个用于所有情况,另一个用于两者。正如您所看到的,您的原始代码有点难以遵循:
if measurement_type == 'both':
table2 = pd.DataFrame(stuff) #always same dimensions as table1
arr2 = []
for j in range(len(table)):
arr1.append(table['data'][j])
if measurement_type == 'both':
arr2.append(table2['data'][j]
提取独立于两个的部分
;检查并妥善处理您的特殊情况:
arr1 = list(table['data']) # This should be a straight conversion; no need to loop.
if measurement_type == 'both':
arr2 = list(table2['data']) #Similar conversion
如果您的表
类型未实现列表
转换,则至少使用理解而不是循环:
arr1 = [c for c in table['data']]
如果我是你,我会创建一个单独的函数,它接受一个参数measurement\u type
,并将操作分为两个逻辑部分。大概是这样的:
def plot_data(measurement_type):
table1 = pd.DataFrame(stuff)
arr1 = []
for j in range(len(table)):
arr1.append(table['data'][j])
plt.plot(stuff)
if measurement_type == 'both':
table2 = pd.DataFrame(stuff) #always same dimensions as table1
arr2 = []
for j in range(len(table)):
arr2.append(table2['data'][j]
plt.plot(more stuff)
这可能不是最有效的(您可能需要执行两次相同的循环),但是如果性能不是问题,那么将代码分解为更符合逻辑的部分可能会很有用。您的问题还不清楚。根据您的描述,如果您在第二个代码块中,您已经知道它是两者
;没有必要再检查一次,更不用说再检查两次了。我仍然必须检查两者
,因为如果不是两者,我会执行arr2。追加
会给我一个变量不存在错误。如果我不清楚,对不起,但我想说的是我正在运行第二块代码,而不是第一块。这是因为我希望相同的代码能够处理measurement\u type
的所有可能值。要运行第二个块而不是第一个块,您已经验证了它是两个
。请在该代码的开头查看您自己的评论:如果度量值类型=='both',我正在运行此命令:
如果不是这样,那么我们需要您提供您的逻辑的准确示例。请提供预期的。对不起,您是正确的,我已相应地更改了它