小编gre*_*grf的帖子

在Python中,反斜杠的行继续是危险的吗?

我理解当前行继续的最佳实践是在括号内使用隐含的延续.例如:

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 syntax backslash

8
推荐指数
2
解决办法
1346
查看次数

Python中有sorted()的神奇方法吗?

我知道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)

python oop magic-methods

7
推荐指数
1
解决办法
8751
查看次数

标签 统计

python ×2

backslash ×1

magic-methods ×1

oop ×1

syntax ×1