Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3.x中新的print函数与Python2print语句相比有什么优势?_Python_Function_Printing_Python 3.x_Python 2.x - Fatal编程技术网

Python3.x中新的print函数与Python2print语句相比有什么优势?

Python3.x中新的print函数与Python2print语句相比有什么优势?,python,function,printing,python-3.x,python-2.x,Python,Function,Printing,Python 3.x,Python 2.x,我多次听说打印作为一个函数(3.x)比作为一个语句(2.x)要好。但是为什么呢 我非常喜欢它是一个语句,主要是因为它允许我少键入两个字符(即括号) 我很想看看print语句不能切掉它的一些情况,并且函数更优越 根本原因 print语句早就出现在python3000中要删除的可疑语言特性列表上,例如Guido的“Python后悔”演示。因此,这个PEP的目标并不是新的,尽管它可能在Python开发人员中引起很大争议 print()函数的以下参数由Guido自己从python-3000消息中提取:

我多次听说打印作为一个函数(3.x)比作为一个语句(2.x)要好。但是为什么呢

我非常喜欢它是一个语句,主要是因为它允许我少键入两个字符(即括号)

我很想看看print语句不能切掉它的一些情况,并且函数更优越

根本原因 print语句早就出现在python3000中要删除的可疑语言特性列表上,例如Guido的“Python后悔”演示。因此,这个PEP的目标并不是新的,尽管它可能在Python开发人员中引起很大争议

print()函数的以下参数由Guido自己从python-3000消息中提取:

  • 打印是唯一具有专用语句的应用程序级功能。在Python的世界里,语法通常被用作最后手段,如果没有编译器的帮助就无法完成某些事情。Print不符合这种例外情况
  • 在应用程序开发的某个阶段,人们经常会觉得需要用更复杂的东西来代替打印输出,比如记录调用或调用到其他I/O库中。使用print()函数,这是一个简单的字符串替换,现在添加所有这些括号并可能转换>>流式语法是一件麻烦事
  • 为print使用特殊的语法为进化设置了更大的障碍,例如,假设的新printf()函数与print()函数共存时并不太牵强
  • 如果需要不同的分隔符,而不是空格,或者根本不需要分隔符,那么将print语句转换为另一个调用是不容易的。此外,根本没有简单的方法可以方便地使用空格以外的分隔符打印对象
  • 如果print()是一个函数,那么在一个模块内(只需
    def print(*args):…
    )甚至在整个程序中(例如,通过在
    \uuuuuu builtin\uuuuu.print
    中放置不同的函数)替换它会容易得多。事实上,我们可以通过使用write()方法编写一个类并将其分配给sys.stdout来实现这一点——这还不错,但肯定是一个更大的概念性飞跃,它的工作级别与print不同
-


print
作为函数的一个优点是一致性。没有理由将其作为声明。比较这两条线

2.x: print >> my_file, x
3.x: print(x, file=my_file)
新版本看起来更像Python,不是吗

函数版本的另一个优点是灵活性。例如,如果要捕获所有
print
调用以进行调试,现在只需重新定义
print

def print(*args, **kwargs):
    # whatever
    __builtins__.print(*args, **kwargs)

您可以将内置的
打印
替换为自定义打印:

import os
import sys

def print(s):
   sys.stderr.write('Will now print ' + str(s) + '.' + os.linesep)
   sys.stdout.write(str(s) + os.linesep)

print(['A', 'list'])
# Output: 
# stderr: Will now print ['A', 'list'].
# stdout: ['A', 'list']
您可以在lambda或函数调用中使用
print

example_timeout_function(call=lambda: print('Hello world'), timeout=5)
do_things(print_function=print)
从和开始的所有内容,以及:

您可以在不能使用
print
的地方使用
print()
,例如:

[print(x) for x in range(10)]

我仔细考虑了这个问题,对Python3版本的优点一无所知。但是当我需要打印
pandas.DataFrame
(没有
索引([…])
)的列时,我发现

print *df.columns 打印*df列 抛出异常,而

print(*df.columns) 打印(*df.列) 很好!如果您想在多个通话打印中使用相同的(可配置的)打印选项,您可以将它们保存到dictionary并作为
**print\u options


因此,至少
*args
**kw_args
技巧是
打印
成为功能的一个很好的理由

不错,但没有说明为什么表达式(函数调用)在语法结构方面比语句更容易处理,最明显的是简单的
lambda
。re“新版本看起来更像Python,不是吗?”:它们都是有效的Python,不是吗?我相信你的意思是“pythonic”,但即使是“pythonic”也相当模糊。我并不反对你的回答,我只是发现你的问题对于
print
函数来说是不够的。(OP的答案是给心理学家和管理者的,我想:)ΖΖΖΖΖΖΖΥ:我说的是一致性。这不是一个很难的事实,所以我最终不得不把判断权留给读者。如果您愿意,我可以“在我看来,新版本看起来更像Python”。)我故意没有提到这一点,因为我想不出有什么用法可以推荐使用
print()
作为一个表达式,而不是一个语句。您的示例创建了一个不需要的列表,该列表的值是
None
的10倍,对于范围(10):print(x)@Sven:Sure中的x使用
当然更好。我当然不想让它成为公认的答案我只是尝试在lambda中使用一个print,其中一个类允许我传递一个函数来记录值。我只想把它们打印出来。我必须在别处定义一个函数,因为您无法编写
lambda x:print x
:(.这也使得构建Python语言的聪明人更容易将这些功能添加为不同的separator@LennartRegebro当前位置不仅仅是两个字符:整个流程感觉不一样。不将其作为声明会带来成本-尤其是对于那些习惯于声明的人来说。但它可以减轻角落案例中的一些痛苦。是的,现在你必须跟踪额外的括号,如果你还嵌入元组的内嵌字符串替换,那么连接许多字符串会稍微让人恼火一些。因此,我在Py3中肯定会遇到更多的拼写错误/无效语法错误!这导致我现在使用一个变量来生成打印文本。