【发布时间】:2013-02-13 20:34:52
【问题描述】:
例如,如果您写help(list),您将获得有关列表对象的帮助。如果你写help(+),你会得到SyntaxError: invalid syntax
这是为什么呢?
【问题讨论】:
-
即使是人类也无法处理所有输入,你怎么能指望计算机来管理?
例如,如果您写help(list),您将获得有关列表对象的帮助。如果你写help(+),你会得到SyntaxError: invalid syntax
这是为什么呢?
【问题讨论】:
help 是一个普通函数,所以它像任何其他函数一样接受参数。 help(list) 是有效的语法:它将list 类型传递给help。
但是,help(+) 是非法语法(+ 是运算符,而不是表达式本身)。在这种情况下,您可以改用help('+') 来获取+ 运算符的帮助。
【讨论】:
help('+') 不会很有用,因为+ 只是一个字符串,所以你会在str 类上获得帮助,而不是加法运算符。
operators 模块的原因,因为没有办法“通过+ 运算符”或“将或运算符”传递给函数)。
这是因为 help 只是一个函数 - 它的参数必须是一个语法上有效的表达式,其计算结果为一个值。
【讨论】:
在某些语言中,您实际上可以直接将运算符作为值传递(例如,+ 是 Lisp 中的普通函数)或使用特殊语法(例如,(+) 是 + 运算符作为 Haskell 中的普通函数)。但在 Python 中并非如此。
+ 运算符当然可以成为表达式的一部分,方法是给它两个操作数 (2+3) 或一个 (+3),但无法访问+ 运算符本身。 (部分原因是+ 实际上是三个不同的运算符——一元加法、二元加法和二元连接,所以在没有上下文的情况下甚至没有“+ 运算符的值”之类的东西。但同样即使对于明确的运算符也是如此。)
这与类型和函数不同,如你所见:
>>> list
builtins.list
>>> abs
<function builtins.abs>
>>> +
SyntaxError: invalid syntax
因此,您可以将 list 或 abs 作为参数传递给函数(包括 help),但您不能使用 + 执行此操作。
这就是 Python 具有 operator 模块的原因,它为您提供可以传递的“操作符作为函数”:
>>> import operator
>>> operator.add
<function operator.add>
但这在这种情况下并不是特别有用:
>>> help(operator.add)
add(...)
add(a, b) -- Same as a + b.
谢谢……
幸运的是,help 函数具有处理字符串的特殊代码。请参阅 nneonneo 的答案,了解您真正想要的内容。
【讨论】:
那是因为 + 是一个运算符,它涉及两个操作数,你可以这样做:
help(1+1)
因为 1+1 返回一个 int,所以 help 会给你一些关于 int 数据类型
【讨论】:
+ 总是需要两个操作数,为什么+3 不是错误?)
print(ast.parse('+3').body[0].value)。这是一个UnaryOp,UAdd 用于op 和一个Num,其值为3 用于operand。有关详细信息,请参阅文档中的 Unary arithmetic and bitwise operations。