rec*_*gle 69 python printing function python-2.x python-3.x
我曾多次听说打印是一个函数(3.x)比它是一个声明(2.x)更好.但为什么?
我很喜欢它是一个声明,主要是因为它允许我键入两个较少的字符(即括号).
我有兴趣看到一些情况,其中print语句不会削减它,并且功能更优越.
Joc*_*zel 55
合理
print语句长期出现在Python 3000中要删除的可疑语言特性列表中,例如Guido的"Python遗憾"演示文稿[1].因此,这个PEP的目标并不新鲜,尽管它可能在Python开发人员中引起很大争议.
print()函数的以下参数是由Guido自己[2]从python-3000消息中提取的:
- print是唯一具有专用语句的应用程序级功能.在Python的世界中,语法通常被用作最后的手段,如果没有编译器的帮助就无法完成某些事情.打印不符合此类例外的条件.
- 在应用程序开发的某个时刻,人们经常感到需要用更复杂的东西来替换打印输出,比如记录调用或调用其他I/O库.使用print()函数,这是一个简单的字符串替换,今天它是一个混乱添加所有这些括号和可能转换>>流样式语法.
- 具有特殊的打印语法为进化提供了更大的障碍,例如假设的新printf()函数在与print()函数共存时并不太遥远.
- 如果需要不同的分隔符而不是空格,或者根本不需要空格,则没有简单的方法将print语句转换为另一个调用.此外,有没有简单的方法都可以方便地与其他一些分离不是空间打印对象.
- 如果print()是一个函数,那么在一个模块(只是
def print(*args):...)中甚至整个程序中更换它会更容易(例如,通过放入不同的函数__builtin__.print).实际上,人们可以通过使用write()方法编写一个类并将其分配给sys.stdout来实现这一点 - 这不是坏事,但绝对是一个更大的概念上的飞跃,它的工作方式与打印不同.
Len*_*bro 43
您可以print()在无法使用的地方使用它print,例如:
[print(x) for x in range(10)]
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 34
print成为一种功能的一个优点是一致性.它没有理由成为一个声明.比较这两行
2.x: print >> my_file, x
3.x: print(x, file=my_file)
Run Code Online (Sandbox Code Playgroud)
新版本看起来更像Python,不是吗?
功能版本的另一个优点是灵活性.例如,如果要捕获所有print调用以进行调试,现在只需重新定义print:
def print(*args, **kwargs):
# whatever
__builtins__.print(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
All*_*leo 18
我想过这个问题并且不知道python 3版本的优点.但是当我需要打印pandas.DataFrame(没有Index([...]))列时,我发现了这一点
print *df.columns
抛出异常,而
print(*df.columns)
工作良好!如果你想在几个调用打印中有相同的(可配置的)打印选项,你可以将它们保存到字典并传递为**print_options
至少*args,**kw_args技巧是print成为一个功能的一个很好的理由!
Art*_*par 11
您可以print通过自定义替换内置:
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']
Run Code Online (Sandbox Code Playgroud)
你可以print在lambda或函数调用中使用等:
example_timeout_function(call=lambda: print('Hello world'), timeout=5)
do_things(print_function=print)
Run Code Online (Sandbox Code Playgroud)