这是将列表写入文件的最简洁方法,因为writelines()不插入换行符吗?
file.writelines(["%s\n" % item for item in list])
Run Code Online (Sandbox Code Playgroud)
似乎有一种标准方式......
我正在尝试创建一个在set操作中正常运行的自定义对象.
我一般都有它的工作,但我想确保我完全理解其含义.特别是,当对象中存在未包含在等于/哈希方法中的其他数据时,我对此行为感兴趣.似乎在'intersection'操作中,它返回正在进行比较的对象集,其中'union'操作返回正在比较的对象集.
为了显示:
class MyObject:
def __init__(self,value,meta):
self.value = value
self.meta = meta
def __eq__(self,other):
return self.value == other.value
def __hash__(self):
return hash(self.value)
a = MyObject('1','left')
b = MyObject('1','right')
c = MyObject('2','left')
d = MyObject('2','right')
e = MyObject('3','left')
print a == b # True
print a == c # False
for i in set([a,c,e]).intersection(set([b,d])):
print "%s %s" % (i.value,i.meta)
#returns:
#1 right
#2 right
for i in set([a,c,e]).union(set([b,d])):
print "%s %s" % (i.value,i.meta)
#returns:
#1 left
#3 left
#2 left …Run Code Online (Sandbox Code Playgroud) 处理一个项目,要求我能够在任何时候挑选容器对象,因为我们期望它在外部条件下经常失败,并且能够完全从我们中断的地方开始.
我正在广泛使用python日志库,我的所有类都开始设置一个记录器,如:
class foo:
def __init__(self):
self.logger = logging.getLogger("package.foo")
Run Code Online (Sandbox Code Playgroud)
由于我正在挑选一个容器类,它里面有几层类,每个类都有自己的记录器实例.
现在,出于某种原因,这些记录器正在破坏Pickle.我收到以下错误,如果我从所有类中删除self.logger,它就会消失:
Can't pickle 'lock' object: <thread.lock object at ... >
Run Code Online (Sandbox Code Playgroud)
所以我的问题是是否有某种方法可以从所有记录器中删除锁定对象,而不必通过我的整个对象树删除记录器,我将不得不在unpickle上重新创建.
是否可以在生成器对象上创建属性?
这是一个非常简单的例子:
def filter(x):
for line in myContent:
if line == x:
yield x
Run Code Online (Sandbox Code Playgroud)
现在说我有很多这些过滤器生成器对象浮动...也许其中一些是匿名的...我想稍后再回来询问他们正在过滤的内容.有没有办法我可以a)询问生成器对象的x值或b)设置一个值为x的属性,我以后可以询问?
谢谢
range()函数的上限是什么,我该如何扩展它,或者最好的方法是什么:
for i in range(1,600851475143):
Run Code Online (Sandbox Code Playgroud)