我想知道为什么使用with语句或块中打开的文件对象在退出后仍在范围内.正在<closed file>对象曾经清理?
>>> with open('test.txt','w') as f:
... f.write('test')
...
>>> f
<closed file 'test.txt', mode 'w' at 0x00E014F0>
>>> f.close()
>>> if True:
... fal = open('demo.txt','w')
... fal.write('stuff')
... fal.close()
...
>>> fal
<closed file 'demo.txt', mode 'w' at 0x00E015A0>
Run Code Online (Sandbox Code Playgroud) Raymond Hettinger在展示幻灯片36和37时惊讶了不少人.https://speakerdeck.com/pyconslides/transforming-code-into-beautiful-idiomatic-python-by-raymond-hettinger-很多人都知道语句可以用于打开文件,但不能用于这些新事物.关于线程的python 3.3文档,仅在最底层,第16.2.8节,甚至提到它.从讲座中可以看出,使用"with"运算符是最佳实践.
参考:
如果我的x列表和y列表是:
x = [10,20,30]
y = [1,2,3,15,22,27]
Run Code Online (Sandbox Code Playgroud)
我希望返回值是一个字典,其中包含的元素数小于x值:
{
10:3,
20:1,
30:2,
}
Run Code Online (Sandbox Code Playgroud)
我有一个非常大的列表,所以我希望有一个更好的方法来做这个不涉及缓慢的嵌套for循环.我看过集合.Counter和itertools似乎都没有提供分组方式.有没有可以做到这一点的内置?
参考: python分解 列表在Python 中展平浅层列表
虽然上面提到的解决方案很有帮助,但我的问题略有不同,我想知道是否有一种pythonic方法来解决它.
a = [['a-3','b-3'],'r',['j']]
Run Code Online (Sandbox Code Playgroud)
我想要的是一种让'a'等于以下的简洁方法:
a = ['a-3','b-3','r','j']
Run Code Online (Sandbox Code Playgroud)
我被困在使用python 2.4所以2.4兼容的pythonic解决方案会很棒,但我仍然会发现2.7个以上的例子也很有趣.
主要的问题是,有非迭代的元件,否则该总和(LST,[])工作得很好,因为确实为2.7+链方法