python小技巧

  在python中,实际书写代码还有很多需要注意的东西,有时候会让代码的执行效率提高,下面就让我们来学习PEP 8风格以及Python编程惯例的一些知识吧。


一:PEP 8风格

  PEP是Python Enhancement Proposal的缩写,通常翻译为“Python增强提案”。其中的第8号增强提案(PEP 8)是针对Python语言编订的代码风格指南。


  在实际开发中,采用一致的风格书写出可读性强的代码是每个专业的程序员应该做到的事情,也是每个公司的编程规范中会提出的要求,这些在多人协作开发一个项目(团队开发)的时候显得尤为重要。

  官方链接:https://www.python.org/dev/peps/pep-0008/


  下面只介绍关键部分:

   1.空格的使用

  (1)使用空格来表示缩进而不要用制表符(Tab):这是由于。但是如果喜欢用Tab的话,就需要把使用的编辑器的Tab键设定为四个空格。

  (2)每行的字符数不要超过79个字符。

  (3)如果表达式因太长而占据了多行,除了首行之外的其余各行都应该在正常的缩进宽度上再加上4个空格。

  (4)函数和类的定义,代码前后都要用两个空行进行分隔。

  (5)在同一个类中,各个方法之间应该用一个空行进行分隔。

  (6)二元运算符的左右两侧应该保留一个空格,而且只要一个空格就好。

   2.标识符的命名

  PEP 8倡导用不同的命名风格来命名Python中不同的标识符,以便在阅读代码时能够通过标识符的名称来确定该标识符在Python中扮演了怎样的角色。

  (1)变量、函数和属性应该使用小写字母来拼写,如果有多个单词就使用下划线进行连接。

  (2)类中受保护的实例属性,应该以一个下划线开头。

  (3)类中私有的实例属性,应该以两个下划线开头。

  (4)类和异常的命名,应该每个单词首字母大写。

  (5)模块级别的常量,应该采用全大写字母,如果有多个单词就用下划线进行连接。

  (6)类的实例方法,应该把第一个参数命名为self以表示对象自身。

  (7)类的类方法,应该把第一个参数命名为cls以表示该类自身。

   3.表达式和语句

  (1)采用内联形式的否定词,而不要把否定词放在整个表达式的前面。例如if a is not b就比if not a is b更容易让人理解。

  (2)不要用检查长度的方式来判断字符串、列表等是否为None或者没有元素,应该用 if not x 这样的写法来检查它。

  (3)就算if分支、for循环、except异常捕获等中只有一行代码,也不要将代码和if、for、except等写在一起,分开写才会让代码更清晰。

  (4)import语句总是放在文件开头的地方。

  (5)引入模块的时候,from math import sqrt比import math更好。

  (6)如果有多个import语句,应该将其分为三部分,从上到下分别是Python标准模块、第三方模块和自定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。


二:Python编程惯例

  由于Python跟其他很多编程语言在语法和使用上还是有比较显著的差别,因此作为一个Python开发者如果不能掌握一些惯例,就无法写出"Pythonic"(python风格,pythonic code,就是说你写的代码要带有浓厚的python规范和python风格)的高效代码。


1.让代码既可以被导入又可以被执行。

if __name__ == '__main__':

2.用下面的方式判断逻辑“真”或“假”。

if x:
if not x:

# 实例
name = 'jackfrued'
fruits = ['apple', 'orange', 'grape']
owners = {'1001': 'a', '1002': 'b'}
# 好的代码
if name and fruits and owners:
    print('I love fruits!')
# 不好的代码
if name != '' and len(fruits) > 0 and owners != {}:
    print('I love fruits!')

3.善于使用in运算符。

if x in items: # 包含
for x in items: # 迭代

# 实例
name = 'Hao LUO'
# 好的代码
if 'L' in name:
    print('The name has an L in it.')
# 不好的代码
if name.find('L') != -1:
    print('This name has an L in it!')

4.不使用临时变量交换两个值。

a, b = b, a

5.用序列构建字符串。

chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd']
# 好的代码
name = ''.join(chars)
print(name)  # jackfrued
# 不好的代码
name = ''
for char in chars:
    name += char
print(name)  # jackfrued

6.EAFP优于LBYL。

d = {'x': '5'}
# 好的代码
try:
    value = int(d['x'])
    print(value)
except (KeyError, TypeError, ValueError):
    value = None
# 不好的代码
d = {'x': '5'}
if 'x' in d and isinstance(d['x'], str) \
		and d['x'].isdigit():
    value = int(d['x'])
    print(value)
else:
    value = None

7.使用enumerate进行迭代。

fruits = ['orange', 'grape', 'pitaya', 'blueberry']
# 好的代码
for index, fruit in enumerate(fruits):
	print(index, ':', fruit)
# 不好的代码
index = 0
for fruit in fruits:
    print(index, ':', fruit)
    index += 1

8.用生成式生成列表。

data = [7, 20, 3, 15, 11]
# 好的代码
result = [num * 3 for num in data if num > 10]
print(result)
# 不好的代码
result = []
for i in data:
    if i > 10:
        result.append(i * 3)
print(result) 

9.用zip组合键和值来创建字典。

keys = ['1001', '1002', '1003']
values = ['a', 'b', 'c']
# 好的代码
d = dict(zip(keys, values))
print(d)
# 不好的代码
d = {}
for i, key in enumerate(keys):
    d[key] = values[i]
print(d)
posted @ 2019-10-13 23:26  一只帅气的IT小昂  阅读(452)  评论(1编辑  收藏  举报