Python 学习关键点总结

ZhuYuanxiang 2019-02-27 00:00:00
Categories: Tags:

Python

Program

with

  1. 执行 contextor 以获取上下文管理器
  2. 加载上下文管理器的 exit ( ) 方法以备稍后调用
  3. 调用上下文管理器的 enter ( ) 方法
  4. 如果有 as var 从句,则将 enter ( ) 方法的返回值赋给 var
  5. 执行子代码块 with_body
  6. 调用上下文管理器的 exit ( ) 方法,如果 with_body 的退出是由异常引发的,那么该异常的 type、value 和 traceback 会作为参数传给 exit ( ) ,否则传三个 None
  7. 如果 with_body 的退出由异常引发,并且 exit ( ) 的返回值等于 False,那么这个异常将被重新引发一次;如果 exit ( ) 的返回值等于 True,那么这个异常就被无视掉,继续执行后面的代码

Style Guide

Variable

  1. 「单下划线」开始的成员变量:叫做保护变量,用于标明只有类、子类及其对象可以访问。实际上仍然可以访问。
  1. 「双下划线」开始的成员变量:叫做私有变量,用于标明只有类及其对象可以访问,子类也不可以访问。解释器会更改变量的名称,称之为「名称修饰」,以便在类被扩展的时候不容易产生冲突。
  1. 「单下划线」结尾的成员变量:标明这个是类内部的参数,不是需要用户设置的参数;也可能是因为变量名称被关键字占用,加「单下划线」避免冲突。
  2. 「单下划线」结尾的大写变量: 标明是不会发生改变的全局变量
  3. 「单下划线」用途临时或者无意义变量的名称

Function

  1. 「单下划线」开始的函数: 标明是一个私有函数, 只用于标明,
  2. 「双下划线」开始和结尾的函数: 标明是特殊函数,但是不会发生「名称修饰」。

Directories

图1:建议的目录格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Project/
|-- bin/ # 项目的可执行文件目录,也可以命名`script`
| |-- project
|
|-- docs/ # 项目文档目录
| |-- examples/ # 项目示例代码目录
| |-- conf.py
| |-- config.rst
| |-- generated
| |-- index.rst
| |-- installation.rst
| |-- preface.rst
| |-- quickstart.rst
|
|-- project/ # 项目的所有源代码都应该放在此目录,不要置于顶层目录
| |-- tests/ # 单元测试代码
| | |-- __init__.py
| | |-- test_main.py
| |
| |-- __init__.py
| |-- config.py # 项目配置参数
| |-- exception.py # 项目所有异常
| |-- main.py # 项目入口
| |-- preface.py # 项目运行前的前置环境
|
|-- setup.py # 安装、部署、打包的脚本
|-- requirements.txt # 项目依赖的Python包列表,使用`pip`进行安装
|-- HISTORY.md # 项目更新历史文件
|-- LICENSE # 版权文件
|-- README.md # 项目说明文件
|-- TODO.md # 待处理问题

References

Python 中下划线的 5 种含义

Python 软件目录结构规范

Labels

Create property

@property 可以将 python 定义的函数「当做」属性访问,从而提供更加友好访问方式,但是有时候 setter/deleter 也是需要的。

Error

UnicodeDecodeError

报错详情:进入 Python 交互式界面时,报错。

在这里插入图片描述

情况分析:可能在交互式界面操作中输入了全角字符,重新启动时就会引起错误。

解决方案:

  1. 找到 python_history 文件,存在于 C: \Users\Administrator\.python_history,删除里面的全角字符

  2. 打开文件 C: \Python\Python37\lib\site-packages\pyreadline\lineeditor\history.py,修改第 82 行,增加 utf-8 编码

    1
    2
    for line in open(filename, "r", encoding="utf-8"):
    ...

Memory Error

原因:内存不够时,系统会报的错误,特别是处理大型数据集时,会面临这个问题

解决:

Formatter

pep8

pep8 Args

max_line_length = 120
ignore = E501

pep8 Tools

Yapf

1
2
3
4
5
[yapf]
based_on_style = google
column_limit = 120 // max_line_length = 120
spaces_before_comment = 4
split_before_logical_operator = true

注: yapf 中文翻译

Refactoring

VSCode 可以支持的重构方法:

VSCode 支持重构的条件:

注: