• 关于python代码的91个建议


    第一章:概括

      1。理解pythonic概念

      具有python特色的代码,一般python代码需要做到美胜丑,显胜隐,杂胜乱,平胜陡, 疏胜密。

      2。pythonic代码

      命名尽量按照大驼峰或小驼峰。

      避免使用容易引起混淆的名称。

      不要害怕过长的变量名。

       3。python与C语言的不同

      python省略了花括号,使用严格的代码缩进方式分隔代码块

      将‘’与“”的区别减小。

      简化三元操作符。

      取出switch--case采用if elif else代替。

      4。在代码中添加适当注释

      对于关键代码和逻辑,需要添加注释使得后来的开发者能快速读懂代码。

      处理不同的逻辑时,采用回车分隔

      5。通过适当添加空行使代码布局更加优雅合理

      (同上)

      6。编写函数的4个原则

      函数设计尽量短小。将同类功能封装到一个函数里。

      函数申明尽量合理,简单易于使用。

      实现版本向下兼容。

      一个函数只做一件事,保证函数语句粒度的一致性(同第一条)

      7。将常量集中到一个文件

      在对于一些具有关键意义的常量,可以集中到一个文件中,使用大写字母标记。

    第二章:编程惯用法。

      8。利用assert断言语句来发现问题

      提前判断结果并抛出其他结果的错误。不推荐直接使用,可以通过类封装。

      9。数值交换时不推荐使用中间变量

      诸如一下操作

    temp = a
    a = b
    b = temp
    =========
    a,b = b,a

      可以直接使用python特性语句处理

       10。充分利用lazy evaluation(惰性计算)

      当只有真正需要执行的时候,才计算表达式的值。如if判断条件时 当第一个or条件成立则不运行第二个or条件。and条件亦然。

       节省空间,使得无限循环的数据结构成为可能,在使用yieid时可以构建迭代器,当只有迭代器被调用时才会运行程序占用内存。

      11。理解枚举替代现实的缺陷

       在python中没有指定的枚举类型,但是可以借助类属性和函数来定义一个枚举类。

      12。不推荐使用type来进行类型检查

      python是一个弱类型语言,对于数据类型的要求并不是强制的,所以,而且有些类型可以进行隐式类型转换。

      建议只在出错的情况下通过抛出异常。

      可以使用isinstance来获取正确的python数据类型

      13。尽量转换为浮点类型后再做除法。

      python语言对于数字不是特别敏感,而且在设计之初,参考了c语言中的long类型作为python的整数类型,double作为浮点类型,

      而且计算的返回类型和操作数类型是相同的,由于c语言是事先申明类型,所以这一特性对于c来说没有太大的关系,而python会将返回结果直接转换成整数,导致结果有所偏差。

      14。警惕eval()的安全漏洞

      如同sql的注入攻击,eval在获取python语句运行时也是傻瓜型运行,即获取语句直接运行,如果使用者在语句中写入比较危险的python语句,

      则对系统的损害是很大的。

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

      对于这种既需要使用元素值,又需要使用索引值的需求,有很多种实现方法。

      方法一:在每次循环中对索引变量进行自增。

    l1 = ["a", "b", "c"]
    index = 0
    for i in li:
        print("index:", index, "element:", i)

      方法二:使用range()和len()方法结合

    li 1 = ["a", "b", "c"]
    for i in range(len(li1)):
        print(i, li[i])

      方法三:使用while循环,用len()获取循环次数

    li 1 = ["a", "b", "c"]
    index = 0
    while index< len(li):
        print(index, li[index])
        index +=1

      方法四:使用zip()

    li 1 = ["a", "b", "c"]
    for i, e in zip(rage(len(li1)), li1):
        print(i, e)

      方法五:使用emumerate() ,这种方法是最优方法。

    li 1 = ["a", "b", "c"]
    for i, e in enumerate(li1):
        print(i, e)

      16。分清== 与is的使用场景

      简单来说,is是比较对象的存储地址,==则是比较值。

      17。考虑兼容性,尽可能使用Unicode。

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

      python中所有py文件都是一个包,python语言不像强类型语言一样,有专门功能的模板,所以对于模块的定义需要开发者自行约束。

      在每个包文件中都有一个__init__,当他被第一次调用的是后,就会运行,充分利用init来实现包的初始化。

    第三章:基础语法

      19。有节制地使用from---import 语句

      一般情况下使用import  A的形式

      有节制地使用from---import 语句

      尽量不要使用from A import *的模式。因为这样会污染命名空间,并且无法清晰地表示导入了那些对象

      防止循环导包 的情况发生,即A模块导入了B模块,B模块又导入了A模块。当遇到此种问题是时,可以在调用该模块的函数里调用模块,防止循环调用

      20。优先使用absolute import来导入模块

      21。i+=1不等于 ++i

      i+=1代表i的自增,而++i仅仅表示i的正数的正数,也就是i本身。

      22。使用with自动关闭资源

      在py2的版本中我们会使用文件句柄的方式来打开一个文件,但是这种方式很容易忘记关闭连接句柄,造成文件写入错误。

      

  • 相关阅读:
    bash 学习笔记5
    zookeeper启动脚本修改
    java enmu 使用说明
    bash 学习笔记4
    zookeep集群搭建说明
    bash 学习笔记3
    集群配置问题
    hadoop hdfs 总结(1)
    bash 学习笔记6
    bash pitfall
  • 原文地址:https://www.cnblogs.com/LZXlzmmddtm/p/14658395.html
Copyright © 2020-2023  润新知