在Python环境中管理Perl习惯

时间:2009-09-28 21:02:52

标签: python perl transitions

Perl的习惯很难。变量声明,作用域,全局/本地在两种语言之间是不同的。是否有一组推荐的python语言习语,它们将使从perl编码到python编码的过渡变得不那么痛苦。

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

我理解变量声明问题在python人中是准宗教的 我不是在争论语言的变化或功能,只是一种可靠的桥梁 这两种语言不会导致我的perl习惯陷入我的python努力。

感谢。

5 个答案:

答案 0 :(得分:2)

将Python类拆分为单独的文件(比如Java,每个文件一个类)有助于找到范围问题,尽管这不是惯用的python(即不是pythonic)。

我经过多次perl编写python后发现这很有用,即使它很老了:

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

在没有perl最优秀的变量范围的情况下习惯这样做是我的perl-> python过渡的第二个最难的问题。如果你有很多perl,第一个是显而易见的:CPAN。

答案 1 :(得分:1)

我喜欢这个问题,但我没有任何Perl经验,所以我不确定如何最好地建议你。

我建议您在Google上搜索“Python惯用语”。你会发现一些宝石。特别是:

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

http://docs.python.org/dev/howto/doanddont.html

http://jaynes.colorado.edu/PythonIdioms.html

关于变量“声明”问题,这是我最好的建议:

请记住,在Python中,对象具有自己的生命,与变量名称分开。变量名是绑定到对象的标记。您可以随时将名称重新绑定到不同的对象,可能是完全不同的类型。因此,这是完全合法的:

x = 1    # bind x to integer, value == 1
x = "1"  # bind x to string, value is "1"

Python实际上是强类型的;如果你不相信我,试着执行代码1 +“1”并查看它的工作情况。在没有显式类型强制的情况下,值为1的整数对象不接受添加字符串值。因此,Python名称永远不会有标记变量属性的sigil字符;这不是Python如何做的事情。任何合法标识符名称都可以绑定到任何类型的任何Python对象。

答案 2 :(得分:1)

在python $ _中不存在,除了在python shell中,并且全局范围的变量都不受欢迎。

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

  1. 在Python中你不能像Perl那样自然地使用正则表达式,s0匹配每个迭代的$ _并且类似地捕获匹配更加麻烦
  2. Python函数倾向于显式调用或具有默认变量
  3. 然而,当人们认为在Python中几乎所有东西都变成了一个类时,这些差异相当小。当我以前做Perl时,我想到了“雕刻”;在Python中,我觉得我在“作曲”。

    Python没有Perl的惯用功能,我认为尝试翻译可能是错误的。

答案 3 :(得分:1)

阅读,理解,关注并热爱 PEP 8 ,其中详细介绍了有关Python的所有的样式指南。

说真的,如果你想知道Python推荐的习惯用语和习惯,那就是源代码。

答案 4 :(得分:0)

不要错误输入您的变量名称。认真。使用简短,易于描述的,在本地使用它们,而不是依赖于全局范围。

如果你正在做一个没有得到很好服务的大型项目,请使用pylint,unit tests和coverage.py来确保你的代码符合预期。

从其中一个other threads

的评论中复制

“'strict vars'主要是为了阻止错误的引用和错过'我的'来创建偶然的全局变量(以及Perl术语中的包变量)。这在Python中不会发生,因为裸分配默认为本地声明,裸露的未分配符号会导致异常。“