如何根据不同的条件很好地生成一些 Python 脚本?
How can I generate some Python scripts based on different conditions nicely?
我想根据不同的条件生成一些 Python 脚本。这意味着:我的 Python 脚本有一个固定的主体,在所有不同的条件下都是完全相同的,但是由于我有几个不同的条件,所以在那些 Python 应该改变的脚本。假设这是我不变的部分,在所有条件下都是相似的:
import numpy as np
variables = []
for i in range(100):
variables.append(tempVariable)
print variables
我有 4 个不同的条件,其中 tempVariable
的计算方式不同:
条件一:tempVariable = i
条件二:tempVariable = i**2
条件三:tempVariable = i**3
条件四:tempVariable = i + 4.34
请注意,我不想使用if
语句来切换这四个条件,因为这些条件实际上是不同的情况并且没有关联。最后,我想对这四种不同的条件和情况分别进行 variables
。我的想法是,将这四种情况或条件放入一个 txt 文件中,并将 Python 脚本的常量部分视为另一个 txt 文件,并遍历所有这四种情况或情况,并添加计算所需的部分tempVariable
,然后将其附加到 variables
。当然,它看起来很丑,更重要的是我想把它发给其他人以便能够使用它。如果有更好的通用方法,我将不胜感激。在我的实际应用程序中,我有 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]}
有了这个,当你有一个新函数时,你需要做的就是将它添加到函数字典中。没有其他需要改变。也许您可以进一步简化它。
如果您总是使用多项式,您可能有一个传递给函数的系数列表。
根据您提供的条件,对象如:
mylist = [[0,1,0,0],[0,0,1,0],[0,0,0,1],[4.34,1,0,0]]
那么您的第 n
条条件行只需阅读:
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)
我想根据不同的条件生成一些 Python 脚本。这意味着:我的 Python 脚本有一个固定的主体,在所有不同的条件下都是完全相同的,但是由于我有几个不同的条件,所以在那些 Python 应该改变的脚本。假设这是我不变的部分,在所有条件下都是相似的:
import numpy as np
variables = []
for i in range(100):
variables.append(tempVariable)
print variables
我有 4 个不同的条件,其中 tempVariable
的计算方式不同:
条件一:tempVariable = i
条件二:tempVariable = i**2
条件三:tempVariable = i**3
条件四:tempVariable = i + 4.34
请注意,我不想使用if
语句来切换这四个条件,因为这些条件实际上是不同的情况并且没有关联。最后,我想对这四种不同的条件和情况分别进行 variables
。我的想法是,将这四种情况或条件放入一个 txt 文件中,并将 Python 脚本的常量部分视为另一个 txt 文件,并遍历所有这四种情况或情况,并添加计算所需的部分tempVariable
,然后将其附加到 variables
。当然,它看起来很丑,更重要的是我想把它发给其他人以便能够使用它。如果有更好的通用方法,我将不胜感激。在我的实际应用程序中,我有 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]}
有了这个,当你有一个新函数时,你需要做的就是将它添加到函数字典中。没有其他需要改变。也许您可以进一步简化它。
如果您总是使用多项式,您可能有一个传递给函数的系数列表。
根据您提供的条件,对象如:
mylist = [[0,1,0,0],[0,0,1,0],[0,0,0,1],[4.34,1,0,0]]
那么您的第 n
条条件行只需阅读:
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)