写代码时记录的小技巧
本文是记录自己写代码时候遇到的一些感觉比较有用/有意思的技巧,怕自己忘了记录一下。如果有想要分享的思路/纠正改进的地方欢迎交流。
如何输出结果 (Verbose Trick)
有关类的输出
1. 如果想在**模型的 forward 中输出相关变量**,但又不希望反复输出影响观看效果,可以在类的私有变量中设定 self.verbose = True,并在首次输出后修改 Self.verbose = False 即可。2. 如果想**输出类的信息**,可以通过实现类的\_\_str__ 方法或 \_\_repr__方法,其中1. \_\_repr__ 所返回的字符串应该准确、无歧义,并且尽可能表达出如何 用代码创建出这个被打印的对象。2. 而\_\_str__ 在 str() 函数被使用,或是在用 print 函数打印一个对象的时候才被调用的,并且它返回的字符串对终端用户更友好。**\_\_str__ 方法未实现时,会转而调用\_\_repr__方法,因此如果只想实现一个时,可以实现\_\_repr__方法。**
当我们想让模型输出多个东西时,很容易存在记混顺序或是别的什么情况,这时我们可以使用Collection中的具名元组namedtuple来存储记录的属性.
DiscOutSplit = collections.namedtuple("DiscOutSplit",["d_real", "d_fake","d_real_bit", "d_fake_bit"])EntropyInfo = collections.namedtuple("EntropyInfo","noisy_out quantized_out nbpp qbpp",)
代码中展示了两种定义方法,通过列表或空格分隔的str
格式化输出
Python 3.6 支持了简明的 f 字符串输出,可以支持多行表达式,表达式运算,哈希取值等多种运算。
- 直接使用
print("The {add_a} + {add_b} = {add_out}")
- 表达式运算
bags = 3 apples_in_bag = 12 print(f'The result of add is {add_a + add_b}')
- 哈希取值
user = {'name': 'leafy', 'occupation': 'student'}print(f"{user['name']} is a {user['occupation']}")
- 多行表达式
name = 'leafy' occupation = 'student' msg = (f'Name: {name}\n'f'Occupation: {occupation}' )print(msg)
- 函数调用
print("The {add_a} + {add_b} = {add(add_a, add_b)}")
- 实例对象调用(对象所在类必须定义了表达方法 __repr__ 或 __str__)
class User:def __init__(self, name, occupation):self.name = nameself.occupation = occupationdef __repr__(self):return f"{self.name} is a {self.occupation}"u = User('leafy', 'student')print(f'{u}')
- 格式化字符串
for x in range(0, 20, 2):print(f'{x:02} {x*x:3} {x*x*x:4}')
# hexadecimal print(f"{a:x}")# octal print(f"{a:o}")# scientific print(f"{a:e}")
- 右对齐
s1 = 'Fnatic' s2 = 'TPA' s3 = 'SKT T1' s4 = 'SSW'print(f'{s1:>6}') print(f'{s2:>6}') print(f'{s3:>6}') print(f'{s4:>6}')
Fun Fact
切片拆包
例子来自 Fluent Python (“Fluent Python by Luciano Ramalho (O’Reilly). Copyright 2015 Luciano Ramalho, 978-1-491- 94600-8.”)
目前就想到这么多,想到了会继续补充
写代码时记录的小技巧相关推荐
- 写一下在写代码时遇到的小问题及解决方法(51单片机-89c51芯片)
1.keil5没有51系列单片机的cpu选项 解决方法:从KEIL官网上下载一个C51的支持包并安装到keil5根目录即可 2.***WARNINGL16:UNCALLEDSEGMENT,IGNORE ...
- 写出漂亮代码的45个小技巧
不知道大家有没有经历过维护一个已经离职的人的代码的痛苦,一个方法写老长,还有很多的if else ,根本无法阅读,更不知道代码背后的含义,最重要的是没有人可以问,此时只能心里默默地问候这个留坑的兄弟. ...
- 写带有代码博客的小技巧
又双叒叕大家都知道是什么意思吗?知道怎么读吗?它们其实是一个网络流行用语,通常读作"yòu,shuāng,ruò,zhuó".表示某事物变化更替相当频繁,也表示一件事反复出现. 还 ...
- JavaScript 工作原理(二)-如何在 V8 引擎中书写最优代码的 5 条小技巧(译)
From:https://segmentfault.com/a/1190000014770145 原文请查阅这里,略有删减. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScrip ...
- JavaScript 工作原理之二-如何在 V8 引擎中书写最优代码的 5 条小技巧(译)
原文请查阅这里,略有删减. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第二章. 本章将会深入谷歌 V8 引擎的内部结构.我们也会为如何书写更好的 Java ...
- 写代码时尽量少用复制粘贴(ctrl+c, ctrl+v)
我们在写代码时经常会参考其他人编写的代码或者是从网上搜索查看需要实现的功能用那些代码,这个时候,很多人会很自然的("ctrl+c", "ctrl+v"),简单轻 ...
- LaTeX 写学术论文的一些小技巧
此文用于分享一些用 LaTeX 写学术论文的一些小技巧,并会不断更新中 ... 笔者安装的是 CTeX 和 TeXStudio 软件,这两个软件配合很好使用.尤其是 TeXStudio 使用起来很方便 ...
- 在公司写代码时,我总想回家带娃。
桔妹导读:离天空最近的地方,是父亲的肩膀.在这个特别的日子里,小编也搜集了一些滴滴年轻的工程师奶爸们的分享,听他们聊一聊当爸的初体验.也借此机会祝福所有做了父亲的工程师们,节日快乐! 内心充满激动和紧 ...
- 做算法题时的一些小技巧
做算法题时的一些小技巧 技巧一: 在用C++做算法题时,我们会觉的cin,cout比scanf,printf使用起来更加的方便,不用指定输入输出格式. 但是cin,cout的运行时间比scanf,pr ...
最新文章
- Python学习 day01打卡
- 嵌入式和机械哪个好?机械转嵌入式好转吗?
- java 继承先后顺序_Java中的继承关系的加载顺序
- 【BIEE】报表导出数据只显示500行,如何解决?
- NYOJ 14 会场安排问题
- 解决idea application context not configured for this file的问题
- OpenGL tunnel隧道的实例
- 商业游戏美术成本已超1000万,研发门槛连续飙升,CP砸不起怎么办?
- linux QT 结束当前进程_软件特攻队|为什么 Qt 成为 c++ 界面编程的第一选择?
- 前端面试大全(问题+答案)2
- php 提取字段为key,从一个serialize过的array的字符串中取出中取对应KEY的value
- Linux内存管理:一个故事看懂CPU内存管理技术
- mysql-generator用法_【原创】MyBatis Generator使用小记
- 管状合金电阻和片状合金电阻的区别_SAE 6118、高电阻合金际锻材
- c语言的数组长度问题
- 在SQL Server中添加供应用程序使用的帐号
- html直链如何修改成js,javascript – 使用route params直接链接到URL会破坏AngularJS App...
- 基于STC89C52的小车制作上篇,用电机将小车驱动起来之对L298N逻辑输入N1~N4详解
- RabbitMQ的优势和劣势
- 固态硬盘误格式化恢复图文教程
热门文章
- 关于THINKPAD X1 Carbon(6th) 卡顿问题
- linux查看时钟同步命令,Linux下查看设置时间及同步时间的命令
- 跟我一起学习VIM - The Life Changing Editor [转载]
- office工具栏不见_如何在Office中的快速访问工具栏中添加宏
- golang 实现菜单树的生成
- Cordova热更新cordova-plugin-code-push
- 2018新的加壳工具-Virbox Protector Standalone
- 告诉你前端配色的秘密:怎么配都好看
- oracle checkpoint检查点
- 前端html标签总结,前端面试准备之html知点总结(一)