• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

写代码时记录的小

武飞扬头像
datawhale-leafy
帮助1

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

如何输出结果 (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.”)
学新通

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggifab
系列文章
更多 icon
同类精品
更多 icon
继续加载