Python
Python 作为脚本语言,有丰富的开源库,方便处理各种任务。官方中文教程是很好的入门资料,进阶学可以参考这里,有网友翻译的中文版。《Learn Python in Y minutes》可以用于回忆语法
Tips
- 使用国内源加速安装:
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 /
- 等式使用 Eq 对象表示,
sympy.Eq(x + 1, 0)
,后续可以使用其他方法,例如:sympy.solve(Eq(x + 1, 0))
- 使用 simplify 方法判断表达式是否相等:
sympy.simplify(expr1 - expr2)
,如果相等则结果为 0 - 不希望化简的分数使用 Rational 对象表示,
sympy.Rational(1,2)
表示符号 1/2,而非 0.5
Debug
- callgraph:https://github.com/daneads/pycallgraph2
- 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 /