一周多时间的投标,谈判,订货,供货,顺利完成,终于又可以坐下来看书学习了。
1、代码风格
- 形成自己的代码风格:
- 变量的命名:小写 + 下划线
- 类的命名:大写开头 + 下划线
- 善于利用变量拆包进行复制,例如:a, b = b, a
- 对可迭代对象的遍历 for … in …
- 对文件的访问 with … open( )
- 形成自己风格的format格式:
- %s
- s.format是python最为推荐的字符串格式化方法,对比占位符’%s’与format的可读性:
print ('Hello %s!' %('Tom', )) print ('Hello %(name)s!' %{'name': 'Tom'}) value = {'greet': 'Hello world', 'language': 'Python'} print ('%(greet)s from %(language)s' % value) print ('{greet} from {language}'.format( greet = 'Hello world', language = 'Python'))
3、理解python与C的不同
- ’ 与 " 在定义字符串时没有任何区别
- 三元操作符:c ? x : y 在python中等同于 x if c else y
4、在代码中添加注释
- 无论是否简单,都要给外部可访问的函数和方法添加注释;
- 注释要清楚地描述方法的功能,并对参数及返回值以及可能发生的异常进行说明
5、添加适当的空行使得代码布局更优雅合理
6、函数编写4原则
- 函数设计尽量短小,嵌套不宜过深;
- 函数声明应合理简单易于使用,包括:
- 函数名赢正确反应其大体功能;
- 参数个数不宜过多
- 参数设计应该考虑向下兼容;
- 一个函数只做一件事。
7、常量的处理
- python没有传统意义上的常量;
- 可以定义常量,命名规则最好采用全部大写 + 下划线;
- 可以自定义常量类;
- 常量都集中到一个文件中
12、不推荐使用type进行类型检查
不刻意进行类型检查,而是在出错的情况下通过抛除异常进行处理,确实需要进行类型检查时,不建议使用type进行类型检查,因为type对自定义的类型活着定制化的数据类型是不支持的,建议使用工厂函数,或是用:
isinstance(object, classinfo)
# classinfo 可以为直接或间接类名,基本类型名活着由它们组成的元组
13、尽量转换为浮点数后再做除法
虽然python3中已经解决了这个问题,但考虑的兼容性,还是尽量转换为浮点数再做除法。
>>> a = 1.2
>>> a = 1
>>> b = 2
>>> a/b
0.5
>>> a = 1
>>> b = 2
>>> a/b
0
>>> a = 1.0
>>> b = 2
>>> a/b
0.5
>>> a = 1
>>> b = 2.0
>>> a/b
0.5
14、 警惕eval()的安全漏洞
没具体应用过,理解不深,初步的理解是:eval函数可以执行一个字符串变量定义的“命令”,如果被恶意利用,可以执行一些非法操作
eval (source[, globals[, locals]]]]) -> value
# Evaluate the source in the context of globals and locals, source可以是'表示python表达式的字符串'或者 a code object as returned by compile(), the globals must be a dictionary and locals can be any mapping. defalut to the current globlas and locals. if only global is given, locals default to it.
16、分清 == 与 is 的适用场景
is:object identity,is的作用是检查对象的标识符(ID)是否一致,也就是比较两个对象在内存中是否拥有同一块空间,并不适合判断内容是否相等。
= :equal,在哪边调用__eq__()方法,a == b相当于 a.eq(b)