# !/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2019/6/18 22:33
from
__future__
import
unicode_literals
import
time
"""
建议8:利用assert来发现问题
"""
# assert语法
a
=
1
# 断言`a != 1`, 抛出异常`sss`
# assert a != 1, 'sss'
# 不要滥用断言
# 如果python本身的异常能够处理,就不要用断言
# 不要使用断言来检查用户输入
# 当对函数返回值的合理性进行检查时,可进行断言
# 当条件是业务逻辑继续进行的先决条件时,可进行断言
"""
建议9:数据交换的时候,不推荐使用中间变量
"""
c
=
1
b
=
2
print
(
'c:'
,
c
,
'b:'
,
b
)
c
,
b
=
b
,
c
print
(
'c:'
,
c
,
'b:'
,
b
)
"""
建议10、充分利用Lazy evaluation的特性
"""
# 1、避免不必要的计算,带来性能上的提升
# 在一个表达式中有or、and时,将or放到前面
# 2、节省空间,使得无限循环的数据结构成为可能
"""
建议11、理解枚举替代实现的缺陷
"""
# 枚举的实现方式有
# 1、使用类属性
class
Seasons
(
object
)
:
Spring
=
0
Summer
=
1
Autumn
=
3
Winter
=
4
# 简化上面的例子
class
Seasons
(
object
)
:
Spring
,
Summer
,
Autumn
,
Winter
=
range
(
4
)
print
(
Seasons
.
Spring
)
# 2、借助函数
def
enum
(
*
args
)
:
return
type
(
'Enum'
,
(
object
,
)
,
dict
(
zip
(
args
,
range
(
len
(
args
)
)
)
)
)
Seasons
=
enum
(
'Spring'
,
'Summer'
,
'Autumn'
,
'Winter'
)
print
(
Seasons
.
Spring
)
# 3、使用collections.namedtuple
import
collections
Seasons
=
collections
.
namedtuple
(
'Seasons'
,
'Spring Summer Autumn Winter'
)
.
_make
(
range
(
4
)
)
print
(
Seasons
.
Summer
)
"""
建议12、不推荐使用type来进行类型检查
"""
# 使用isinstance来判断类型
u
=
1
if
isinstance
(
u
,
int
)
:
print
(
'{u} type is int.'
.
format
(
u
=
u
)
)
"""
建议13、尽量转换为浮点类型后再在做除法
"""
# 编译器会进行强制类型转换
"""
建议14、警惕eval()的安全漏洞
"""
b
=
None
# 输出结果为`s`
print
(
eval
(
'"s" if b is None else "xxx"'
)
)
"""
建议15、使用enumerate获取迭代器的索引和值
"""
li
=
[
i
for
i
in
'abcde'
]
for
index
,
element
in
enumerate
(
li
)
:
print
(
'index:{index},element:{element}'
.
format
(
index
=
index
,
element
=
element
)
)
# 使用下面的语句会更好简单
[
print
(
'index:{index},element:{element}'
.
format
(
index
=
s
[
0
]
,
element
=
s
[
1
]
)
)
for
s
in
enumerate
(
li
)
]
"""
建议16、分清`==`与`is`的适用场景
"""
# 1、is是比较的内存地址
# 2、==是比较两个对象的值、内部调用了__eq__()
"""
建议17、考虑兼容性、尽可能使用unicode
"""
# 1、python的内建字符串有两种:str和unicode、它们的基类都是basestring
# 2、unicode字符串为不同语言设置了唯一的二进制表示形式
# 3、对于编码格式不一致的数据,先解码为unicode、后进行编码
file_name
=
open
(
'test.txt'
,
'r'
,
encoding
=
'utf-8'
)
print
(
file_name
.
read
(
)
.
encode
(
'utf-8'
)
.
decode
(
'utf-8'
)
)
file_name
.
close
(
)
# 编码参数 错误处理
# str.encode(encoding='utf-8', errors='strict')
# str.decode(encoding='utf-8', errors='strict')
# errors的值有:
# `strict`默认为严格的处理方式,编码错误时,会抛出异常
# `ignore`,忽略不可转换的字符
# `replace`,将不可转换的字符,用?的值代替
import
sys
# 获取Python中默认编码方式
print
(
sys
.
getdefaultencoding
(
)
)
# 编码申明
# !/usr/bin/python3
# -*- coding: utf-8 -*-
"""
建议18、构建合理的包层次来管理model
"""
# 1、直接导入包 import package
# 2、使用from package import model
# 3、使用__all__ = []来限定导入