【问题标题】:How to print like printf in Python3?如何在 Python3 中像 printf 一样打印?
【发布时间】:2013-10-18 19:03:03
【问题描述】:

在 Python 2 中我使用过:

print "a=%d,b=%d" % (f(x,n),g(x,n))

我试过了:

print("a=%d,b=%d") % (f(x,n),g(x,n))

【问题讨论】:

  • % 一直是字符串运算符,与print 语句无关。例如,您可以使用s="a=%d,b=%d"%(f(x,n),g(x,n)) 创建一个字符串,然后使用print s 打印该字符串。

标签: python string python-3.x


【解决方案1】:

在 Python2 中,print 是引入语句的关键字:

print "Hi"

在 Python3 中,print 是一个可以调用的函数:

print ("Hi")

在这两个版本中,% 是一个运算符,它需要左侧的字符串和右侧的值或值元组或映射对象(如 dict)。

所以,你的行应该是这样的:

print("a=%d,b=%d" % (f(x,n),g(x,n)))

另外,对于 Python3 和更新版本的建议是使用{}-style 格式而不是 %-style 格式:

print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))

Python 3.6 引入了另一种字符串格式化范例:f-strings

print(f'a={f(x,n):d}, b={g(x,n):d}')

【讨论】:

  • or: print('a={first:4.2f}, b={second:03d}'.format(first=f(x,n),second=g(x,n))) 这个例子展示了如何使用 printf 风格的修饰符并且仍然使用关键字。
  • @rapt,它有一些巨大的优势。最重要的是,您只能多次引用相同的格式或无序引用:“{1}、{1}、{0} 和 {1}”.format("eggs","spam")= ="垃圾邮件、垃圾邮件、鸡蛋和垃圾邮件"
【解决方案2】:

最推荐的做法是使用format 方法。阅读更多关于它的信息here

a, b = 1, 2

print("a={0},b={1}".format(a, b))

【讨论】:

    【解决方案3】:

    来自O'Reilly's Python Cookbook 的简单 printf() 函数。

    import sys
    def printf(format, *args):
        sys.stdout.write(format % args)
    

    示例输出:

    i = 7
    pi = 3.14159265359
    printf("hi there, i=%d, pi=%.2f\n", i, pi)
    # hi there, i=7, pi=3.14
    

    【讨论】:

    • 嘿...PRINTFORMAT...?回到 60 多年前的 FORTRAN 时代:)
    【解决方案4】:

    Python 3.6 引入了用于内联插值的 f 字符串。更好的是它扩展了语法以允许格式说明符与插值。我在谷歌上搜索时一直在做的事情(并遇到了这个老问题!):

    print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')
    

    PEP 498 有详细信息。而且...它用其他语言中的格式说明符对我的小毛病进行了分类——允许说明符本身可以是表达式!耶!见:Format Specifiers

    【讨论】:

    • 注意:这也是将变量注入字符串的最高效方式。
    • 因为python2已经被淘汰了,这应该是最好的答案了。
    【解决方案5】:

    简单示例:

    print("foo %d, bar %d" % (1,2))

    【讨论】:

      【解决方案6】:

      一个更简单的。

      def printf(format, *values):
          print(format % values )
      

      然后:

      printf("Hello, this is my name %s and my age %d", "Martin", 20)
      

      【讨论】:

        【解决方案7】:

        因为您的%print(...) 括号之外,您正试图将变量插入到您的print 调用的结果 中。 print(...) 返回None,所以这行不通,还有一个小问题,你已经打印了你的模板,时间旅行被我们所居住的宇宙法则所禁止。

        您要打印的整个内容,包括% 及其操作数,需要您的print(...) 调用中,以便在打印之前构建字符串。

        print( "a=%d,b=%d" % (f(x,n), g(x,n)) )
        

        我添加了一些额外的空格以使其更清晰(尽管它们不是必需的,并且通常不被认为是好的样式)。

        【讨论】:

          【解决方案8】:
          print("Name={}, balance={}".format(var-name, var-balance))
          

          【讨论】:

            【解决方案9】:

            print("{:.4f} @\n".format(2))

            格式化在此类情况下很有帮助。

            您可以在下面的链接中参考更多详细信息。

            Python Formatting

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-05-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-06-04
              • 1970-01-01
              • 2013-01-28
              • 1970-01-01
              相关资源
              最近更新 更多