我已经多次听到,print作为函数(3.x)比作为语句(2.x)更好。但为什么?
我之所以喜欢这样的声明,主要是因为它允许我少键入两个字符(即括号)。
我很想看到一些情况,其中打印语句只是不能剪切它,而功能更出色。
我已经多次听到,print作为函数(3.x)比作为语句(2.x)更好。但为什么?
我之所以喜欢这样的声明,主要是因为它允许我少键入两个字符(即括号)。
我很想看到一些情况,其中打印语句只是不能剪切它,而功能更出色。
Answers:
print()
用作表达式而不是陈述的任何用法。您的示例将创建一个不必要的列表,该列表是值的10倍None
,并且使用它肯定会更好for x in range(10): print(x)
。
lambda x: print x
:(。
基本原理
打印声明早已出现在要在Python 3000中删除的可疑语言功能列表中,例如Guido的“ Python Regrets”演示文稿[1]。因此,尽管在Python开发人员中可能引起很大争议,但该PEP的目标并不新。
Guido自己[2]从python-3000消息中提取了print()函数的以下参数:
- print是唯一具有专用语句的应用程序级功能。在Python的世界里,如果没有编译器的帮助就无法完成某些事情,那么通常将语法用作最后的手段。打印不符合此类例外条件。
- 在应用程序开发的某个时刻,人们常常感到需要用更复杂的东西来代替打印输出,例如将调用记录或对其他I / O库的调用记录下来。使用print()函数,这是一个简单的字符串替换,今天,添加所有这些括号并可能转换>> stream样式语法变得一团糟。
- 具有用于print的特殊语法会给进化带来更大的障碍,例如,假设新的printf()函数将与print()函数并存时,并不会太高。
- 如果需要不同的分隔符,空格或根本不需要分隔符,则没有简单的方法可以将打印语句转换为另一个调用。此外,有没有简单的方法都可以方便地与其他一些分离不是空间打印对象。
- 如果print()是一个函数,则在一个模块(仅
def print(*args):...
)内甚至整个程序中替换它(例如,通过在其中放入一个不同的函数__builtin__.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)
print
函数而言是一个不足的论点。(我认为对OP的回答是针对心理学家和管理人员的:)
您可以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']
您可以print
在lambda或函数调用等内部使用:
example_timeout_function(call=lambda: print('Hello world'), timeout=5)
do_things(print_function=print)