pppy
V2EX  ›  Python

2018 年在使用或学习 Python 过程中,“醍醐灌顶“的点有哪些?

By pppy at 2019 年 1 月 16 日 · 5855 次点击

如题,欢迎讨论

28 条回复  •  2019-01-17 11:38:09 +08:00
hjq98765
   1
hjq98765  
   2019 年 1 月 16 日
滥用 eval 会被打
zhaishunqi
   2
zhaishunqi  
   2019 年 1 月 16 日
@hjq98765 哈哈,大神,请说出你的故事...
sidegem
   3
sidegem  
   2019 年 1 月 16 日
@hjq98765 怎么算滥用
xpresslink
   4
xpresslink  
   2019 年 1 月 16 日   ❤️ 2
我来一个吧,独家发明,是我深入理解了 python 的对象系统以后灵感一闪写出来的。

>>> add = type('add', (int,), {'__call__':lambda o,i: add(o.numerator+i)})
>>> add(1)
1
>>> add(2)
2
>>> add(1)(2)
3
>>> add(1)(2)(3)(4)
10
>>>
azuginnen
   5
azuginnen  
   2019 年 1 月 16 日
kwargs 好,一个调用很深的函数,上层新增一个需求,直接塞一个 kwargs,在调用链最下面取一下,做分支判断。但是这样会被项目组成员打。

如果是你个人项目,那没问题。 多用 kwargs.setdefault('', conf.xxx)
azuginnen
   6
azuginnen  
   2019 年 1 月 16 日
还有一个 python lookup table

lookup table
#function lookup table


def print1():
print(1)


def print2():
print(2)


def print3():
print(3)


def print4():
print(4)


ops = {
"1": print1,
"2": print2,
"3": print3,
"4": print4,
}


if __name__ == '__main__':

for key in ["1", "2", "3", "4"]:
ops[key]()
mrchi
   7
mrchi  
   2019 年 1 月 16 日
@hjq98765 推荐 ast.literal_eval
hjq98765
   8
hjq98765  
   2019 年 1 月 16 日
@zhaishunqi
@sidegem
@mrchi
来一个我之前开脑洞写的:
a = '1,2,3,4,5,6'
b = eval('['+a+']')

做到了跟[int(x) for x in a.split(',')]一样的效果
ererrrr
   9
ererrrr  
   2019 年 1 月 16 日
都是一些旁门左道.
xpresslink
   10
xpresslink  
   2019 年 1 月 16 日
@hjq98765
写得太丑陋了
b=list(eval(a))
cominghome
   11
cominghome  
   2019 年 1 月 16 日
@hjq98765 这样的代码三天后来看绝对一脸懵逼
pkoukk
   12
pkoukk  
   2019 年 1 月 16 日
@hjq98765
感觉自己掌握不了 py 就是因为你这样的大神太多了,为什么要有这么多种花式写法呢
每次读别人源码都是一种痛苦...
reself
   13
reself  
   2019 年 1 月 16 日
@xpresslink 扩展一下,是不是可以写个高阶函数来做柯里化哈哈

func= curry(func)
func(1)(2)(3)
cgsv
   14
cgsv  
   2019 年 1 月 16 日
@azuginnen 有必要用这个 table 吗?直接 globals()['print' + key]()
KgM4gLtF0shViDH3
   15
KgM4gLtF0shViDH3  
   2019 年 1 月 16 日 via iPhone
@xpresslink #4 面试做过,当时懵逼了,现在转 go 去了😂
xpresslink
   16
xpresslink  
   2019 年 1 月 16 日
@cgsv 实际上那些函数名字不是相同前辍。exec('print'+key)😂
ipwx
   17
ipwx  
   2019 年 1 月 16 日   ❤️ 2
https://github.com/haowen-xu/tfsnippet

上面是我的某项目,兼容 Python 2.7 & 3,TensorFlow 1.5 ~ 1.12 。为了达成这个目的,可谓花费不少心思。

比如以下摘自我项目的 requirements.txt:

----
backports.tempfile >= 1.0 ; python_version < '3.2'
filelock >= 3.0.10
frozendict >= 1.2.0
idx2numpy >= 1.2.2
lazy-object-proxy >= 1.3.1
natsort >= 5.3.3
numpy >= 1.12.1
pathlib2 >= 2.3.0 ; python_version < '3.5'
requests >= 2.18.4
scipy >= 1.2.0
semver >= 2.7.9
six >= 1.11.0
tqdm >= 4.23.0
----

比如我为了在 Travis CI 上测试兼容性做的 Docker 镜像:

https://github.com/haowen-xu/travis-tensorflow-docker

而且做到了 99% 测试覆盖率。
----

等等等等细节,就不一一论述了。我的项目,完全没有四楼等各位那么炫技,但是非常朴实。

我认为这才是 Python 的真谛。
ibreaker
   18
ibreaker  
   2019 年 1 月 16 日
@hjq98765 不敢用 eval
azuginnen
   19
azuginnen  
   2019 年 1 月 16 日
@cgsv #14
@xpresslink #16 是啊! 囧~
penghong
   20
penghong  
   2019 年 1 月 16 日   ❤️ 2
在团队协作中,可读性永远是最重要的,少用一些花里胡哨的东西。
heimafinal
   21
heimafinal  
   2019 年 1 月 16 日
@penghong 你说的不对
lithiumii
   22
lithiumii  
   2019 年 1 月 16 日
楼上各位大佬牛逼,与此同时我的代码基本上就是英语
reself
   23
reself  
   2019 年 1 月 16 日 via Android
装饰器

刚学时是这样的
@decorator
def func():
...

然后看到了这样的
@decorator(some_args)
def func():
...

后来自己有固定局部变量的需求时,才明白后面的写法是调用 decorator(some_args)生成了一个装饰器来装饰 func,起到了把 some_args 固定下来的作用。
dudu2017
   24
dudu2017  
   2019 年 1 月 16 日 via iPhone
借楼问一个关于 list 排序的问题。
需求:对文件夹中的文件(包括子文件里的文件)的绝对路径需要按照字典顺序( Lexicographical Numbers )输出并且目标文件夹的的文件优先。
现在我已经利用递归把文件夹里的所有文件的路径放 list 中了,但无论如何排序都无法按照需求打印出来,问题总出现在子文件里的文件没有按要求输出或者就是目标文件里的文件后打印。
还是想用递归但没有好的想法了,困扰了一天了,来这里求助一下。谢谢🙏
andylsr
   25
andylsr  
   2019 年 1 月 16 日 via Android
@ipwx star~
wind3110991
   26
wind3110991  
   2019 年 1 月 17 日
在看同事代码的我:“操,这个程序怎么那么慢,不就遍历个列表么,我来看看写了些什么鬼”
代码:

'''
def is_value_in_list(self, v):
filter_list = self.load_db_all_list() # about 100k numbers of elements

if v not in filter_list:
return False

return True
'''

——我日你大爷。。。
pppy
   27
pppy  
OP
   2019 年 1 月 17 日
感觉有点跑偏了,变成了 python 奇技淫巧 🤣
zh826256645
   28
zh826256645  
   2019 年 1 月 17 日
初学 Python 时,让我最惊喜的是 <<Python Cookbook>>
推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
© 2026 V2EX · 52ms · 3.9.8.5