2018 年在使用或学习 Python 过程中,“醍醐灌顶“的点有哪些? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Pthon 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
pppy
V2EX    Python

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

  •  
  •   pppy 2019-01-16 14:57:25 +08:00 5201 次点击
    这是一个创建于 2528 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,欢迎讨论

    28 条回复    2019-01-17 11:38:09 +08:00
    hjq98765
        1
    hjq98765  
       2019-01-16 15:00:35 +08:00
    滥用 eval 会被打
    zhaishunqi
        2
    zhaishunqi  
       2019-01-16 15:19:22 +08:00
    @hjq98765 哈哈,大神,请说出你的故事...
    sidegem
        3
    sidegem  
       2019-01-16 15:54:15 +08:00
    @hjq98765 怎么算滥用
    xpresslink
        4
    xpresslink  
       2019-01-16 16:30:43 +08:00   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-01-16 16:40:18 +08:00
    kwargs 好,一个调用很深的函数,上层新增一个需求,直接塞一个 kwargs,在调用链最下面取一下,做分支判断。但是这样会被项目组成员打。

    如果是你个人项目,那没问题。 多用 kwargs.setdefault('', conf.xxx)
    azuginnen
        6
    azuginnen  
       2019-01-16 16:41:39 +08:00
    还有一个 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-01-16 16:50:48 +08:00
    @hjq98765 推荐 ast.literal_eval
    hjq98765
        8
    hjq98765  
       2019-01-16 17:20:56 +08:00
    @zhaishunqi
    @sidegem
    @mrchi
    来一个我之前开脑洞写的:
    a = '1,2,3,4,5,6'
    b = eval('['+a+']')

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

    func= curry(func)
    func(1)(2)(3)
    cgsv
        14
    cgsv  
       2019-01-16 19:04:29 +08:00
    @azuginnen 有必要用这个 table 吗?直接 globals()['print' + key]()
    KgM4gLtF0shViDH3
        15
    KgM4gLtF0shViDH3  
       2019-01-16 19:06:14 +08:00 via iPhone
    @xpresslink #4 面试做过,当时懵逼了,现在转 go 去了
    xpresslink
        16
    xpresslink  
       2019-01-16 19:20:50 +08:00
    @cgsv 实际上那些函数名字不是相同前辍。exec('print'+key)
    ipwx
        17
    ipwx  
       2019-01-16 19:32:57 +08:00   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-01-16 19:58:28 +08:00
    @hjq98765 不敢用 eval
    azuginnen
        19
    azuginnen  
       2019-01-16 21:21:46 +08:00
    @cgsv #14
    @xpresslink #16 是啊! ~
    penghong
        20
    penghong  
       2019-01-16 21:49:54 +08:00   2
    在团队协作中,可读性永远是最重要的,少用一些花里胡哨的东西。
    heimafinal
        21
    heimafinal  
       2019-01-16 22:14:26 +08:00
    @penghong 你说的不对
    lithiumii
        22
    lithiumii  
       2019-01-16 22:53:53 +08:00
    楼上各位大佬牛逼,与此同时我的代码基本上就是英语
    reself
        23
    reself  
       2019-01-16 23:15:11 +08:00 via Android
    装饰器

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

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

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

    '''
    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-01-17 10:51:47 +08:00
    感觉有点跑偏了,变成了 python 奇技淫巧
    zh826256645
        28
    zh826256645  
       2019-01-17 11:38:09 +08:00
    初学 Python 时,让我最惊喜的是 <<Python Cookbook>>
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5221 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 08:42 PVG 16:42 LAX 00:42 JFK 03:42
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86