当你开始学习Python时,你希望你知道什么?

Und*_*ion 47 python

我已经决定学习Python 3.对于那些之前已经有过的东西,你发现什么是最有用的,希望你早点知道?

Ale*_*lli 57

我在1.5.2版本之前学习了Python,所以当时关键的东西可能不是今天的关键.

话虽这么说,我花了一点点关键的东西来实现,但我现在考虑的关键:多的功能,其他语言将使内在实际上是由标准库和内置插件提供.

语言本身是小而简单,但直到你熟悉的内置插件和标准库的"核心部分"(例如,时下,sys,itertools,collections,copy,...),你会被重新发明轮子一遍又一遍.因此,您投入熟悉这些部件的时间越多,您的进度就会越顺畅.每当你有一个你想做的任务时,这似乎没有语言直接支持,首先要问自己:标准库中的内置函数或模块将使任务更简单,甚至可以全部完成为了我?有时不会有任何,但通常情况下,你会通过这种思维方式找到出色的解决方案.

  • 集合和itertools太棒了.我也希望更多人了解optparse.引用Andrew Perry的话说,"[令人惊讶的是]'import optparse'如何将一个hackish Python脚本变成类似"真正的"软件的东西." http://twitter.com/pansapiens/statuses/5438320772 (6认同)
  • Optparse 现在已被弃用,取而代之的是 argparse。 (2认同)

Ale*_*dru 33

  1. 我希望我不懂Java.
  2. 更多功能编程.(参见itertools模块,list comprehension,map(),reduce()或filter())

  • 了解更多语言总是更好 (7认同)
  • 1.缺乏一致性(数组与集合?).2.太多层(通常无用的)抽象(检查IO)3.传递抛出的异常(抛出IOException)4.缺少typedef(是继承等价吗?)5.令人困惑:PriorityBlockingQueue有:poll,take,remove(无用的抽象?).6.缺乏仿函数和运算符重新定义.我可以列举一些. (5认同)
  • Java有什么问题? (4认同)

Pau*_*jan 28

列表理解(清楚地列出清单):

[x for x in y if x > z]
Run Code Online (Sandbox Code Playgroud)

生成器扩展(与列表推导相同,但在使用之前不进行评估):

(x for x in y if x > z)
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 25

两个脑痉挛的事情.其中一个不适用于Python 3.

a = 095
Run Code Online (Sandbox Code Playgroud)

不行.为什么?前导零是八进制文字.9在八进制文字中无效.

def foo( bar=[] ):
    bar.append( 1 )
    return bar
Run Code Online (Sandbox Code Playgroud)

不行.为什么?可重用的默认对象被重用.

  • FTR:这是第一个不适用于python 3. octals表示为0o95.好多了恕我直言. (4认同)

Rob*_*ney 20

  • enumerate是为了什么.
  • seq = seq.append(item)seq = seq.sort()都设置seqNone.
  • 使用set删除重复.
  • 几乎所有的itertoolscollections模块.
  • 函数参数的前缀***前缀如何工作.
  • 函数的默认参数如何在内部工作(即什么f.func_defaults是).
  • 如何(为什么,真的)设计功能,以便它们与map和一起使用zip.
  • __dict__在班级中的作用.
  • import实际上做了什么.

  • @Michael Foukarakis,不要惊呆了.Python坚持命令/查询分离的原则.如果你得到一个值,你可以确信你没有改变对象; 如果你改变对象,你会得到"无".http://en.wikipedia.org/wiki/Command-query_separation (12认同)
  • @steveha,@ Tim Pietzcker:有一些例外,比如`dict.pop(key)`(变异和返回). (4认同)

Bry*_*ock 17

学习如何使用 iPython 它有Tab完成.使用'whos'查看命名空间中的所有元素.

导入模块后,可以轻松查看代码:

>>> import os
>>> os?? # this display the actual source of the method
>>> help() # Python's interactive help. Fantastic!
Run Code Online (Sandbox Code Playgroud)

大多数Python模块都有详细记录; 从理论上讲,你可以学习iPython,你可以通过同一个工具学习其他你需要知道的知识.

iPython还有一个调试模式,pdb().最后,您甚至可以将iPython用作启用python的命令行.基本的UNIX命令用作%魔术方法.任何非魔术命令的命令都可以执行:

>>> os.system('cp file1 file2')
Run Code Online (Sandbox Code Playgroud)

  • `files =!find path/-type f`将`files`设置为你期望的列表. (3认同)

ins*_*get 16

没有类型的变量名称.例如,不要将变量命名为"file"或"dict"


Dav*_*ger 13

装饰.编写自己的东西不是你可能想要立即做的事情,但是从一开始就知道@staticmethod并且@classmethod可以获得它们(以及它们之间的区别)是一个真正的优点.


ʞɔı*_*ɔıu 7

  • 使用help()在外壳上的任何对象,类或路径
  • 您可以import code; code.interact(local=locals())在代码中的任何位置运行它将在该确切点启动python shell
  • 你可以运行python -i yourscript.py在yourscript.py结束时启动一个shell


Han*_*Gay 5

最有帮助的:深入Python.正如评论者所指出的,如果你正在学习Python 3,那么Dive Into Python 3更适用.

早知道:virtualenv.


Kil*_*ilo 5

单个项目的元组必须以逗号结尾,否则它不会被解释为元组.

pprint() 非常方便(是的,2 p)

reload() 当您在对依赖模块进行大量快速更改的同时重新测试模块时非常有用.

并尽可能多地学习常用的"成语",否则你会想到一个更好的做事方式,当成语真的被认为是最好的方式时(例如丑陋的表达方式' '.join(),或为什么那里有答案)是没有isInt(string)功能......答案是你可以用try来包装"可能"整数的用法:然后如果它不是有效的int就捕获异常.解决方案效果很好,但听起来像是一个可怕的答案当你第一次遇到它时,你可以浪费很多时间说服自己它真的是一个好方法.

这些是浪费我几个小时的时间来确定我的一些代码感觉错误的初稿,真的是可以接受的.

来自python.org的阅读材料:

http://wiki.python.org/moin/BeginnerErrorsWithPythonProgramming http://wiki.python.org/moin/PythonWarts