返回顶部
首页 > 资讯 > 后端开发 > Python >python编程规范系列--建议08~1
  • 197
分享到

python编程规范系列--建议08~1

建议系列python 2023-01-30 23:01:17 197人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

  本系列来自《编写高质量代码 改善python程序的91个建议》的读书笔记整理。    本章主要内容 建议8:利用assert语句来发现问题 建议9:数据交换值时不推荐使用中间交换变量 建议10:充分利用Lazy evaluatio

  本系列来自《编写高质量代码 改善python程序的91个建议》的读书笔记整理。

   本章主要内容

建议8:利用assert语句来发现问题
建议9:数据交换值时不推荐使用中间交换变量
建议10:充分利用Lazy evaluation的特性
建议11:理解枚举替代实现的缺陷
建议12:不推荐使用type来进行类型检查
建议13:尽量转换为浮点类型再做除法
建议14:警惕eval()的安全漏洞
建议15:使用enumerate()获取序列迭代的索引和值
建议16:分清==与is的适用场景
建议17:考虑兼容性,尽可能使用Unicod
建议18:构建合理的包层次来管理module

建议8:利用assert语句来发现问题

    1)__debug__的值默认为True,且只读,无法修改(py2.7)。
    2)断言是有代价的,对性能产生一定影响。禁用断言的方法是在运行脚本的时候加上-O标记(不优化字节码,而是忽略与断言相关的语句)。
    使用断言注意点:
    1)不要滥用,这是使用断言的最基本的原则;
    2)如果Python本身的异常能够处理就不要再使用断言;
    3)不要使用断言来检查用户的输入;
    4)在函数调用后,当需要确认返回值是否合理时可以使用断言;
    5)当条件时业务逻辑继续下去的先决条件时,可以使用断言。

建议9:数据交换值时不推荐使用中间交换变量

1 >>> from timeit import Timer
2 >>> Timer('temp=x;x=y;y=temp','x=2;y=3').timeit()
3 0.03472399711608887
4 >>> Timer('x,y=y,x','x=2;y=3').timeit()
5 0.031581878662109375

建议10:充分利用Lazy evaluation的特性

    Lazy evaluation常被译作“延时计算”或“惰性计算”,指的是仅仅在真正需要执行计算的时候才计算表达式的值。典型例子:生成器表达式。
    1)避免不必要的计算,带来性能上的提升;
    2)节省空间,使用无限循环的数据结构成为可能。

建议11:理解枚举替代实现的缺陷

    1)替代方法:使用类属性;借助函数;使用collections.namedtuple.
1 >>> from collections import namedtuple
2 >>> Seasons=namedtuple('Seasons','spring Summer Autumn Winter')._make(xrange(4))
3 >>> print Seasons
4 Seasons(Spring=0, Summer=1, Autumn=2, Winter=3)
5 >>> print Seasons.Autumn
6 2
    2)替代缺陷:允许枚举值重复;支持无意义的操作.
1 >>> Seasons._replace(Spring=2) # 不合理
2 Seasons(Spring=2, Summer=1, Autumn=2, Winter=3)
3 >>> Seasons.Summer+Seasons.Autumn == Seasons.Winter # 无意义
4 True
    3)py2.7的替代方案(py3.4后引入Enum类型):flufl.enum
 1 from flufl.enum import Enum
 2 
 3 
 4 class Seasons(Enum):
 5     Spring = "Spring"
 6     Summer = 2
 7     Autumn = 3
 8     Winter = 4
 9 
10 Seasons = Enum('Seasons', 'Spring Summer Autumn Winter')
11 print Seasons
12 print Seasons.Summer.value    

建议12:不推荐使用type来进行类型检查

    1)基于内建类型扩展的用户自定义类型,type函数并不能准确返回结果;
    2)在旧式类中,所有类的实例的type值都相等。
    3)可以用isinstance()函数检查。

建议13:尽量转换为浮点类型再做除法

        当涉及除法运算的时候尽量先将操作数转换成浮点类型再做运算。
        浮点数不精确性导致的无限循环:
1 >>> i=1
2 >>> while i!=1.5:
3 ... i=i+0.1
4 ... print i

建议14:警惕eval()的安全漏洞

 1 # -*-coding:UTF-8 -*-
 2 
 3 import sys
 4 from math import *
 5 
 6 
 7 def ExpCalcBot(string):
 8     try:
 9         print 'Your answer is', eval(string)
10     except NameError:
11         print "The expression you enter is not valid."
12 
13 
14 while True:
15     print 'Please enter a number or operation. Enter e to complete. '
16 
17     inputStr = raw_input()
18     if inputStr == 'e':
19         sys.exit()
20     elif repr(inputStr) != ' ':
21         ExpCalcBot(inputStr)

输入:__import__("os").system("dir")   显示当前目录下的所有文件.

        __import__("os").system("del */Q")   删除当前目录下的所有文件.
        因此,在实际应用过程中国呢如果使用对象不是信任源,应该尽量避免使用eval,在需要使用eval的地方可以用安全性更好的ast.literal_eval替代。

建议15:使用enumerate()获取序列迭代的索引和值

        注意,在获取迭代过程中字典的key和value,应该使用如下iteritems()方法。
1 >>> person={'name': 'Josn', 'age': 19, 'hobby': 'football'}
2 >>> for k,v in person.iteritems():
3 ... print k, ":", v

建议16:分清==与is的适用场景

 1 >>> a="Hi"
 2 >>> b="Hi"
 3 >>> a is b
 4 True
 5 >>> a==b
 6 True
 7 >>> a1 ="I am using long string for testing" # 注意区分
 8 >>> b1 ="I am using long string for testing"
 9 >>> a1 is b1
10 False
11 >>> a1==b1
12 True

    is:表示的是对象标识符,检查对象的标识符是否一致,也就是比较两个对象在内存中是否拥有同一块内存空间;
    ==:表示的是值相等,用来判断两个对象的值是否相等,可以被重载。
    字符串驻留(string interning)机制:对于较小的字符串,为了提高系统性能会保留其值的一个副本,当创建新的字符串时直接指向该副本即可。

建议17:考虑兼容性,尽可能使用Unicode

    python内建的字符串有两种类型:str和Unicode,共同祖先为basestring。
    windows本地默认编码是CP936。
    解码:str.decode([编码参数[,错误处理]])  
    编码:str.encode([编码参数[,错误处理]])
    错误处理参数有3种方式:
        (1)strict:默认值,抛出UnicodeError异常;
        (2)ignore:忽略不可转换的字符;
        (3)replace:将不可转换字符用?代替。
    有些软件在保存UTF-8编码时,会在文件最开始地方插入不可见的BOM,可以利用codecs解决。
1 import codecs
2 
3 
4 content = open('manage.py', 'r').read()
5 
6 if content[:3] == codecs.BOM_UTF8:
7     content = content[:3]
8 
9 print content.decode("utf-8")
    编码声明的三种方式:
1 # coding=<encoding name> #方式一
2 #!/usr/bin/env python
3 
4 # -*- coding:<encoding name> -*- #方式二
5 
6 #!/usr/bin/env python
7 # vim:set fileencoding=<encoding name> #方式三

建议18:构建合理的包层次来管理module

    包中__init__.py文件的作用:1)使包和普通目录区分;
              2)在该文件中声明模块级别的import语句从而使其变成包级别可见;
              3)通过该文件中定义__all__变量,控制需要导入的子包或者模块。
    使用包的好处:
    1)合理组织代码,便于维护和使用;
    2)能够有效地避免名称空间冲突。

--结束END--

本文标题: python编程规范系列--建议08~1

本文链接: https://lsjlt.com/news/180877.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python编程规范系列--建议08~1
      本系列来自《编写高质量代码 改善python程序的91个建议》的读书笔记整理。    本章主要内容 建议8:利用assert语句来发现问题 建议9:数据交换值时不推荐使用中间交换变量 建议10:充分利用Lazy evaluatio...
    99+
    2023-01-30
    建议 系列 python
  • python编程规范系列--建议01~0
      本系列来自《编写高质量代码 改善python程序的91个建议》的读书笔记整理。 本书主要内容     1)容易被忽视的重要概念和常识,如代码的布局和编写函数的原则等;     2)编写python程序管用的方法,如利用assert语句...
    99+
    2023-01-30
    建议 系列 python
  • 【BBF系列协议】诊断协议规范(TR-143)
    目录 TR-143 启用网络吞吐量性能测试和统计监控 执行摘要 1.目的和范围 目的 范围 2 主动监测 ...
    99+
    2023-10-01
    网络协议 网络
  • python编程规范
    每个import 语句只导入一个模块,尽量避免一次导入多个模块。 不要在行尾添加分号“;”,也不要用分号将两条命令放在同一行。 建议每行不超过80个字符,如果超过,建议使用小括号将多行内容隐式地连接起来,而不推荐使用反斜杠进行连接 使...
    99+
    2023-01-30
    python
  • CSS编写规范的建议有哪些
    CSS编写规范的建议有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。避免过度约束作为一般规则,不添加不必要的约束。CSS Code复制...
    99+
    2024-04-02
  • C#开发建议:文档编写与注释规范
    在C#开发中,良好的文档编写和注释规范不仅是一种良好的编码习惯,更是提高团队协作效率和代码可维护性的重要因素。本文将介绍一些C#开发的文档编写与注释的规范建议,旨在帮助开发者提高代码质量和可读性。一、文档编写规范注重整体结构:编写文档时,应...
    99+
    2023-11-22
  • python编程规范有哪些
    本篇文章为大家展示了python编程规范有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。每个缩进层级使用4个空格。每行最多79个字符。顶层的函数或类的定义之间空两行。采用ASCII或UTF-8编...
    99+
    2023-06-04
  • 实践中的Go语言注释编码规范建议
    实践中的Go语言注释编码规范建议 在编写Go语言程序时,良好的注释编码规范是非常重要的。适当的注释可以帮助其他开发者更快速地理解代码逻辑,提高代码的可读性和可维护性。本文将介绍一些在实...
    99+
    2024-04-02
  • Linux系统编程规范有哪些
    这篇文章给大家介绍Linux系统编程规范有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.1 系统调用概述系统调用是操作系统内核提供给应用程序的基础接口,需要运行在操作系统的核心模式下,以确保有权限执行某些 CP...
    99+
    2023-06-16
  • Python中规范定义命名空间的一些建议
    API的设计是一个艺术活。往往需要其简单、易懂、整洁、不累赘。 很多时候,我们在底层封装一个方法给高层用,而其它的方法只是为了辅助这个方法的。 也就是说我们只需要暴露这个方法就行,不用关心这个方法是怎么实现...
    99+
    2022-06-04
    定义 建议 空间
  • Python编程建议有哪些
    本篇内容主要讲解“Python编程建议有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python编程建议有哪些”吧! 项目文件事先做好归档每次开始一个新工作的时候,以前的我总是贪图方便,C...
    99+
    2023-06-02
  • CSS代码需要注意的编写规范及优化建议有哪些
    CSS代码需要注意的编写规范及优化建议有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。结构、样式、行为分离尽量确保文档和模板只包含 H...
    99+
    2024-04-02
  • 编写python程序的90条建议
    目录1. 首先2. 编程惯用法3. 基础用法4. 库的使用5. 设计模式6. 内部机制7. 使用工具辅助项目开发8. 性能剖析与优化1. 首先 建议1、理解 Pythonic 概念...
    99+
    2024-04-02
  • Python编程有哪些有用的建议
    这篇文章主要讲解了“Python编程有哪些有用的建议”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python编程有哪些有用的建议”吧! 项目文件事先做好归档每次开始一个新工作的时候,以前的...
    99+
    2023-06-02
  • python入门课程第三讲之编码规范知多少
    目录前言注释缩进规则编码规范标识符命令规范标识符遵循的规则关键字总结这是Pyhon系列文章的第三篇,本文主要介绍Python程序的编码规范。 干货满满,建议收藏,需要用到时常看看。 ...
    99+
    2024-04-02
  • 十条建议帮你提高Python编程效率
    程序员的时间很宝贵,Python这门语言虽然足够简单、优雅,但并不是说你使用Python编程,效率就一定会高。要想节省时间、提高效率,还是需要注意很多地方的。 今天就与大家分享资深Python程序员总结的1...
    99+
    2022-06-04
    帮你 十条 效率
  • Python图形编程探索系列-07-程序
    初步设计程序登录界面,详细分析设计步骤。 基本框架设计 import tkinter as tk import tkinter.messagebox root = tk.Tk() # 创建应用程序窗口 root.ti...
    99+
    2023-01-30
    图形 程序 系列
  • Python图形编程探索系列-02-框架
    跳转到我的博客 在主窗口root中放置三个容器用于容纳组件,容器采用框架设计。 import tkinter as tk root = tk.Tk() root.geometry('800x600+200+200') ro...
    99+
    2023-01-30
    框架 图形 系列
  • Python图形编程探索系列-01-初级
    设计一个主窗口,在其中添加三个标签和三个按钮,当点击按钮时,对标签的内容和色彩进行修改。 import tkinter as tk root = tk.Tk() def f1(): label1.config(text='...
    99+
    2023-01-30
    图形 系列 Python
  • Python图形编程探索系列-05-用控
    跳转到自己的博客 变量 符号 意义 默认值 1 var = tk.BooleanVar() 布尔型 0 2 var = tk.StringVar() 字符串控制变量 空字符串 3 var = tk.IntVar(...
    99+
    2023-01-30
    图形 系列 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作