我一直在学习,工作和玩Python一年半.随着生物学家慢慢转向生物信息学,这种语言一直是我在实验室做出的所有主要贡献的核心.我或多或少地爱上了Python允许我表达漂亮解决方案的方式,以及语言的语义,允许从思想到可行代码的这种自然流动.
我想知道的是你对我在这个论坛或其他论坛中很少见到的一个问题的答案.对于那些正在改进Python的人来说,这个问题对我来说似乎很重要,但是他想知道他的下一步应该是什么.
让我总结一下我不想先问的问题;)
我想知道你的意见,是:
您将向Python熟练人员推荐哪些步骤,从学徒到大师状态(随意停止,无论您的专业知识在哪里),以便一个人不断改进,成为更好,更好的Python编码器,一步一步.SO上的一些人几乎看起来值得为他们的Python实力而敬拜,请赐教:)
我会喜欢的那种答案(但随意给读者带来惊喜:P)的格式或多或少是这样的:
我非常关心在不同的阶段知道你应该注意什么的意见,以便不断进步(当然有适当的努力).如果您来自特定的专业领域,请在此字段中讨论您认为合适的路径.
编辑:感谢您的好评,我又回到了Python改进的轨道!我真的很感激!
whe*_*ies 471
我认为Python掌握的过程类似于:
wes*_*cpy 92
理解(更深入地)Python的数据类型及其在内存管理方面的作用
正如社区中的一些人所知,我教授Python课程,最受欢迎的课程是全面的Intro + Intermediate课程以及介绍应用程序开发各个领域的"高级"课程.
很多时候,我被问到一个非常类似的问题,"我应该参加你的介绍还是高级课程?我已经编程了1到2年的Python,我认为介绍对我来说太简单了所以我会喜欢直接跳到高级... 你会推荐哪个课程?"
为了回答他们的问题,我探究了他们在这个领域的强大程度 - 不是说这是衡量他们是否已经为任何高级课程做好准备的最好方法,而是看他们的基础知识与Python的对象有多好.内存模型,这是许多 Python错误的原因,这些错误不仅是那些不仅是初学者而且还超越了那些人的人.
为此,我将它们指向这个简单的两部分测验问题:
![例1:x = 42; Y = X; X + = 1; print x,y Ex2:x = [1,2,3]; y = x; x [0] = 4;打印x,y](https://imgur.com/6dxRh.png)
很多时候,他们能够获得输出,但是为什么更难以及更重要的回应...我会将输出权衡为答案的20%,而"为什么"得到80%的信用.如果他们无法理解为什么,无论他们有多少Python经验,我总会引导人们参加全面的介绍+中级课程,因为我在对象和内存管理上花了一个讲座,你应该能够回答这个问题.输出和充满信心的原因.(仅仅因为你知道Python的语法在1 - 2年后不会让你准备好超越"初学者"标签,直到你对Python的工作原理有了更好的理解.)
需要类似答案的后续调查甚至更难,例如,
例3
x = ['foo', [1,2,3], 10.4]
y = list(x) # or x[:]
y[0] = 'fooooooo'
y[1][0] = 4
print x
print y
Run Code Online (Sandbox Code Playgroud)
我推荐的下一个主题是很好地理解引用计数,学习"实习"意味着(但不一定使用它),学习浅层和深层副本(如上面的例3所示),最后是各种类型之间的相互关系.语言中的构造,即列表与元组,dicts与集合,列表推导与生成器表达式,迭代器与生成器等等; 然而,所有其他建议是另一个时间的另一个帖子.希望这有助于此期间!:-)
PS.我同意其他回应,以便更深入地了解内省以及研究其他项目的源代码,并为这两个建议添加强大的"+1"!
PPS.好问题BTW.我希望我在开始时能够很聪明地问这样的事情,但那是很久以前的事了,现在我正在尝试用我多年的全职Python编程来帮助别人!
ami*_*mit 48
def apprentice():
read(diveintopython)
experiment(interpreter)
read(python_tutorial)
experiment(interpreter, modules/files)
watch(pycon)
def master():
refer(python-essential-reference)
refer(PEPs/language reference)
experiment()
read(good_python_code) # Eg. twisted, other libraries
write(basic_library) # reinvent wheel and compare to existing wheels
if have_interesting_ideas:
give_talk(pycon)
def guru():
pass # Not qualified to comment. Fix the GIL perhaps?
Run Code Online (Sandbox Code Playgroud)
Hum*_*art 41
我会给你最简单,最有效的建议,我认为任何人都可以给你:代码.
你只能通过编码更好地使用一种语言(这意味着理解它).您必须自己积极地享受编码,受到启发,提出问题并找到答案.
有一个小时的闲暇?编写将反转字符串的代码,并找出最佳解决方案.一个免费的晚上?为什么不尝试一些网络抓取.阅读其他人的代码.看看他们是如何做的.问问自己你会做什么.
当我对我的计算机感到无聊时,我打开了我的IDE和代码风暴.我记下听起来很有趣,充满挑战的想法.一个URL缩短器?当然,我可以做到.哦,我学会了如何将数字从一个基数转换为另一个作为副作用!
无论您的技能水平如何,这都有效.你永远不会停止学习.通过在业余时间积极编码,您只需付出额外的努力就能理解语言,最终成为一名大师.您将构建知识和可重用代码并记住习语.
小智 24
如果你正在使用python进行科学研究(你似乎是),其中一部分将是学习和理解科学图书馆,对我而言,这些将是
了解如何使用正确的库并对代码进行矢量化对于科学计算至关重要.
我想补充一点,以常见的pythonic方式处理大型数值数据集(面向对象的方法,列表,迭代器)可能效率极低.在科学计算中,可能需要以与大多数传统python编码器处理数据的方式大不相同的方式构建代码.
dka*_*ins 23
谷歌最近刚刚发布了一个在线Python课程("课程"中的"课程").
http://code.google.com/edu/languages/google-python-class/
我知道这不能回答你的完整问题,但我认为这是一个很好的起点!
ins*_*get 10
我在一个夏天首先通过在python网站上做教程来学习python(遗憾的是,我似乎无法再找到它,所以我无法发布链接).
后来,我在大学的一年级课程中教我蟒蛇.在接下来的夏天,我练习了PythonChallenge以及来自Google Code Jam的问题.解决这些问题有助于从算法的角度以及从学习Python可以做什么的角度以及如何操纵它来充分利用python.
出于类似的原因,我听说代码高尔夫也有效,但我从来没有尝试过.
Cap*_*ton 10
这不会让你成为大师,但要开始,尝试解决项目欧拉问题 如果你有高中数学并且知道谷歌如何,前50名左右不应该征税.当你解决一个问题时,你会进入论坛,在那里你可以看到其他人的解决方案,这些解决方案会教会你更多.虽然要体面,也不要发布你的解决方案,因为这个想法是鼓励人们为自己解决问题.
如果你使用暴力算法,强迫自己在Python中工作是不可原谅的.这将教您如何在内存中布置大型数据集,并使用字典等快速语言功能有效地访问它们.
从我自己这样做,我学到了:
而且非常重要
所有这些都与生物信息学有关
不可否认,我从那次经历中没有了解Python的OOP功能.
您是否看过" 使用Python进行生物信息学编程 " 一书?看起来你是焦点小组的确切成员.
你已经有了很多阅读材料,但如果你能处理更多,我建议你通过阅读Python增强建议来了解python的演变,特别是"已完成"的PEP和"延迟,放弃,撤回和拒绝"政治公众人物.
通过了解语言如何变化,做出的决定及其理由,您将吸收Python的哲学并理解"惯用的Python"是如何产生的.
http://www.python.org/dev/peps/
| 归档时间: |
|
| 查看次数: |
360492 次 |
| 最近记录: |