小编ViF*_*iFI的帖子

如何在Python中删除带或不带空格的空行

我有一个大字符串,我用换行符分割.如何删除所有空行(仅限空格)?

伪代码:

for stuff in largestring:
   remove stuff that is blank
Run Code Online (Sandbox Code Playgroud)

python string

38
推荐指数
6
解决办法
12万
查看次数

如何使用 `__slots__` 初始化属性?

我通读了有关插槽使用的主要答案,它让我了解了如何以及在何处使用__slots__.

现在,我将代码从 Python 2 移植到 Python 3,类似于以下内容:

class B(object):
    __slots__ = ('_fields')
    _fields = set()
Run Code Online (Sandbox Code Playgroud)

但这会在 Python 2 上正常工作时给出错误 Python 3:

ValueError: '_fields' in __slots__ conflicts with class variable.

我将代码更改为

class B(object):
    __slots__ = ('_fields')
    def __init__(self):
        _fields = set()
Run Code Online (Sandbox Code Playgroud)

它工作正常。我的疑问是,它甚至是正确的更改吗?

正如我从原始代码中得到的,我猜它是说不要__dict__用于节省内存或更快的访问或任何原因,但同时也试图将属性类型指定_field为 set()。上面的更改是否是正确的表达方式,或者它可能会产生一些副作用。


进一步实验:我进一步实验了以下变体(在 Python 3 上):

import pdb

class A(object):
    a = set()

'''
class B(object):
    __slots__ = ('a')
    a = set()
'''

class C(object):
    __slots__ = ('a')
    def …
Run Code Online (Sandbox Code Playgroud)

python initialization slots

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

__enter__`方法的返回值在python中应始终为`self`吗?

__enter__方法的返回值不应该self始终是。

Python文档说:

object.__enter__(self) 输入与此对象相关的运行时上下文。with语句会将此方法的返回值绑定到该语句的as子句中指定的目标(如果有)。

这样做,为了做任何实际的事情,不self应该总是从__enter__类的方法中返回它,否则,就不能从上下文中调用其他类方法。

例如,在下面的代码中,s.main()可以正常工作,但b1.main()会出错。

class a(object):
    def __init__(self):
        pass

    def __enter__(self):
        return self

    def __exit__(self ,type, value, traceback):
        return self

    def main(self):
        print " in a::main self %d " , id(self)


class b(object):
    def __init__(self):
        pass

    def __enter__(self):
        return "something else"

    def __exit__(self ,type, value, traceback):
        pass

    def main(self):
        print "in b::main !! self id " , id(self)

with a() as s:
    s.main()

with b() as b1:
    b1.main()

s …
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
1102
查看次数

如何使用理解减少dict值中的集合?

我有

x = {'a':set([1]) , 'b':set([2]), 'c':set([3]) }
Run Code Online (Sandbox Code Playgroud)

保证集合中只有一个元素.我需要将其转换为

{'a': 1, 'c': 3, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

以下作品:

x1 = {k:x[k].pop() for k in x.keys()}  OR
x1 = {k:next(iter(x[k])) for k in x.keys()}
Run Code Online (Sandbox Code Playgroud)

但我不喜欢它,因为pop()这里正在修改原始集合.我需要帮助.

  • 如何 在理解中使用此处提到的拆包.
  • 有什么办法,我可以用functools.reduce它.
  • 什么可以是更好或Pythonic的方式来做这个整体?

python dictionary python-2.7 functools iterable-unpacking

2
推荐指数
1
解决办法
234
查看次数