代码之家  ›  专栏  ›  技术社区  ›  Mus mzuba

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

  •  -1
  • Mus mzuba  · 技术社区  · 5 年前

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

    我不明白的是为什么这部分会出问题( 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]))))
    

    我错过了什么?

    0 回复  |  直到 5 年前
        1
  •  -1
  •   Silly Freak    5 年前

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

    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字符串的原因之一。