关于学习 Python

2014-05-30 07:51:36 +08:00
 typing
我想在这里请求大伙帮助我决定一个系统学习Python的计划.

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

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

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

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

谢谢!
5955 次点击
所在节点    Python
19 条回复
jprovim
2014-05-30 08:25:52 +08:00
這個...我來說兩句吧.

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

當然了, 歸根到底就是python的B格比較高, '有且只有一種方法'. 如果別人寫的好, 你就改掉你的寫法. 什麼是寫的好? 能讀懂 -> 代碼精煉 -> 代碼短 -> 更pythonic.
se77en
2014-05-30 08:46:27 +08:00
推荐一本书 writing idiomatic python https://www.jeffknupp.com/writing-idiomatic-python-ebook/
clino
2014-05-30 09:03:25 +08:00
"然而对于Python, 我完全处于一种困惑的状态: 有那么多的语言设施, 不同的风格, 我到底该以什么样的标准去抉择?"
凭你的直觉先选一个,觉得有问题再调整
因为别人的选择对你来说不一定合适,所以也不一定要因为别人的建议有太多犹豫
mengzhuo
2014-05-30 09:06:18 +08:00
好久没有看到这么诚恳的帖子了,现在很多人就想花几天学个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
2014-05-30 09:18:26 +08:00
既然懂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
2014-05-30 09:25:59 +08:00
@mengzhuo
抬举我了,太不好意思了。。。。

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

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

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

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

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

© 2021 V2EX