每日学习笔记(5)

1,python的全局变量使用类似于php,但有一点值得注意,如果你的全局变量是List或Dictionary之类的,那它就默认是可以全局访问,并不需要加global关键字
ExpandedBlockStart.gif 代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> # !/usr/bin/python
#
coding=utf-8

import sys
reload(sys)
sys.setdefaultencoding(
' utf8 ' )

myDict
= {}
myList
= []
global_var
= 0

def changeVar():
global global_var
myDict[
' 1001 ' ] = ' hello '
myDict[
' 1002 ' ] = ' world '
myList.append(
1 )
myList.append(
2 )
global_var
+= 1
def printVar():
for key in myDict.keys():
print " keyis%s " % key
print myDict[key]
print global_var
for item in myList:
print " itemis%s " % item
if __name__ == ' __main__ ' :

for i in range( 1 , 4 ):
myDict
= {}
changeVar()
printVar()

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

1)首先声明:

#coding=utf-8

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

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

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> import sys
reload(sys)
sys.setdefaultencoding(
' utf8 ' )

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

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

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

ExpandedBlockStart.gif 代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> import logging
Logger
= None
LogFile
= " c://test.log "

def initLogger():
global Logger
Logger
= logging.getLogger()
handler
= logging.FileHandler(LogFile)
formatter
= logging.Formatter( ' %(asctime)s*********%(message)s ' )
handler.setFormatter(formatter)
Logger.addHandler(handler)
Logger.setLevel(logging.INFO)

if __name__ == ' __main__ ' :
initLogger()
Logger.info(
" hello,world " )

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

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> if var in myList.keys():

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

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

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

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> # !/usr/bin/python
#
coding=utf-8

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

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> # !/usr/bin/env

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值