通过解释器查看所有python运算符的列表

通过解释器查看所有python运算符的列表,python,operator-overloading,naming,Python,Operator Overloading,Naming,假设我刚刚在Python中实现了一些类,并想重载“-”操作符,但不记得我是否需要使用\uuuuuuu减法,\uuuuu减法,或者实际上是正确的答案\uuuuuu sub。有没有一种快速的方法可以通过翻译找到答案?我尝试了一些简单的方法,比如help(-),但没有成功 有很多在线资源可以提供可用运营商的最终列表,但我正在寻找一种快速的离线方法 对于常见的操作符,我们可以很快记住它们,但是一些不太常用的操作符通常需要查找。使用bpython(或者对于python3使用bpython3) 它类似于普通

假设我刚刚在Python中实现了一些类,并想重载“-”操作符,但不记得我是否需要使用
\uuuuuuu减法
\uuuuu减法
,或者实际上是正确的答案
\uuuuuu sub
。有没有一种快速的方法可以通过翻译找到答案?我尝试了一些简单的方法,比如
help(-)
,但没有成功

有很多在线资源可以提供可用运营商的最终列表,但我正在寻找一种快速的离线方法

对于常见的操作符,我们可以很快记住它们,但是一些不太常用的操作符通常需要查找。

使用
bpython
(或者对于python3使用
bpython3

它类似于普通的python repl,但具有完全的优点

例如,我制作代码:

class a:
    def __
我会得到一个包含所有内置功能的菜单

你可以通过

或者通过在ubuntu中执行
sudo apt get install bpython
。(或
sudo-apt-get-install-bpython3
for-python3

此外,它具有完整的选项卡功能,并且更为广泛


一个很好的技巧是使用制表符补全进行猜测。你不记得它是
减号
减号
,还是其他什么,对吗?所以,首先键入
int.\uu m
,然后点击制表符:

In [470]: int.__m
int.__mod__     int.__module__  int.__mro__     int.__mul__
这里没有
减号
,所以退格,键入
s
,然后再次单击tab:

In [470]: int.__s
int.__setattr__        int.__sub__            int.__subclasshook__
int.__sizeof__         int.__subclasscheck__  
int.__str__            int.__subclasses__ 
这就是。

使用
dir(obj)
,它将列出对象(或类)
obj
的所有属性。例如,您知道可以添加整数,以便键入

>>> dir(int) # using the class int (or type in this case) here
    ['__abs__',
 '__add__',
 '__and__',
 '__class__',
 '__cmp__',
 ...
或用于格式化输出

>>> print '\n'.join(dir(1)) # using an instance of int here
__abs__
__add__
__and__
__class__
__cmp__
...
然后你可以通过

>>> help(int.__add__)
这是一个开始

>>> import operator
>>> print("\n".join(dir(operator)))
__abs__
__add__
__and__
__concat__
__contains__
__delitem__
__doc__
__eq__
__floordiv__
__ge__
__getitem__
__gt__
__iadd__
__iand__
__iconcat__
__ifloordiv__
__ilshift__
__imod__
__imul__
__index__
__inv__
__invert__
__ior__
__ipow__
__irshift__
__isub__
__itruediv__
__ixor__
__le__
__loader__
__lshift__
__lt__
__mod__
__mul__
__name__
__ne__
__neg__
__not__
__or__
__package__
__pos__
__pow__
__rshift__
__setitem__
__sub__
__truediv__
__xor__
_compare_digest
abs
add
and_
attrgetter
concat
contains
countOf
delitem
eq
floordiv
ge
getitem
gt
iadd
iand
iconcat
ifloordiv
ilshift
imod
imul
index
indexOf
inv
invert
ior
ipow
irshift
is_
is_not
isub
itemgetter
itruediv
ixor
le
lshift
lt
methodcaller
mod
mul
ne
neg
not_
or_
pos
pow
rshift
setitem
sub
truediv
truth
xor
所有标准操作员 只有基本的 只有数字的 其他帮助小节
在实现该方法之前,您无法执行此操作,在这种情况下,您显然知道它的调用。只需对一个对象执行此操作,您就知道它是有效的。如果您记不起是was
\uuuuuuu减
还是
\uuuuu子
。是,
打印'\n'。join(dir(1))
可以很好地在
int
上列出。可能值得一提的是,ipython更受欢迎和广泛使用,它具有相同的制表符完成功能,就像许多更高级的IDE一样。也可能值得一提的是,制表符完成可以让您尝试猜测。例如,键入
int.u m
,th用制表符查看完成情况,看到没有
,退格并尝试
s
,然后用制表符查看完成情况,看到有一个
,你就完成了。实际上我大部分时间都是这样做的……这很难解释;让我编辑你的答案,如果你不喜欢,你可以回复。优点是destrobu和Leif Anderson的解决方案之一是,它们甚至适用于不太特殊的dunder方法。例如,如果你记不起
pickle
使用了什么,你可以在任何可pickle类型上找到
\uuuu reduce\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>,即使你在
特殊方法中找不到>,这绝对是最干净、最简单的方法。(当然,只要你能在多页文本中找到要搜索的内容。)@abarnert“只要你能找到要搜索的内容”:添加了数字的快捷方式,只会有帮助。是的,这绝对有帮助。(你可以在
帮助('SPECIALMETHODS')的末尾找到该列表)
,因此您不必记住所有这些。
>>> help('SPECIALMETHODS')
>>> help('BASICMETHODS')
>>> help('NUMBERMETHODS')
>>> help('ATTRIBUTEMETHODS')
>>> help('CALLABLEMETHODS')
>>> help('MAPPINGMETHODS')
>>> help('SEQUENCEMETHODS1')
>>> help('SEQUENCEMETHODS2')