《改善Python程序的91个建议》学习笔记 8—18

系统 236 0
            
              
                # !/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__ = []来限定导入
              
            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论