1,python的全局变量使用类似于php,但有一点值得注意,如果你的全局变量是List或Dictionary之类的,那它就默认是可以全局访问,并不需要加global关键字

  1. #!/usr/bin/python  
  2. #coding=utf-8  
  3.  
  4. import sys  
  5. reload(sys)  
  6. sys.setdefaultencoding('utf8')  
  7.  
  8. myDict = {}  
  9. myList = []  
  10. global_var = 0 
  11.  
  12. def changeVar():  
  13.     global global_var  
  14.     myDict['1001'] = 'hello'  
  15.     myDict['1002'] = 'world'  
  16.     myList.append(1)  
  17.     myList.append(2)  
  18.     global_var += 1  
  19. def printVar():  
  20.     for key in myDict.keys():  
  21.         print "key is %s" % key  
  22.         print myDict[key]  
  23.     print global_var  
  24.     for item in myList:  
  25.         print "item is %s" % item  
  26. if __name__ == '__main__':  
  27.       
  28.     for i in range(1,4):  
  29.         myDict = {}  
  30.         changeVar()  
  31.         printVar() 

 2,我个人处理python中文编码的一个基本流程是:

1)首先声明:

 #coding=utf-8

这样确保中文字符可以在代码文件中显示,然后代码文件也保存为utf8(无BOM头结构)

2)为处理方便,将系统的默认编码处理方式也改成utf8

  1. import sys  
  2. reload(sys)  
  3. sys.setdefaultencoding('utf8') 

3)然后对代码中处理的变量var,一个基本原则就是:如果你明确知道变量的自身编码,那么就根据其编码decode为unicode,此时可以通过type(var) is unicode是否为true来确定是否已经转成unicode了,然后你可以再将其encode为utf8格式,当然,如果你一开始就不知道变量var 是什么编码,那么建议采用chardet库来进行检测,这个库Mozilla也在用的,准确度还是不错的。

4)如果你不担心存储的性能问题,强烈建议全部存储为utf8吧,别再啥gb2312,gbk之类,烦死了

3,python的日志模块非常简练,方便,实例如下: 

  1. import logging  
  2. Logger = None 
  3. LogFile = "c://test.log" 
  4.  
  5. def initLogger():  
  6.     global Logger  
  7.     Logger = logging.getLogger()  
  8.     handler = logging.FileHandler(LogFile)  
  9.     formatter = logging.Formatter('%(asctime)s ********* %(message)s')  
  10.     handler.setFormatter(formatter)  
  11.     Logger.addHandler(handler)  
  12.     Logger.setLevel(logging.INFO)  
  13.  
  14. if __name__ == '__main__':  
  15.     initLogger()  
  16.     Logger.info("hello,world") 

4,在判断一个变量是否在一个List或Dictionary中存在时,一定要小心变量的类型是否和List或Dictionary中存储的变量类型是否一致,否则就悲剧了,我最近就碰到这样一个bug, 

  1. if var in myList.keys(): 

如果类型不一致,那么这个判断会始终都是false的

5,脚本进入生产环境后,一定记得把debug置为false,从而将debugs时使用的print信息都屏蔽掉,最好还是结合Logger来进行调试吧

6,Python脚本开头都加入下面这两句

  1. #!/usr/bin/python  
  2. #coding=utf-8 

如果为了可移植性考虑,你也可以将第一句写成

  1. #!/usr/bin/env  

不过我还是建议你用第一种,毕竟自己指定python的版本才放心,要是依靠系统来查找,若存在多个python版本,那就悲剧了