V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
typing
V2EX  ›  Python

关于学习 Python

  •  2
     
  •   typing · 2014-05-30 07:51:36 +08:00 · 5954 次点击
    这是一个创建于 3859 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想在这里请求大伙帮助我决定一个系统学习Python的计划.

    其实说起来我用Python有一段时间了. 用过web.py写过网络应用, 用过Blender脚本系统写过自动化的几何处理程序, 用过Python做codeforces的题目.

    然而我终究觉得自己用Python停留在那种语法/库函数靠Google搜索的层级. 对于一个问题, 通常StackOverflow上第一篇命中的结果就被我用做解决方案了, 它们只是恰好能工作而已, 而并不知道这个解决方案的适用范围(比方说对于更为通用的问题之下有没有更好的方案), 其内在的机制(比方说对于执行效率的关注).

    对比C++, 我对每一行的语句的执行效率都大概有数, 甚至我都能想到这些语句生成的汇编码; 我对C++的语言设施也是较为熟练, 我可以针对要实现的逻辑确定基本正确的语言设施.
    然而对于Python, 我完全处于一种困惑的状态: 有那么多的语言设施, 不同的风格, 我到底该以什么样的标准去抉择?

    所以在这里, 我想请教万能的V2EX, 我想深度的学习Python, 换句话说, 我想学习idiomatic Python:
    我想能够根据自己将要实现的逻辑来决定使用什么样的语言特性, 而不是反过来: 学习了一堆语言特性, 然后再看它们可以用到何处;
    我想能够写出一手成熟的代码: 让其他Python程序员能够快捷的理解我的设计;
    我想去熟悉一个Python程序员所惯用的工作流, 比方说debugging, profiling, optimization(内存/效率上的), testing, documentation, 以及你们常用的工具.

    谢谢!
    第 1 条附言  ·  2014-06-27 16:42:47 +08:00
    19 条回复    2014-06-28 12:23:43 +08:00
    jprovim
        1
    jprovim  
       2014-05-30 08:25:52 +08:00   ❤️ 1
    這個...我來說兩句吧.

    1. 看書, 最簡單了, 也是基礎.
    2. 運氣好的話, 跟個大牛就解決了.
    3. 看開源的代碼, 比如說twisted, django之類的, 就是看看別人怎麼寫的. 別光看啊, 要理解爲什麼要這麼寫.

    當然了, 歸根到底就是python的B格比較高, '有且只有一種方法'. 如果別人寫的好, 你就改掉你的寫法. 什麼是寫的好? 能讀懂 -> 代碼精煉 -> 代碼短 -> 更pythonic.
    se77en
        2
    se77en  
       2014-05-30 08:46:27 +08:00   ❤️ 2
    推荐一本书 writing idiomatic python https://www.jeffknupp.com/writing-idiomatic-python-ebook/
    clino
        3
    clino  
       2014-05-30 09:03:25 +08:00   ❤️ 1
    "然而对于Python, 我完全处于一种困惑的状态: 有那么多的语言设施, 不同的风格, 我到底该以什么样的标准去抉择?"
    凭你的直觉先选一个,觉得有问题再调整
    因为别人的选择对你来说不一定合适,所以也不一定要因为别人的建议有太多犹豫
    mengzhuo
        4
    mengzhuo  
       2014-05-30 09:06:18 +08:00   ❤️ 1
    好久没有看到这么诚恳的帖子了,现在很多人就想花几天学个Python,就自称是个程序员,成为CEO,走上人生巅峰……
    你有这份耐心,就基本成功一半了。
    ---------------------------------------------------------
    我不是大牛
    profile,优化都需要数据结构的知识,
    了解Python的set list dict head效率和实现才能在具体应用中使用最好的数据结构
    多从标准库中学习他们的Python实现
    比如组合:
    https://docs.python.org/2/library/itertools.html#itertools.combinations

    语言特性的使用是看多别人代码才能知道的(看书也是看代码,所以不要在意细节啦),比如generator/yield的用法和lambda+map/reduce/filter/sorted/reversed的使用,LISP的特性╮(╯▽╰)╭

    debugging,testing是一门学问,具体看各大开源的项目里的testcase怎么写、debugging也可以看他们的issuse和fix。这里我要感谢一下大神 @pyKun 的带领和入门。

    还有很多事情是不遇到坑是不会知道的,比如实习生时,把2G的csv数据写到内存里的挫事我也干过……
    dbow
        5
    dbow  
       2014-05-30 09:18:26 +08:00   ❤️ 1
    既然懂C语言看Python源代码就好了,语言的feature, 效率一目了然,比如import os (LOAD_CONST -1, LOAD_CONST None, IMPORT_NAME->PyDict_GetItemString(f->fbuiltins, "__import__") -> PyEval_CallObject, STORE_NAME os -> PyDict_SetItem(f->f_locals, w, v)), 其它是编程技巧的事情。
    pyKun
        6
    pyKun  
       2014-05-30 09:25:59 +08:00   ❤️ 1
    @mengzhuo
    抬举我了,太不好意思了。。。。

    python比较亲民,楼主继续加油吧~
    rebornix
        7
    rebornix  
       2014-05-30 09:58:12 +08:00   ❤️ 1
    我觉得可能是我比较笨,C/C++/C#都能玩耍的很愉快,但是Python每次写都感觉怪怪的不得要领。
    lincanbin
        8
    lincanbin  
       2014-05-30 10:03:22 +08:00   ❤️ 1
    Python本来的设计,就是不需要你去搞懂这些。
    RIcter
        9
    RIcter  
       2014-05-30 10:47:07 +08:00 via iPad   ❤️ 1
    @se77en 好贵..实体书要220在亚马逊...
    lu18887
        10
    lu18887  
       2014-05-30 11:12:53 +08:00   ❤️ 1
    要让编程语言为你所用,而不是专门为了用语言的特性而用!在我看来,Python的开发效率大于执行效率的意义。Ruby Python这类快速开发的语言,在效率上是无法和native的C/C++等语言匹敌的,但是这两门语言的开发效率却远远大于C/C++的开发效率,你不需要 一堆的include 你不需要编写复杂的makefile,你也不用烦恼指针的magic,当C和C++的程序员在做这些的时候,你已经迅速的打出了一行Hello World。我没有嫌弃C/C++的意思,我自己也是用C的……
    tonghuashuai
        11
    tonghuashuai  
       2014-05-30 15:50:59 +08:00   ❤️ 1
    别光顾着看,从现在就开始动手写
    hslx111
        12
    hslx111  
       2014-05-30 17:22:23 +08:00   ❤️ 2
    我觉得Python目的就是要简单好用,至于性能问题,大部分用Python的情况对于性能其实要求不是很多,当你真的需要要求性能的时候,再看也来得及。
    当然多看看大牛的代码也是很好的学习,所以再次推荐一下我经常玩的网站http://www.checkio.org/,你可以自己写代码解决一个问题,提交之后就能看到其他人的代码,这样学起来印象比较深刻。
    datou552211
        13
    datou552211  
       2014-06-27 16:51:40 +08:00
    学习pythonic 的程序设计,多看好项目源码,最主要的多敲键盘,读万卷书不如行万里路。依赖google是正常行为。主要是兴趣使然,找到想做的东西,按项目流程走一边顶看几遍书
    hermitu
        14
    hermitu  
       2014-06-27 17:01:36 +08:00
    @se77en 这本书怎么样?你看过没有?适合刚入门的初学者吗?
    cbsw
        15
    cbsw  
       2014-06-27 18:33:30 +08:00
    对于想深入学习 python,我觉得可以找感兴趣的标准库,直接读源代码,既能知道那些库怎么更好的用,又能知道背后是如何实现的,还能学到 Python 的 coding style。如果想更加深入学习,比如怎么优化,我觉得可以直接看 python 的实现,不过我想绝大多数人可能不需要到这一级别,LZ应该也不属于那极少的一部分人,所以建议看看 python 标准库的实现。
    (PS:最近也准备深入学习 python,正在看标准库的源码,可以一起学习)
    frankzeng
        16
    frankzeng  
       2014-06-27 18:44:10 +08:00
    能够解决实际工作中的问题,让代码又有性能又易懂,其他都是次要的
    harryhao
        17
    harryhao  
       2014-06-27 19:09:54 +08:00
    请看 Python源码剖析
    heliar
        18
    heliar  
       2014-06-27 19:24:32 +08:00 via iPhone
    赞同楼上…
    Kabie
        19
    Kabie  
       2014-06-28 12:23:43 +08:00
    看自带的文档。。。就看标准库就行了…………另外记得看最新的3.x的……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   841 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.