小编Bre*_*wey的帖子

使用生成器表达式而不是列表排序()

看到这里的讨论后:Python - 生成我很好奇的时差.我最初也认为生成器比列表更快,但是当谈到sorted()我不知道.将生成器表达式发送到sorted()而不是列表有什么好处?在排序之前,生成器表达式是否最终被放入sorted()中的列表?

编辑:让我感到悲伤的是只能接受一个答案,因为我觉得很多回复都有助于澄清这个问题.再次感谢大家.

python optimization

42
推荐指数
5
解决办法
2万
查看次数

当文件对象的引用计数达到零时自动关闭?

我的印象是文件对象在引用计数达到0时立即关闭,因此该行:

foo = open('foo').read()
Run Code Online (Sandbox Code Playgroud)

会得到文件的内容并立即关闭文件.但是,在Python文件对象上使用迭代器时,在读取了Is close()的答案之后,我得到的印象是这不会发生,并且始终需要调用.close()文件对象.

上面的那行是否符合我的想法,即使它确实如此,它是Pythonic要做的吗?

python

37
推荐指数
3
解决办法
2万
查看次数

如何在python中的饼图上设置标签大小

我希望python中的饼图上有小尺寸的标签,以提高可视性,这里是代码

import matplotlib.pyplot as plt

frac=[1.40 , 10.86 , 19.31 , 4.02 , 1.43 , 2.66 , 4.70 , 0.70 , 0.13 , 1.48, 32.96 , 1.11 , 13.30 , 5.86]
labels=['HO0900344', 'HO0900331', 'HO0900332', 'HO0900354', 
'HO0900358', 'HO0900374', 'HO0900372', 'HO0900373', 
'HO0900371', 'HO0900370', 'HO0900369', 'HO0900356', 
'HO0900353', 'HO0900343']

fig = plt.figure(1, figsize=(6,6))
ax = fig.add_subplot(111)
ax.axis('equal')
colors=('b', 'g', 'r', 'c', 'm', 'y', 'burlywood', 'w')
ax.pie(frac,colors=colors ,labels=labels, autopct='%1.1f%%')
plt.show()
Run Code Online (Sandbox Code Playgroud)

谢谢和欢呼

python matplotlib labels pie-chart

33
推荐指数
2
解决办法
3万
查看次数

如何获取对象类定义的模块名称而不是对象实例的模块名称?

在python 2.5中,我在一个名为modtest.py的模块中有以下代码:

def print_method_module(method):
    def printer(self):
        print self.__module__
        return method(self)
    return printer

class ModTest():

    @print_method_module
    def testmethod(self):
        pass

if __name__ == "__main__":
    ModTest().testmethod()
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,它打印出来:

__main__
Run Code Online (Sandbox Code Playgroud)

如果我创建一个名为modtest2.py的第二个文件并运行它:

import modtest

if __name__ == "__main__":
    modtest.ModTest().testmethod()
Run Code Online (Sandbox Code Playgroud)

打印出:

modtest
Run Code Online (Sandbox Code Playgroud)

如何将装饰器更改为始终打印出来modtest,即定义类的模块的名称?

python

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

在文本文件Python中重复提取两个分隔符之间的一行

我有一个以下格式的文本文件:

DELIMITER1
extract me
extract me
extract me
DELIMITER2
Run Code Online (Sandbox Code Playgroud)

我想extract me在.txt文件中提取DELIMITER1和DELIMITER2之间的每个块

这是我目前的不良代码:

import re
def GetTheSentences(file):
     fileContents =  open(file)
     start_rx = re.compile('DELIMITER')
     end_rx = re.compile('DELIMITER2')

     line_iterator = iter(fileContents)
     start = False
     for line in line_iterator:
           if re.findall(start_rx, line):

                start = True
                break
      while start:
           next_line = next(line_iterator)
           if re.findall(end_rx, next_line):
                break

           print next_line

           continue
      line_iterator.next()
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python regex

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

用Python术语汇总连续范围

我有一个sumranges()函数,它对元组元组中找到的所有连续数字的范围求和.为了显示:

def sumranges(nums):
    return sum([sum([1 for j in range(len(nums[i])) if
                     nums[i][j] == 0 or
                     nums[i][j - 1] + 1 != nums[i][j]]) for
                i in range(len(nums))])

>>> nums = ((1, 2, 3, 4), (1, 5, 6), (19, 20, 24, 29, 400))
>>> print sumranges(nums)
7
Run Code Online (Sandbox Code Playgroud)

如您所见,它返回元组内连续数字的范围数,即:len((1,2,3,4),(1),(5,6),(19,20),( 24),(29),(400))= 7.元组总是有序的.

我的问题是我的sumranges()很糟糕.我讨厌看着它.我现在只是迭代元组和每个子元素,如果数字不是(1 +前一个数字),则分配1,并总计总和.我觉得我错过了一种更容易实现既定目标的方法.有没有人知道更多的pythonic方式来做到这一点?

编辑:我已经对迄今为止给出的所有答案进行了基准测试.感谢大家的回答.

基准测试代码如下,使用100K的样本大小:

from time import time
from random import randrange
nums = [sorted(list(set(randrange(1, 10) for i in range(10)))) for
        j in range(100000)]

for func in sumranges, alex, matt, redglyph, ephemient, ferdinand: …
Run Code Online (Sandbox Code Playgroud)

python

7
推荐指数
3
解决办法
638
查看次数

在其他窗口中运行Emacs命令

我正在寻找一种方法将任意Emacs命令的输出(在我的情况下是sql-send-region)发送到另一个窗口.我宁愿在目前的窗口中保持焦点,这将有效地给我一个窗口来编辑查询和一个窗口来查看输出.

emacs

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

我的装饰师有多糟糕?

我最近创建了一个@sequenceable装饰器,它可以应用于任何带有一个参数的函数,并使其自动适用于任何序列.这是代码(Python 2.5):

def sequenceable(func):
    def newfunc(arg):
        if hasattr(arg, '__iter__'):
            if isinstance(arg, dict):
                return dict((k, func(v)) for k, v in arg.iteritems())
            else:
                return map(func, arg)
        else:
            return func(arg)
    return newfunc
Run Code Online (Sandbox Code Playgroud)

正在使用:

@sequenceable
def unixtime(dt):
    return int(dt.strftime('%s'))

>>> unixtime(datetime.now())
1291318284
>>> unixtime([datetime.now(), datetime(2010, 12, 3)])
[1291318291, 1291352400]
>>> unixtime({'start': datetime.now(), 'end': datetime(2010, 12, 3)})
{'start': 1291318301, 'end': 1291352400}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 这是一个可怕的想法,为什么?
  • 这可能是一个好主意,但实施时有很大的缺点吗?
  • 使用此代码有哪些潜在的缺陷?
  • 是否有内置或库已经做我正在做的事情?

python

4
推荐指数
1
解决办法
261
查看次数

标签 统计

python ×7

emacs ×1

labels ×1

matplotlib ×1

optimization ×1

pie-chart ×1

regex ×1