如何在 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

【讨论】:

嘿...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

【讨论】:

以上是关于如何在 Python3 中像 printf 一样打印?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Knex 中像查询一样逃避 %?

如何在Objective-C中像Twitter一样显示预览

如何在 iOS 中像 UITabBarItem 一样设计 UIButton?

如何在 Swift 中像数组一样访问图像资源

如何在 jupyter 中像 pandas Dataframe 一样打印 Pyspark Dataframe

如何在 UITextView 中像提词器一样快速滚动文本?