安装库
pycocotools
用conda安装:
conda install -c conda-forge pycocotools
thop
pip install --upgrade git+https://github.com/Lyken17/pytorch-OpCounter.git
注释规范
主要的参考来自于:Google 开源项目风格指南
但是实际上发现如果使用google风格,vscode的编辑器提示就很不好看,所以还是推荐numpy里翻出来的写法(我也不知道叫什么风格):
"""
绘制网表上的应力分布
Parameters
----------
fig: 一个Figure类
ax: fig附属的ax对象
由subplots一类的函数产生
distr: 一个一维张量,尺寸为(d),值范围是[0,1),升序排列
表征了段上的被关心的应力位置分布
mesh: 一个三维张量,尺寸为(l,s,2)
表征了(线数,段数,坐标)
sigma: 一个一维张量,尺寸为(l,s,d+1)
表征了所有被关心的应力数值
beta: 布尔值,可选
为True时启用测试功能,不保证稳定
Returns
-------
返回一个画在ax上的lineCollection
和一个Colorbar对象
"""
string::处理多行字符串与缩进问题
对于在代码块中的多行字符串,如果跟随缩进,那么打印出来的字符串也会带上额外多出来的数层缩进,这非常的难受,因此需要引入textwrap.dedent()
方法处理。在这种处理的情况下,记得将被处理的字符串同样标记为f-string,否则不能访问到其中的变量。关于f-string,更多的内容可以参考Python 3's f-Strings: An Improved String Formatting Syntax (Guide)
下面是例子:
# 产生vhdl状态机代码的脚本
import textwrap
for now in state:
# indented code here ...
out = f"""\
WHEN {now.name} =>
CASE pi_money IS
WHEN "00" =>
st <= {next0.name};
WHEN "01" =>
st <= {next1.name};
WHEN "10" =>
st <= {next2.name};
WHEN OTHERS =>
NULL;
END CASE;
"""
with open("./template.txt", "a") as f:
f.write(f"{textwrap.dedent(out)}")
# indented code here ...
reg::正则表达式
下面是python使用正则表达式一般的写法:
re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
Error: look-behind requires fixed-width pattern
(?<=[^n]\d+_)\d+
这个表达式会报上面的错误。
- 参考stackoverflow - Python Regex Engine - "look-behind requires fixed-width pattern" Error
- 参考51CTO博客 - Python正则表达式细节小记,内容很详细,回头还可以看一看,就是排版有点难看。
总而言之,在使用(?<=[pattern]*)
和(?<![pattern])
时,在[pattern]
里请不要使用 ? , * , + 这些导致宽度不确定的元字符。如果非要用,建议
import regex as re
关于match
需要注意的是match
一定会从头开始匹配。
print(re.findall(r"(?<=d_) d+","V0 n1 8000 174000 0 1.8"))
print(re.match(r"(?<=d_) d+","V0 n1 8000 174000 0 1.8"))
['8000', '174000']
None
Dict::可变对象
如果在多次迭代中,直接使用list.append(dict)
,最后你会得到一个所有元素都一样的list,这是因为append不是复制,他只是拿到了dict的指针放进去。如果要避免这种情况,需要使用copy模块:
import copy
alist.append( copy.deepcopy( num ) )