WRY

Where Are You?
You are on the brave land,
To experience, to remember...

0%

编程语言--Python

Python语言特性(从django_demo中总结)

  • 多重继承,(深度优先,从左到右) MRO C3

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #                     MyBaseClass
    # / 5 \
    # / \
    # TimesClass PlusClass
    # 2 / \ 4
    # / \
    # TimesFiveClass PlusTwoClass
    # \ /
    # 1 \ / 3
    # \ /
    # Way
    • python的继承不同于java,返回值和形参都可以发生变动
  • 元类 meta class, 在解释类的时候,调用元类的__new__方法,可根据此特性实现注册的功能

    • Django中的ORM(Object Relational Mapping),根据这一特性,将类转换成数据库的表结构
  • 多态

  • 闭包,使用nonlocal关键字或者数组的形式,改变函数外面的值

    • 引用变量时,从

      • 当前函数的作用域
      • 任何外围作用域(包含当前函数的其他函数)
      • 包含当前代码的那个模块的作用域(也叫全局作用域)
      • 内置作用域(包含基础函数例如lenstr等函数的作用域

      的顺序去查找变量

    • 变量赋值时

      • 若当前函数作用域有这给变量,更改它的值
      • 若没有,在当前作用域下创建一个该变量(避免内部变量对外部变量的污染)
      • 可以使用nonlocal关键字,声明变量,以使得赋值操作赋值到了当前作用域之外,
      • 可以使用global关键字,声明变量,与nonlocal关系互补
      • 在代码长度较长的时候不建议使nonlocal和global关键字,可以使用辅助类来实现
  • 装饰器,functools.wraps会把与内部函数相关的重要元数据全部复制到外围函数

  • 重载操作符

  • multiprocessing,多进程并行计算,分布在多个计算核心上避免GIL锁的干扰

在vscode中配置Python

配置代码补全

Python 常用操作

时间

1
2
3
4
5
# 从字符串中读取时间成 struct_time 形式
date_time = time.strptime('2008-02-06 13:14:35', '%Y-%m-%d %H:%M:%S')
# struct_time 转成时间戳
time.mktime(date_time)
# date和time合并

文件

1

pdb调试

简书参考

性能分析

工具

cProfile参考文档

文档中详细介绍了如何在程序中插入cProfile、参数的含义以及结果的解读 使用如下命令,生成性能测试文件

1
python -m cProfile -o result.out -s cumulative myscript.py

可视化展示

安装可视化展示工具 graphviz

Mac 安装命令

1
brew install graphviz

下载python 文件(本站链接),使用下面的命令,将cProfile输出的结果转换成dot图

1
python  gprof2dot.py -f pstats result.out | dot -Tpng -o result.png

有用的实践链接

性能分析与提升