你觉得优雅的 python 代码片段

2015-08-06 14:07:12 +08:00
 WKPlus

刚刚看到这个帖子 /t/210811 有感,代码也不是越短越优雅,那么(这个转折好像并不合适)有没有你觉得能称得上优雅的python代码(写过或看过的都可),最好短一点。

我先来一个,寻找list中满足某个条件的第一个元素,我写了三个版本:

版本一:

target = None
for e in elements:
    if condition(e):
         target = e
         break

版本二:

e = [i for i in l if condition(i)][0]  # 至少包含一个这类元素,所以这里不用判断

版本三:

e = next((i for i in l if condition(i)), None)

版本一缺点:太长
版本二缺点:效率不高
暂时没发现版本三的缺点

3211 次点击
所在节点    Python
8 条回复
realityone
2015-08-06 15:35:28 +08:00
filter(condition, l)
saber000
2015-08-06 17:20:15 +08:00
昨晚新写的很暴力的lazy import实现:
https://github.com/MrLYC/ycyc/blob/dev/ycyc/base/lazyutils.py#L80

def lazy_import(module_name):
class FakeModule(object):
def __getattribute__(self, attr):
module = importlib.import_module(module_name)
self.__dict__ = module.__dict__
return getattr(module, attr)

return FakeModule()

用法:
os = lazy_import("os")
print(os.listdir(".")) # as same as `import os`
balabala = lazy_import("balabala")
balabala.xxx() # raise ImportError here
saber000
2015-08-06 17:21:03 +08:00
@saber000 果不其然缩进跪了,点链接吧
plqws
2015-08-06 18:04:55 +08:00
待到 python 回调时,js 在丛中笑
zhuangzhuang1988
2015-08-06 23:06:28 +08:00
zhuangzhuang1988
2015-08-06 23:18:08 +08:00
WKPlus
2015-08-06 23:41:55 +08:00
@realityone 用filter和第二个版本一样,改成ifilter和第三个版本一样
WKPlus
2015-08-06 23:53:51 +08:00
@saber000 恩,蛮有意思的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/211226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX