def bar(line):
t = s = 0
for _ in line:
if line == "t":
t += 1
else:
s += 1
return t, s
相当于:
def foo(line):
t, s = (1, 0) if line == "t" else (0, len(line))
return t, s
测试一下:
import random
NUM_TESTS = 100
MAX_STR_LEN = 10
def get_rand_chs(l):
for _ in range(l):
o = random.randint(ord('a'), ord('z'))
yield chr(o)
def get_rand_str():
l = random.randint(0, MAX_STR_LEN)
return ''.join(ch for ch in get_rand_chs(l))
for _ in range(NUM_TESTS):
rand_str = get_rand_str()
print(f'Testing {rand_str!r}...')
assert bar(rand_str) == foo(rand_str)
注意:OP,你的意思可能是:
def bar(line):
t = s = 0
for _ in line:
if _ == "t":
t += 1
else:
s += 1
return t, s
如果是这样,那么t 所做的就是计算"t"s 的数量,s 计算其他字符的数量,这可以分两行完成:
def foo(line):
t = line.count("t")
s = len(line) - t
return t, s
如果您不介意拨打两次line.count("t"),当然可以一行完成。
根据@kaya3 的评论,这里有一个更紧凑的替代方案:
def foo(line):
s = len(line) - (t := line.count("t"))
return t, s
仅供参考,可以使用相同的测试代码来验证它们是否等效。