如何根据不同的条件生成一些Python脚本?

如何根据不同的条件生成一些Python脚本?,python,appearance,Python,Appearance,我想根据不同的条件生成一些Python脚本。这意味着:我有一个恒定的Python脚本主体,在所有不同的条件下都是完全相同的,但是由于我有几个不同的条件,这些Python脚本中有一些区域需要更改。假设这是我的常数部分,在所有条件下都是相似的: import numpy as np variables = [] for i in range(100): variables.append(tempVariable) print variables 我有4个不同的条件,tempVariable

我想根据不同的条件生成一些Python脚本。这意味着:我有一个恒定的Python脚本主体,在所有不同的条件下都是完全相同的,但是由于我有几个不同的条件,这些Python脚本中有一些区域需要更改。假设这是我的常数部分,在所有条件下都是相似的:

import numpy as np

variables = []

for i in range(100):
 variables.append(tempVariable)

print variables
我有4个不同的条件,
tempVariable
的计算方式不同,如下所示:

条件1:
tempVariable=i

条件2:
tempVariable=i**2

条件3:
tempVariable=i**3

条件4:
tempVariable=i+4.34


请注意,我不想使用
if
语句切换这四个条件,因为这些条件实际上是不同的情况,并且不相关。最后,我想为这四种不同的条件和情况分别设置
变量
。我的想法是将这四种情况或条件放入一个txt文件中,并将Python脚本的常量部分视为另一个txt文件,迭代所有这四种情况或情况,并在将其添加到
变量之前添加计算
tempVariable
所需的部分。当然,它看起来很难看,更重要的是,我想把它发送给其他人,让他们能够使用它。如果有更好更通用的方法,我将不胜感激。在我的实际应用程序中,我有94个不同的条件或情况,如果我想将它们放在一些
if
elif
语句下,这将非常难看。任何建议或想法都将不胜感激。

如果您不需要在运行时更改条件,但在执行程序时: 您可以在文件的开头添加常量变量,也可以创建一个类似于
parameters
的文件,并存储所有条件以及在该文件中处于活动状态的条件。 然后导入该文件,并采用活动条件(参数)并充当它。

这里有一种方法:

variables = []
func_dict = {'linear': lambda x: x, 'squared': lambda x: x ** 2, 'cubed': lambda x: x ** 3}


def calculator(func, myArray):
    for i in range(10):
        myArray.append(func(i))


answers = {}
for func_name in func_dict:
    new_arr = []
    calculator(func_dict[func_name], new_arr)
    answers[func_name] = new_arr

print(answers)
输出:

{'linear': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 'squared': [0, 1, 4, 9, 16, 25, 36, 49, 64, 81], 'cubed': [0, 1, 8, 27, 64, 125, 216, 343, 512, 729]}

这样,当您有一个新函数时,您所需要做的就是将其添加到函数dict中。不需要更改任何其他内容。可能您可以进一步简化它。

如果您总是使用多项式,您可以有一个传递给函数的系数列表

对于您提供的条件,对象如下:

mylist = [[0,1,0,0],[0,0,1,0],[0,0,0,1],[4.34,1,0,0]]
然后,您的
n
th条件行必须如下所示:

Condition: tempVariable = mylist[n][0] + mylist[n][1]*i + mylist[n][2]*i**2 + mylist[n][3]*i**3 

通过建立通用条件,您将不需要此函数的多个副本

使用lambdas

下面是一个例子来说明这个想法

lambdas = [None]*4

lambdas[0] = lambda i : i

lambdas[1] = lambda i : i**2

lambdas[2] = lambda i : i**3

lambdas[3] = lambda i : i + 4.34


for i in range(0, 10):
    print( "=====  ", i )
    print( lambdas[0](i) )
    print( lambdas[1](i) )
    print( lambdas[2](i) )
    print( lambdas[3](i) )
您可以尝试:

def cond1(x):
    return x

def cond2(x):
    return x**2

def cond3(x):
    return x**3

def cond4(x):
    return x + 4.34

my_conds = (cond1, cond2, cond3, cond4)
variables = [list(map(cond, range(100))) for cond in my_conds]

最后,我找到了一个解决方案,它确实更适合存在无数条件(即1000种不同条件)的情况。事实上,我将所有的命令都放在一个文本文件中,该文件可以自动解析和读取为:

commands.txt

tempVariable = i
tempVariable = i**2
tempVariable = i**3
tempVariable = i + 4.34
然后,我像这样阅读和执行它们:

def Execute(command):
 variables = []

 for i in range(100):
  exec(command)
  variables.append(tempVariable)

 print variables

if __name__ == "__main__":
 conditions = open('commands.txt').read().split('\n')[:-1]
 map(Execute, conditions) 

那么您想要一个基本脚本,然后根据使用情况添加一些额外的代码?像模板吗?不清楚为什么不想在这里使用条件语句。这似乎正是适合这项工作的工具。或者可能是函数字典?@Carcigenicate注意,我在实际应用程序中有94种不同的条件,我不想创建一长串if语句来切换它们。如果我有4个或5个不同的条件,这很容易,但94相当高,并且会使代码的外观非常混乱。实际上,现在我读了更多,听起来你只是想要一些函数。使用函数泛化代码的典型“秘诀”是取相同的部分并将它们放入函数体中,然后取不同的部分并生成函数的参数。@AloneProgrammer条件是什么?给我一个样品,我喜欢这个。唯一的问题是,对于大指数,您将拥有只包含一个非零元素的大型数组。也许不是列出所有系数,而是将多项式次数和系数成对存储。或者,如果你的系数总是1,那么只是度。