python的函数也可以作为对象传递,那么将函数放到列表里就可以顺序执行。
代码:
import time
def e1(t):
print(t, '执行n为奇数的程序1')
time.sleep(1)
def e2(t):
print(t,'执行n为奇数的程序2')
time.sleep(1)
def o1(t):
print(t, '执行n为偶数的程序1')
time.sleep(1)
def o2(t):
print(t, '执行n为偶数的程序2')
time.sleep(1)
if __name__ == "__main__":
n = 0
programs = []
while True:
if n % 2 == 0:
programs = [o1, o2]
else:
programs = [e1, e2]
for p in programs:
p(n)
n += 1
执行结果:
0 执行n为偶数的程序1
0 执行n为偶数的程序2
1 执行n为奇数的程序1
1 执行n为奇数的程序2
2 执行n为偶数的程序1
2 执行n为偶数的程序2
3 执行n为奇数的程序1
3 执行n为奇数的程序2
4 执行n为偶数的程序1
4 执行n为偶数的程序2
另一种方式,函数后面带上参数,就可以直接在列表里运行:
import time
def e1(t):
print(t, '执行n为奇数的程序1')
time.sleep(1)
def e2(t):
print(t,'执行n为奇数的程序2')
time.sleep(1)
def o1(t):
print(t, '执行n为偶数的程序1')
time.sleep(1)
def o2(t):
print(t, '执行n为偶数的程序2')
time.sleep(1)
if __name__ == "__main__":
n = 0
programs = []
while True:
if n % 2 == 0:
programs = [o1(n), o2(n)]
else:
programs = [e1(n), e2(n)]
n += 1
运行结果相同,相当于在创建列表的过程中就执行了函数。
0 执行n为偶数的程序1
0 执行n为偶数的程序2
1 执行n为奇数的程序1
1 执行n为奇数的程序2
2 执行n为偶数的程序1
2 执行n为偶数的程序2
3 执行n为奇数的程序1
3 执行n为奇数的程序2
4 执行n为偶数的程序1
4 执行n为偶数的程序2
两种方式的混合使用:
import time
def f1(t):
print(t, end='')
if __name__ == "__main__":
n = 0
programs = []
txt = ''
while True:
if n % 2 == 0:
txt = 'Python\n'
else:
txt = 'World\n'
programs = [f1, f1('Hello ')] # 这里的第一个元素f1并未赋参,所以不执行,第一个元素的含义是f1这个函数本身。而第二个元素f1('Hello ')赋参了,直接执行,第二个元素的含义是f1('Hello ')的执行结果。
programs[0](txt) # 将刚才第一个元素f1函数赋参执行
time.sleep(1)
n += 1
"""
# 运行结果:
Hello Python
Hello World
Hello Python
Hello World
Hello Python
Hello World
Hello Python
Hello World
Hello Python
"""
还有一个:
def adder(a):
print(a[0] + a[1]) # *args将参数打包成了元组,所以需要解包使用
def checker(function, order, *args): # 需要通过确认参数才执行的函数
if order:
function(args)
else:
return
checker(adder, True, 2, 3)