我理解当前行继续的最佳实践是在括号内使用隐含的延续.例如:
a = (1 + 2
+ 3 + 4)
Run Code Online (Sandbox Code Playgroud)
来自PEP8(https://www.python.org/dev/peps/pep-0008/):
包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续.通过将表达式包装在括号中,可以在多行中分割长行.这些应该优先使用反斜杠来继续行.
我打算继续遵循这个惯例,但是,我的问题是我应该如何担心现有代码中的错误继续使用反斜杠:
a = 1 + 2 \
+ 3 + 4
Run Code Online (Sandbox Code Playgroud)
python docs(https://docs.python.org/2.7/howto/doanddont.html#using-backslash-to-continue-statements)警告反斜杠后面一行末尾的杂散空间可以生成代码然而,正如在这个问题中指出的那样(" 如何使用Python反斜杠行继续是巧妙的错误?"),给出的示例只会导致引发SyntaxError,这不是一个微妙的问题,因为它很容易识别.那么,我的问题是,是否存在继续使用反斜杠的行导致比解析错误更糟糕的情况?我感兴趣的例子是反斜杠延续中的错误会产生运行时异常,或者更糟糕的是,代码会以无意识的行为进行静默运行.
我知道Python中有一些神奇的方法可以被类覆盖,以控制某些内置函数处理这些类的成员的方式。例如,len()和的行为可以通过魔术方法和str()覆盖:__len__()__str__()
class EmptySet(object):
def __len__(self):
return 0
def __str__(self):
return '[]'
>>> e = EmptySet()
>>> str(e)
[]
>>> len(e)
0
Run Code Online (Sandbox Code Playgroud)
还有__cmp__()and__ge__()等__le__()方法来控制如何比较这些对象以及如何对它们的列表进行排序list.sort()。我的问题不是关于自定义列表中对象的顺序,而是关于对对象本身进行排序。假设该集合不为空并且我想用sorted()它来排序:
class SetOfTwo(object):
def __init__(self, a , b):
el_0 = a
el_1 = b
def __len__(self):
return 2
def __str__(self):
return '[{}, {}]'.format(el_0, el_1)
Run Code Online (Sandbox Code Playgroud)
sorted()如果元素不按顺序排列,我可以实现一种神奇的方法来翻转元素吗?我正在想象以下行为:
>>> s = SetOfTwo(2, 1)
>>> str(s)
[2, 1]
>>> t = sorted(s)
>>> str(t)
[1, 2] …Run Code Online (Sandbox Code Playgroud)