如何在 Python3 中像 printf 一样打印?
Posted
技术标签:
【中文标题】如何在 Python3 中像 printf 一样打印?【英文标题】:How to print like printf in Python3? 【发布时间】: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
打印该字符串。
【参考方案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
【讨论】:
嘿...PRINT
和FORMAT
...?回到 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
【讨论】:
以上是关于如何在 Python3 中像 printf 一样打印?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中像 UITabBarItem 一样设计 UIButton?