在Python环境中管理Perl习惯
Perl的习惯很难改掉。在这两种语言中,变量的声明、作用域以及全局和局部变量的处理方式是不同的。有没有一些推荐的Python编程习惯,可以让从Perl转到Python的过程变得不那么痛苦呢?
稍微拼错变量名可能会浪费大量时间。
我知道在Python圈子里,变量声明的问题几乎是个信仰问题。我并不是在争论语言的变化或新特性,只是希望能有一个可靠的桥梁,让我在这两种语言之间切换时,不会因为Perl的习惯而影响我在Python上的努力。
谢谢。
5 个回答
我觉得这个问题很不错,不过我对Perl没有什么经验,所以不太确定怎么给你最好的建议。
我建议你去谷歌搜索一下“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中,变量名从来没有特殊的符号来标识变量的属性;这不是Python的做法。任何合法的标识符都可以绑定到任何类型的Python对象上。
在Python中,$_这个东西除了在Python的命令行里是不存在的,而且全局变量也不太受欢迎。
这实际上有两个主要影响:
- 在Python中,你不能像在Perl那样自然地使用正则表达式,所以每次匹配的时候都要处理$_,这样会让匹配变得更加麻烦。
- Python中的函数通常需要明确调用,或者有默认的变量。
不过,当你考虑到在Python中几乎所有东西都变成了类时,这些差异就显得不那么重要了。我以前用Perl的时候觉得是在“雕刻”,而在Python中我更像是在“创作”。
Python没有Perl那种丰富的表达方式,我觉得试图把它们直接对比可能是个错误。
把Python的类分成不同的文件(就像Java一样,每个类一个文件)可以帮助我们更容易地发现作用域的问题,虽然这样做在Python中并不是很常见(也就是说,不太符合Python的风格)。
我在写Python之前用过很多Perl,发现tchrist的这个建议很有用,尽管它已经有点老了:
http://linuxmafia.com/faq/Devtools/python-to-perl-conversions.html
习惯没有Perl那种优秀的变量作用域是我从Perl转到Python时遇到的第二个最难的问题。第一个问题如果你用过很多Perl就很明显了:CPAN。