为什么这个数字占位符不起作用



我编写了一个脚本,该脚本在命令行接受用户输入,并执行计算以确定某人的大致年龄。

我不明白的是为什么这部分会出错(invalid syntax错误(:

print("That makes you approximately %d years old", % (int(year - int(sys.argv[2]))))

完整的脚本如下:

from datetime import date
import sys
greeting = sys.argv[1]
year = int(date.today().year)
if __name__ == '__main__':
print("This script is called: ", sys.argv[0])
print("Your message is: ", greeting)
print("Your year of birth is: ", sys.argv[2])
print("That makes you approximately %d years old", % (int(year - int(sys.argv[2]))))

我在这里错过了什么?

%是一个二进制运算符,其第一个操作数必须是字符串。最后有一个逗号太多了:

print("format %d", % (num))  # wrong
print("format %d" % (num))  # correct

除此之外,你可能会惊讶于这里的括号没有任何作用:

print("format %d" % num)  # also correct

这是一个奇怪的副作用,它不是像函数调用一样的东西,而是一个运算符。这也意味着第二个操作数通常是一个元组,以允许多个格式化操作数:

print("format %d" % (num,))  # the best way

为什么这样更好?举个例子:

tup = ()
print("format %s" % tup)  # TypeError: not enough arguments for format string
print("format %s" % (tup))  # same
print("format %s" % (tup,))  # correct

这就是我更喜欢更新格式函数,甚至更好的f字符串的原因之一。

最新更新