写代码时记录的小技巧

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

如何输出结果 (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.”)
请添加图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值