我编写了一个脚本,能够运行其中包含的所有进程,但是我只想运行所需的进程。
我认为我正在尝试使用与过去不同的列表用途,但是我不确定如何去做。
我有四个函数:foo1,foo2,foo3和foo4。我希望能够使用用户使用input()函数插入的特定数字来有选择地在python脚本本身中运行任何这些函数。可以在下面看到代码示例。
ListAllVSs = requests.get('https://' + LMIP + '/access/listvs', verify=False, auth=MyCreds)
ListVSOutput = ListAllVSs.content.splitlines()
for Line in ListVSOutput:
if b"<Index>" in Line:
IndexLines.append(Line)
NumbersList = [int(re.search(br"\d+", Integer).group()) for Integer in IndexLines]
for Number in NumbersList:
VSIDAndValue = (
('vs', str(Number)),
)
requests.get('https://' + LMIP + '/access/delvs', params=VSIDAndValue, verify=False, auth=MyCreds)
因此,这并不完全与单个函数相关。
例如,用户应输入“ 1”运行foo1,“ 2”运行foo2,“ 3”运行foo3,“ 4”运行foo4,“ 5”运行foo1和foo2,等等。所有可能的功能组合,总共将有15个可能的输入,任何数字(小于0或大于15)都应视为无效。
我想使用“ 0”来运行所有四个进程,由于Python如何为其列表位置编号,我认为这是可能的,但是如果需要的话,我可以将其设置为“ 15”。
谢谢!
答案 0 :(得分:3)
您可以使用按位运算符来测试进程的不同组合:
def foo1():
print("foo1()")
def foo2():
print("foo2()")
def foo3():
print("foo3()")
def foo4():
print("foo4()")
def input(n):
if n & (1 << 0) != 0: # (1 << 0) == 1
foo1()
if n & (1 << 1) != 0: # (1 << 1) == 2
foo2()
if n & (1 << 2) != 0: # (1 << 2) == 4
foo3()
if n & (1 << 3) != 0: # (1 << 3) == 8
foo4()
在此示例中,从1到15的所有数字都会给出一些输出。 1将打印“ foo1()” 4将打印“ foo3()” ... 如果要打印“ foo1()”和“ foo3()”,则应使用参数5(1 + 4)调用input()
了解这一点的关键是要注意,每个函数fooX都以2为基数调用以下数字:
n = 1 10 = 0001 2 -> foo1()
n = 2 10 = 0010 2 -> foo2()
n = 4 10 = 0100 2 -> foo3()
n = 8 10 = 1000 2 -> foo4()
和它们的总和只是对位应用的布尔or
(|
)操作:
(1 + 4) 10 = 0001 2 | 0100 2 = 0101 2 = 5 10
然后,您使用&
(按位and
)运算符比较给定的位是否设置为1,并调用相应的fooX()
。
答案 1 :(得分:1)
使用词典,对不起,我无法评论您的问题,我太新了。
"*alarm*:*job.heartbeat*"
如果您不明白这一点,可以给我一些示例代码吗?如果您想限制输入内容,也要赞扬此人 Limiting user input to a range in Python