愚蠢的问题:
我有一个简单的for循环,后跟一个简单的if语句:
for airport in airports:
if airport.is_important:
Run Code Online (Sandbox Code Playgroud)
而且我想知道我是否能以某种方式将其写成单行.
所以,是的,我可以这样做:
for airport in (airport for airport in airports if airport.is_important):
Run Code Online (Sandbox Code Playgroud)
但它看起来如此愚蠢和冗余(for airport in airport for airport in airports...).
有没有更好的办法?
有没有办法将背景单元测试与Pydev Eclipse环境集成?
我的单元测试运行良好,但我希望将它们集成到基于源文件更改的后台运行(例如使用nose)并将结果集成回Eclipse(当测试使用控制台失败时,我正在考虑大红色X和跟踪日志视图).
不,在侧面运行鼻子的命令提示符不计算在内.
我在开发RoR时已经有了这个Eclipse集成.
谢谢,
塔尔.
编辑:查看新的Pydev(1.6.4)http://pydev.org/manual_adv_pyunit.html
我在哪里可以找到一些真实的拼写错误统计数据?
我试图将人们的输入文本与内部对象进行匹配,人们往往会犯拼写错误.
有两种错误:
typos - "Helllo"而不是"Hello"/"Satudray"而不是"Saturday"等. Spelling - "Shikago"而不是"芝加哥" 我使用 Damerau-Levenshtein距离进行拼写错误,使用Double Metaphone进行拼写(Python实现此处和此处).
我想专注于Damerau-Levenshtein(或简单地说edit-distance).教科书实现总是使用'1'来表示删除,插入替换和转置的权重.虽然这很简单并且允许很好的算法但它与"现实"/"真实世界概率"不匹配.
例子:
删除,插入,替换和转置的"真实世界"权重应该是什么?
即使是Norvig非常酷的拼写校正器也使用非加权编辑距离.
BTW-我确定权重需要是函数而不是简单的浮点数(根据上面的例子)......
我可以调整算法,但在哪里可以"学习"这些权重?我无法访问Google规模的数据 ...
我应该猜猜他们吗?
编辑 - 尝试回答用户问题:
作为大型纯Python应用程序的一部分,我为pyparsing开发了一个巨大的语法.我已经达到了性能调整的极限,我正处于收益递减让我开始寻找其他地方的地步.是的,我想我知道大部分提示和技巧,并且我已经将我的语法和应用程序描述为灰尘.
接下来是什么?
我希望找到一个解析器,它给我相同的可读性,可用性(我使用许多高级的pyparsing功能,如parse-actions来启动正在解析的输入的后处理)和python集成但是在10×表现.
我喜欢语法是纯Python的事实.
我所有的基本块都是正则表达式,所以重用它们会很好.
我知道我不能拥有所有东西所以我愿意放弃今天的一些功能来达到要求的10倍性能.
我从哪里开始?
我们的Python应用程序(一个很酷的Web服务)有一整套测试(单元测试,集成测试等),所有开发人员必须在提交代码之前运行它们.
我想在套件中添加一些性能测试,以确保没有人添加使我们运行得太慢的代码(对于一些相当随意的慢速定义).
显然,我可以将一些功能收集到测试中,计算时间并与某个预定义的阈值进行比较.
棘手的要求:
我的初步想法:
pstats结构,但我确信它是可行的.其他想法?
谢谢!
塔尔.
我买了一张空白的DVD来录制我最喜欢的电视节目.它带有20位数的贴纸.每个'0' - '9'中的2个.
我认为用数字标记我的新DVD收藏品是个好主意.我在录制的第一张DVD上贴了"1"标签,将19个剩余的贴纸放在抽屉里.
第二天,我买了另一张空白DVD(用它收到20张新贴纸),在录制完这个节目之后,我将它标记为"2".
然后我开始疑惑:贴纸什么时候会用完,我将无法再贴上DVD标签了?
几行Python,不是吗?
你能提供能够在合理的运行时间内解决这个问题的代码吗?
编辑:蛮力只需要太长时间才能运行.请改进您的算法,以便您的代码在一分钟内返回正确答案?
额外的功劳:如果DVD附带3个贴纸的每个数字怎么办?
我需要优化应用程序的RAM使用率.
请不要在讲课时告诉我在编写Python时我不应该关心内存.我有一个内存问题,因为我使用非常大的默认字典(是的,我也想要快速).我目前的内存消耗是350MB并且还在增长.我已经不能使用共享主机了,如果我的Apache打开更多进程,内存会翻倍并增加三倍......而且价格昂贵.
我做了大量的分析,我确切地知道我的问题在哪里.
我有几个带有Unicode密钥的大型(> 100K条目)词典.字典从140字节开始并且增长很快,但更大的问题是密钥.Python优化了内存中的字符串(或者我已经读过),因此查找可以进行ID比较('实际').不确定这对于unicode字符串也是如此(我无法'实习'它们).
存储在字典中的对象是元组列表(an_object,int,int).
my_big_dict [some_unicode_string] .append((my_object,an_int,another_int))
我已经发现拆分到几个字典是值得的,因为元组占用了大量的空间......
我发现在使用它们作为键之前我可以通过散列字符串来节省RAM!但是,遗憾的是,我遇到了32位系统的生日碰撞.(附带问题:我可以在32位系统上使用64位密钥字典吗?)
Linux(生产)和Windows上的Python 2.6.5.有关优化字典/列表/元组的内存使用的任何提示?我甚至想过使用C - 我不在乎这段很小的代码是否丑陋.这只是一个独特的位置.
提前致谢!
我有一个内存密集型的Python应用程序(介于几百MB到几GB之间).
我有几个非常小的Linux可执行文件,主应用程序需要运行,例如
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
Run Code Online (Sandbox Code Playgroud)
当我运行这些外部实用程序(一次,在长主进程运行结束时)使用subprocess.Popen我有时得到OSError: [Errno 12] Cannot allocate memory.
我不明白为什么......请求的过程很小!
系统有足够的内存用于更多的shell.
我正在使用Linux(Ubuntu 12.10,64位),所以我猜Subprocess调用了Fork.
而Fork分叉我现有的进程,从而使消耗的内存量增加一倍,并且失败了?
"写字复制"怎么了?
我可以在没有fork的情况下生成一个新进程(或者至少没有复制内存 - 重新启动)?
有关:
fork(),vfork(),exec()和clone()之间的区别
是否有可能使fabfile独立?
我不太喜欢运行外部工具'fab'.如果我设法将fabfile独立运行,我可以在(Eclipse/Pydev)IDE中运行该文件,轻松调试它,使用项目配置和路径等.
为什么这不起作用:
from fabric.api import run
def host_type():
run('uname -s')
if __name__ == '__main__':
host_type()
Run Code Online (Sandbox Code Playgroud) 在分析我们的代码时,我惊讶地发现数百万次调用
C:\ Python26\lib\encodings\utf_8.py:15(解码)
我开始调试,发现在我们的代码库中存在许多小错误,通常将字符串与unicode进行比较或添加sting和unicode.Python慷慨地解码字符串并在unicode中执行以下操作.
多么体贴.但是很贵!
我精通unicode,读过Joel Spolsky和Dive Into Python ......
我尝试将代码内部仅保留在unicode中.
我的问题 - 我可以关闭这个pythonic好人行为吗?至少在我发现所有这些错误并修复它们之前(通常通过添加一个u'u')?
其中一些非常难找(一个变量有时是一个字符串......).
Python 2.6.5(我不能切换到3.x).
python ×10
debugging ×1
decoding ×1
fabric ×1
fork ×1
fuzzy-search ×1
linux ×1
math ×1
optimization ×1
parsing ×1
performance ×1
puzzle ×1
pydev ×1
pyparsing ×1
spelling ×1
unicode ×1
unit-testing ×1