Python

2024-03-17
3 min read

Python 作为脚本语言,有丰富的开源库,方便处理各种任务。官方中文教程是很好的入门资料,进阶学可以参考这里,有网友翻译的中文版《Learn Python in Y minutes》可以用于回忆语法

Tips

  1. 使用国内源加速安装:pip3 install plotly -i https://pypi.mirrors.ustc.edu.cn/simple/

代码示例

Jupyter Notebook 测试地址:tmp_test.ipynb /

Numpy&Scipy

Scipy 基于 Numpy,提供了各种科学计算工具。示例代码:numpy_scipy.ipynb /

Sympy

Sympy 是由 Python 实现的 CAS,可以参考官方教程。示例代码:sympy.ipynb /

  1. 等式使用 Eq 对象表示,sympy.Eq(x + 1, 0),后续可以使用其他方法,例如:sympy.solve(Eq(x + 1, 0))
  2. 使用 simplify 方法判断表达式是否相等:sympy.simplify(expr1 - expr2),如果相等则结果为 0
  3. 不希望化简的分数使用 Rational 对象表示,sympy.Rational(1,2) 表示符号 1/2,而非 0.5

Debug

  1. callgraph:https://github.com/daneads/pycallgraph2
  2. debug 装饰器 pysnooper / Print() / import logging / Assert /

pdb

参考:https://docs.python.org/3/library/pdb.html

python -m pdb pdg-test.py

b # show all breakpoints if b without args
b func_name
b filename:line_num
where / bt,注意栈的显示方向和 gdb 不同
until 13

clear n1 n2 # clear breakpoints n1 n2
pp obj # pretty print

pdbpp 可以为 pdb 添加额外的功能,例如更智能化的自动补全,细节可以参考官网:https://github.com/pdbpp/pdbpp

pip install pdbpp
# conda install -c conda-forge pdbpp

# conda config --set proxy_servers.http 127.0.0.1:7890
# conda config --set proxy_servers.https 127.0.0.1:7890

ipdb

ipdb 和 pdb 的比较,类似于 python 和 ipython 的比较,进入 ipdb 后,可以直接执行 python 代码(pdb 用 ! 作为前缀,也可以执行 python 命令),例如可以用 jsonpickle 打印变量,示例如下。ipdb 另一个优势是可以自动补全

import jsonpickle
jsonpickle.set_encoder_options('json', sort_keys=True, indent=4)

print(jsonpickle.encode(cir,unpicklable=False))
print(jsonpickle.encode(cir))

from pprint import pprint
pprint(cir)

.pdbrc

参考:https://kylekizirian.github.io/ned-batchelders-updated-pdbrc.html

命令示例:https://www.cnblogs.com/Zzbj/p/10592278.html / Python Debugger Cheatsheet

将下面内容写入到 python 文件目录下(.pdbrc),随后可以使用 pi、ps、pl、nl 和 sl 这几个自定义命令

# call this cmd arount a self defined breakpoint
alias init_pd !import jsonpickle;
from pprint import pprint;

jsonpickle.set_encoder_options('json', sort_keys=True, indent=4)

alias jsn print(jsonpickle.encode(%1,unpicklable=False))
alias pp pprint(%1)

# Print a dictionary, sorted. %1 is the dict, %2 is the prefix for the names.
alias p_ for k in sorted(%1.keys()): \
			print(f"%2{k.ljust(max(len(s) for s in %1.keys()))} = {%1[k]}")

# Print the member variables of a thing.
alias pi p_ %1.__dict__ %1.

# Print the member variables of self.
alias ps pi self

# Print the locals.
alias pl p_ locals() local:

# Next and list, and step and list.
alias nl n;;l
alias sl s;;l

Utils

format str

first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}" # python 3.6 后支持相关语法
full_name = "{} {}".format(first_name, last_name) # python 3.5 之前 使用的方法
message = f"Hello, {full_name.title()}!"

常用库

Pandas /