当前位置: 首页 > news >正文

写代码时记录的小技巧

本文是记录自己写代码时候遇到的一些感觉比较有用/有意思的技巧,怕自己忘了记录一下。如果有想要分享的思路/纠正改进的地方欢迎交流。

如何输出结果 (Verbose Trick)

有关类的输出

  1. 如果想在**模型的 forward 中输出相关变量**,但又不希望反复输出影响观看效果,可以在类的私有变量中设定 self.verbose = True,并在首次输出后修改 Self.verbose = False 即可。
  2. 如果想**输出类的信息**,可以通过实现类的\_\_str__ 方法或 \_\_repr__方法,其中
     1. \_\_repr__ 所返回的字符串应该准确、无歧义,并且尽可能表达出如何 用代码创建出这个被打印的对象。
     2. 而\_\_str__ 在 str() 函数被使用,或是在用 print 函数打印一个对象的时候才被调用的,并且它返回的字符串对终端用户更友好。

**\_\_str__ 方法未实现时,会转而调用\_\_repr__方法,因此如果只想实现一个时,可以实现\_\_repr__方法。**

请添加图片描述

  1. 当我们想让模型输出多个东西时,很容易存在记混顺序或是别的什么情况,这时我们可以使用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

格式化输出

  1. Python 3.6 支持了简明的 f 字符串输出,可以支持多行表达式,表达式运算,哈希取值等多种运算。

    1. 直接使用
    print("The {add_a} + {add_b} = {add_out}")
    
    1. 表达式运算
    bags = 3
    apples_in_bag = 12
    print(f'The result of add is {add_a + add_b}')
    
    1. 哈希取值
    user = {'name': 'leafy', 'occupation': 'student'}
    
    print(f"{user['name']} is a {user['occupation']}")
    
    1. 多行表达式
    name = 'leafy'
    occupation = 'student'
    msg = (
        f'Name: {name}\n'
        f'Occupation: {occupation}'
    )
    
    print(msg)
    
    1. 函数调用
     print("The {add_a} + {add_b} = {add(add_a, add_b)}")
    
    1. 实例对象调用(对象所在类必须定义了表达方法 __repr__ 或 __str__)
     class User:
         def __init__(self, name, occupation):
             self.name = name
             self.occupation = occupation
    
         def __repr__(self):
             return f"{self.name} is a {self.occupation}"
    
     u = User('leafy', 'student')
    
     print(f'{u}')
    
    1. 格式化字符串
    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}")
    
    1. 右对齐
    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.”)
请添加图片描述

目前就想到这么多,想到了会继续补充

相关文章:

  • Springboot 那年我双手插兜,手写一个excel导出
  • web自动化测试入门篇04——selenium+python基础方法封装
  • 21 【styled-components的使用】
  • Flink Checkpoint 问题排查实用指南
  • 0基础1天学会js-第二讲
  • 猿如意中的【PyCharm社区版】工具详情介绍
  • 【Docker】Docker安装Redis,并配置数据备份同步到宿主机
  • 图像的OTSU阈值化、双阈值化、半阈值化的原理及OpenCV代码实现
  • web前端期末大作业—— HTML+CSS豪华车 (9页)
  • 单片机扫盲
  • 面试八股-Java并发
  • 将多个Word表格中的指定值提取到Excel中,方便查看、统计、汇总。Word精灵
  • Java编码实现Activemq通讯
  • 小程序canvas 缩放/拖动/还原/封装和实例--开箱即用
  • 「面试题」20+Vue面试题整理
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【node学习】协程
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android组件 - 收藏集 - 掘金
  • Angular 2 DI - IoC DI - 1
  • Apache的基本使用
  • centos安装java运行环境jdk+tomcat
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • magento2项目上线注意事项
  • MySQL-事务管理(基础)
  • NSTimer学习笔记
  • Python利用正则抓取网页内容保存到本地
  • Quartz初级教程
  • React组件设计模式(一)
  • vue中实现单选
  • 测试如何在敏捷团队中工作?
  • 机器学习学习笔记一
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前端存储 - localStorage
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 学习Vue.js的五个小例子
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • $.proxy和$.extend
  • (2022 CVPR) Unbiased Teacher v2
  • (6)STL算法之转换
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (k8s中)docker netty OOM问题记录
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)Linux——Linux常用指令
  • (分布式缓存)Redis持久化
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core跨平台微服务学习资源
  • .Net 应用中使用dot trace进行性能诊断
  • .Net 知识杂记