6

Perl 习惯很难改掉。两种语言之间的变量声明、作用域、全局/局部不同。是否有一组推荐的 Python 语言习语可以减轻从 perl 编码到 Python 编码的过渡痛苦。

细微的变量拼写错误会浪费大量时间。

我知道变量声明问题在 python 人中是准宗教的,我不是在争论语言更改或功能,只是在两种语言之间建立可靠的桥梁,不会导致我的 perl 习惯使我的 python 工作失败。

谢谢。

4

5 回答 5

2

将 Python 类拆分为单独的文件(如在 Java 中,每个文件一个类)有助于发现范围界定问题,尽管这不是惯用的 Python(即不是 Pythonic)。

经过很多 perl 之后,我一直在编写 python,发现 tchrist 的这个很有用,即使它很旧:

http://linuxmafia.com/faq/Devtools/python-to-perl-conversions.html

习惯于不使用 perl 最出色的变量作用域是我的 perl->python 转换的第二个最困难的问题。如果你有很多 perl:第一个是显而易见的:CPAN。

于 2009-09-29T06:42:14.990 回答
1

在 python 中 $_ 不存在,除了 python shell 和具有全局范围的变量是不受欢迎的。

在实践中,这有两个主要影响:

  1. 在 Python 中,你不能像 Perl 那样自然地使用正则表达式,s0 匹配每个迭代的 $_ 并且类似地捕获匹配更麻烦
  2. Python 函数往往被显式调用或具有默认变量

然而,当人们认为在 Python 中几乎所有东西都变成了一个类时,这些差异就相当小了。当我以前做 Perl 的时候,我想到了“雕刻”;在 Python 中,我宁愿觉得自己在“作曲”。

Python 没有 Perl 的惯用丰富性,我认为尝试进行翻译可能是错误的。

于 2009-09-28T22:11:47.667 回答
1

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.

于 2009-09-28T21:36:16.757 回答
1

阅读、理解、关注和喜爱PEP 8 ,它详细介绍了有关 Python的所有内容的样式指南。

说真的,如果你想了解 Python 的推荐习语和习惯,那就是来源。

于 2009-09-29T08:17:38.403 回答
0

不要打错变量名。严重地。使用简短、简单、描述性的,在本地使用,不要依赖全局范围。

如果您正在做一个不能很好服务的大型项目,请使用 pylint、单元测试和 coverage.py 来确保您的代码符合您的预期。

从其他线程之一的评论中复制:

“'strict vars' 主要是为了阻止输入错误的引用和遗漏的 'my's 创建意外的全局变量(好吧,Perl 术语中的包变量)。这在 Python 中不会发生,因为裸分配默认为本地声明,而裸未分配符号导致异常。”

于 2009-09-28T23:06:07.360 回答