对嵌套打印用法中的打印顺序感到困惑

Huan

在嵌套打印函数时,Python 3的默认打印序列存在一些问题,可以将其简化为以下示例:

>>> def print2():
...     print('print2')
... 
>>> print('print1', print2())
print2
print1 None

但是在Python 2中使用等效项:

>>> def print2():
...     print 'print2'
... 
>>> print 'print1', print2()
print1 print2
None

为什么打印顺序会颠倒?我如何才能在Python 3中产生自然顺序(与Python 2相同),而不是颠倒顺序

马丁·彼得斯(Martijn Pieters)

不同之处在于,在Python 2中print是一条语句特殊之处在于,从左到右对多个表达式求值,并立即写出它们的结果。

print参考文档中

print 依次评估每个表达式,并将结果对象写入标准输出

因此,在Python 2中,该语句print 'print1', print2()首先求值'print1',将其写出,然后求值print2(),它本身就用于print写出'print2',然后在末尾写一个换行符。然后,Python交互式解释器将回显最后一个表达式的返回值None

在Python 3中,print()是一个内置函数函数只是更多的表达。您必须先评估所有参数表达式,然后才能执行函数。这意味着print(...)在评估完所有参数之后才真正执行该操作,因此在print2()函数完成并返回其值之前,无法将任何内容写到屏幕上

因此,print('print1', print2())要正常工作,Python必须先执行评估'print1'(产生一个字符串对象),然后进行评估print2()(调用print('print2')并返回None),然后才能执行该函数并将其写出print1 None

如果使用print('print1', print2())您将在Python 2中获得相同的结果,因为实际上您将首先创建一个包含两个元素元组,然后将其打印出来。print仍然是一个语句,并且在该元组转换为字符串并写出之前('print1', print2())被实例化('print1', None)(并print2写入屏幕)。或者,您可以from __future__ import print_function在Python 2中使用,此时编译器将禁用该print语句,并且您也可以print()在Python 2中使用该函数。

解决方案是使用两个单独的 print()函数调用,并用空格替换通常写的换行符:

print('print1', end=' ')
print(print2())

这样,在调用'print1'之前已被写到屏幕上print2()以上将输出

print1 print2
None

但是在交互式解释器中,缺少换行符会使输出结果变得有些混乱:

>>> print('print1', end=' ')
print1 >>> print(print2())
print2
None

但是,你真的不希望使用print()写出来的返回值print2(),这是None在那里。删除多余的部分print()将使它消失:

print('print1', end=' ')
print2()

如果print2()负责打印,则不要加倍打印电话。

最佳选择,但是,是不是里面打印print2()保持打印集中,订购不再重要。让您的函数返回要打印的字符串,而不是:

def result2():
    return 'print2'

print('print1', result2())

上面的代码将print1 print2在Python 2(前提是您使用print语句,so print 'print1', result2())和Python 3中输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

哈希表中的打印顺序?

来自分类Dev

线程不打印顺序

来自分类Dev

Javascript文本打印顺序

来自分类Dev

Eclipse中的控制台打印顺序

来自分类Dev

用逗号在Java中打印顺序遍历

来自分类Dev

jupyter笔记本中的打印顺序

来自分类Dev

C-链表打印顺序错误

来自分类Dev

我的for循环打印顺序错误

来自分类Dev

C-链表打印顺序错误

来自分类Dev

Prolog - 与递归打印顺序的混淆

来自分类Dev

Python:结果打印顺序错误

来自分类Dev

Python 3 - for 循环结果的打印顺序

来自分类Dev

试图了解这段代码中bh和b.getH()的打印顺序

来自分类Dev

使用中的React,React Hooks,Diffrent console.log打印顺序

来自分类Dev

试图了解这段代码中bh和b.getH()的打印顺序

来自分类Dev

Node.js循环打印顺序错误

来自分类Dev

如何更改分类X轴的打印顺序

来自分类Dev

为什么打印顺序不正确?

来自分类Dev

与屏幕打印顺序有关的Javascript问题

来自分类Dev

1111.打印顺序后出现-PHP

来自分类Dev

对在git中创建嵌套分支感到困惑

来自分类Dev

对递归以及如何进行退货打印感到困惑

来自分类Dev

我对python while循环中的打印输出感到困惑

来自分类Dev

对输出感到困惑。返回两个变量并仍然打印

来自分类Dev

在Hashtable中打印的顺序?

来自分类Dev

我对bash中双引号的用法感到困惑

来自分类Dev

Javascript:对Infinity的用法感到困惑

来自分类Dev

我对super()用法感到困惑

来自分类Dev

对C ++类用法感到困惑