建议19:有节制使用from...import...
import VS from...import....
import test ## test 进入局部命令空间 + 进入系统模块字典中 sys.module[‘test‘];
from test import a ## a 进入局部命令空间 + test进入系统模块字典中(a 不在系统模块字典中);
## test_import.py from a import add from b import add # 最后起作用的是最近一次导入的函数,即不同模块相同函数存在覆盖情况; # 命令空间冲突 ##----嵌套导入----from b import person # a.pyform a import info # b.py
建议20:用absolute import 来导入模块 from app.sub1 import testmodule, 相对导入 import .. import testmodule在python 3中被删除(容易造成混乱);
建议21:i +=1 不等于 ++i; ++i 语法python 解析器当作 +(+1)来处理(永远等于+1,表示正数符号)并不是自增语法; --i: - (-1) 等于1 表示两个负号;
建议22:使用 with 关闭资源;
with open("path", "rw") as filehandle [, open("path_another", "r") as rhandle] ## f.__enter__() 进入文件上下文,生成上下文管理器对象 = f filehandle.read() filehandle.write() ... ## f.__exit__() 离开上下文,上下文管理器对象做清理善后工作,比如关闭 handle; ## 另外,python 还提供了 contextlib 来专门管理上下文
建议23:使用 else 简化循环;
for/while expr1: do_sth() break else: ## expr1 为 False时,执行else; 当 break 时,expr1仍然为True,此时不执行else; do_else_sth() ## 在遍历列表找值时,有用处;
建议24:异常处理基本原则
try: statment ##----不宜放入过多操作except <name1>: ##--- 异常处理尽量精细, 子类异常先处理 statmentexcept <name2,name3>: ## 异常提示要友好 statmentexcept: statment ## 其他异常统一处理, 各种可能性都有可能,此处异常说明要慎重 || 也可将异常 raise 抛给上层else: statment ## 没有异常finally: statment ## 不管是否有异常,依然会执行
建议25: 小心 finally 中的陷阱
情况1: 如果 异常没有被except处理,将会临时保存起来,执行finally后再抛出;但如果finally也抛异常或者有return 或 break时,临时异常会被丢弃或者覆盖;
# 情况2:try: if a <= 0: raise ValueError else: return a ## return a 之前先执行finally语句块,如果 finally 有return,那么该return a 失效 except ValueError: print(a) finally: print("End") reutrn -1;
建议26:深入理解 None, 正确判断对象为空
#### python 判断为空的情况汇总 #### None # 是一个常量,单例对象,类名 NoneType, 任何 None 都相等,固定id, id(None)False # 常量0、0L、0.0 #等,任意0数值类型‘‘ () [] {} #空序列
即,空值有很多种,但 相互都不is相等( [] is None ==> False);
list1 = [] if list1: ## 会调用 list1.__nonzero__方法来判断,返回 0/1 或者 True/False print(list1) ## 没有 __nonzero__ 方法,会调用 __len__ 方法 ,返回 0/1 ## __nonzero__ 和 __len__ 都没有 ,返回 True
建议27:字符串连接优先考虑 join 而不是 +;
’‘.join(strlist) (一次性加起来) 优优优于于于 result += strlist[i] (逐个加起来)
python 中的字符串是不可变对象; str1 + str2 每次都要申请一块新内存来存放结果;join 是一次性申请一块总大小地址,一次性存放;
建议28:格式化字符串优于使用format 而不是 %
##--------- % 格式化 -------------"%s" % "chaoren" ## 单个参数直接格式化"%s %s %s" % ("Hello", "World", "chaoren") ## 元组形式"%(key)s -- %(value)f" % dict1 ## 字典形式 ##---------- format 格式化 -----------"xxx {0} xxx {2}, xxx {1}".format("hello", "world", "!!!") ## 引用元组位置## 格式化规则百度
原文地址:https://www.cnblogs.com/alphabetax/p/11978598.html