Perl 习惯很难改掉。两种语言之间的变量声明、作用域、全局/局部不同。是否有一组推荐的 Python 语言习语可以减轻从 perl 编码到 Python 编码的过渡痛苦。
细微的变量拼写错误会浪费大量时间。
我知道变量声明问题在 python 人中是准宗教的,我不是在争论语言更改或功能,只是在两种语言之间建立可靠的桥梁,不会导致我的 perl 习惯使我的 python 工作失败。
谢谢。
Perl 习惯很难改掉。两种语言之间的变量声明、作用域、全局/局部不同。是否有一组推荐的 Python 语言习语可以减轻从 perl 编码到 Python 编码的过渡痛苦。
细微的变量拼写错误会浪费大量时间。
我知道变量声明问题在 python 人中是准宗教的,我不是在争论语言更改或功能,只是在两种语言之间建立可靠的桥梁,不会导致我的 perl 习惯使我的 python 工作失败。
谢谢。
将 Python 类拆分为单独的文件(如在 Java 中,每个文件一个类)有助于发现范围界定问题,尽管这不是惯用的 Python(即不是 Pythonic)。
经过很多 perl 之后,我一直在编写 python,发现 tchrist 的这个很有用,即使它很旧:
http://linuxmafia.com/faq/Devtools/python-to-perl-conversions.html
习惯于不使用 perl 最出色的变量作用域是我的 perl->python 转换的第二个最困难的问题。如果你有很多 perl:第一个是显而易见的:CPAN。
在 python 中 $_ 不存在,除了 python shell 和具有全局范围的变量是不受欢迎的。
在实践中,这有两个主要影响:
然而,当人们认为在 Python 中几乎所有东西都变成了一个类时,这些差异就相当小了。当我以前做 Perl 的时候,我想到了“雕刻”;在 Python 中,我宁愿觉得自己在“作曲”。
Python 没有 Perl 的惯用丰富性,我认为尝试进行翻译可能是错误的。
I like the question, but I don't have any experience in Perl so I'm not sure how to best advise you.
I suggest you do a Google search for "Python idioms". You will find some gems. In particular:
http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
http://docs.python.org/dev/howto/doanddont.html
http://jaynes.colorado.edu/PythonIdioms.html
As for the variable "declaration" issue, here's my best advice for you:
Remember that in Python, objects have a life of their own, separate from variable names. A variable name is a tag that is bound to an object. At any time, you may rebind the name to a different object, perhaps of a completely different type. Thus, this is perfectly legal:
x = 1 # bind x to integer, value == 1
x = "1" # bind x to string, value is "1"
Python is in fact strongly typed; try executing the code 1 + "1" and see how well it works, if you don't believe me. The integer object with value 1 does not accept addition of a string value, in the absence of explicit type coercion. So Python names never ever have sigil characters that flag properties of the variable; that's just not how Python does things. Any legal identifier name could be bound to any Python object of any type.
阅读、理解、关注和喜爱PEP 8 ,它详细介绍了有关 Python的所有内容的样式指南。
说真的,如果你想了解 Python 的推荐习语和习惯,那就是来源。
不要打错变量名。严重地。使用简短、简单、描述性的,在本地使用,不要依赖全局范围。
如果您正在做一个不能很好服务的大型项目,请使用 pylint、单元测试和 coverage.py 来确保您的代码符合您的预期。
从其他线程之一的评论中复制:
“'strict vars' 主要是为了阻止输入错误的引用和遗漏的 'my's 创建意外的全局变量(好吧,Perl 术语中的包变量)。这在 Python 中不会发生,因为裸分配默认为本地声明,而裸未分配符号导致异常。”