Python开发中的一些小的tips记录

最近开始学习python语言的开发,并在一个实际的小工具中使用Python语言编写。其中遇到的一些小问题解决办法做一个记录。

关于import

在python中常常需要引入开发者自己开发一些模块或者说第三方模块的问题。比如在同一个目录比如test1下有两个py文件,test1.py,test2目录下面有test2.py。如果过test1.py需要用到test2.py中的某些定义类型或者方法,就需要在test1.py中调用import test2。但是,直接这样import是有问题的,运行时会提示模块未定义。原因在于test目录并没有被添加到python解析器的查找路径当中去,所以找不到test2.py的脚本文件。解决办法就是将test2目录添加到python的搜索路径当中去,可以使用python语句:sys.path.append(os.path.dirname(__file__)即可。需要保证在import test2之前调用上述语句导入路径。如下代码:
sys.path.append(os.path.dirname(__file__))
import test2

但是这样写代码好像不太优雅,前面一串这么长的代码在import之前,我这有强迫症的人是看不过去的。我们可以新建一个单独的python文件专门做路径的import工作:
import sys
import os
 
def load_path():
     sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../common"))
     sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../mail"))

load_path()
然后再在需要import的python中import这个file。
在python中还有一种import方式如:from module2 import *或者from module2.submodule1 import someclass等这里面其重要作用的就是__init__.py文件,这个文件可以为空,但是必须存在于模块所在的根目录下面。 关于import其实和ruby语言中的require是一样的,公司有很多人数ruby不如python好用,老是依赖的一下库找不到之类,和机器ruby的版本环境有关之类的,抱怨ruby写的工具不好用。其实python也存在这个问题,好用不好用,版本环境的依赖问题实际上是工具的开发者的责任,他们并没有考虑到工具使用者机器环境问题,很多依赖的库没有找到所导致。总的来说ruby和python都是很强大的后台系统管理运维工具语言,而且也很容易上手,值得花时间去学习。

关于python面向对象编程

在一个python脚本中我们可以只定义一个python类,或者一个方法或是一个变量或者是一条语句都行,但是需要注意的是如果其他python脚本import了整个脚本的话,那么定义的那条语句就会被执行,声明的那个变量也会存在运行时环境中。有时候我们定义了一个类,想测试整个类的可用性自然会在当前定义这个类的脚本中编写测试代码,但是为了防止其他脚本在import这个脚本的时候不调用我们的测试代码,我么可以如下编写:
class MyClass:
     def sayHello(self):
           print "hello"

if __name__ == "__main__":
     clz = MyClass()
     clz.sayHello()

这样的话如果在其他脚本imort myclass的时候,if语句将不成立,不会调用脚本中的测试代码,这样就保证了面向对象编程的脚本独立性。 此外在python中并没有提供private这些关键词在修饰对象的方法或者成员变量,我们通过__开头的方式来表示类的私有成员和方法。静态方法则可以使用@staticmethod来修饰,同时还有一个@classmethod来修饰,稍微有点区别,这里不再赘述。

关于python中的中文编码

中文编码问题对于我这样的python新手来说确实头疼得紧。其实主要把握的一点是要知道当前系统的默认编码格式和字符串本身的编码格式就好办。如下代码:
 #coding=gbk
 import sys
 
 str=u"我是中国人"
 print str.encode(sys.stdout.encoding)

注意上面那一行注释很必要,否则str=u“我是中国人”这一行会提示错误:
SyntaxError: Non-ASCII character '\xce' in file encode.py on line 3, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

pirnt那一行则是将str编码成系统的标准输出所用的编码格式,那么在输出时将能正确显示中文。如果str是从一个utf-8的网站服务中获取的变量,使用utf-8编码,则需要将str转换成stdout的编码才能正确显示:
str = str.decode("utf-8").encode(sys.stdout.encoding)

总结

python语言总体来说还是很好学的,我目前使用到的是python作为一种语言的基本特性,python本身是一种动态语言,其强大的动态性和区别于其他语言的一些特性暂时还没有大范围使用到,今后在学习当中继续摸索。总的来说python语言简单高效(开发效率高),风格独特^_^
您的回应...

相关话题

查看全部

也许你感兴趣

换一批

热门标签

更多