python 中的注释(annotations)

在读代码的时候,我们有时候会遇到别人的代码中定义函数时有以下的写法:
NB(注意): # 后面的部分表示输出结果。
第一种类型注释:函数定义中的注释

class Debug:
    def calculateSum(self, size: int) -> int:
        return sum(range(size))


if __name__ == "__main__":
    main = Debug()
    result = main.calculateSum(10)
    print(result)                   # 45

我们可以看到这里的参数size后面有一个冒号,并且紧跟着整型int标识符,在括号外还有一个->箭头
并且也跟着一个整型标识符int,这究竟是什么意思呢?其实这是一种特殊的注释方式,为了让我们在使用装饰器等其他函数的时候事半功倍。箭头后面的int标识符告诉使用者,这个函数的返回值应当是一个整型的,size后面的标识符告诉使用者这个函数的输入参数应该是整型的。并且对于->后面的标识符我们可以使用.__annotations__['return']的方法进行获取,代码如下:

def f(x) -> int:
    return int(x)


if __name__ == "__main__": 
    print(f.__annotations__['return'])  # <class 'int'>

我们可以看到f.__annotations__['return']输出的结果<class 'int'>,返回的正是我们的注释类型,此处的f为所定义函数的名称。
我们再看一个例子:

def calculateSum(x:'annotating x', y: 'annotating y', z: int) -> float: print(x + y + z)


if __name__ == "__main__": 
    calculateSum(5,6,7)                             # 18
    print(calculateSum.__annotations__['return'])   # <class 'float'>

我们可以看到此时我们给予函数中的三个参数对用的注释,x,y均为字符串类型的注释,z为整数类型的注释,最终当我们给予x,y,z均为整数类型的数据时,获取了最后的结果18,由此我们可以看到,对于annotation,实际上是不影响真实的计算结果的,只是一种提示性的作用,因此要避免乱用。
print(calculateSum.__annotations__['return'])的结果也得到了正确的返回值的注释类型。
实际上上述函数定义的代码也等同于,

def calculateSum(x:'annotating x', y: 'annotating y', z: int) -> float: 
	print(x + y + z)

这种写法可能更符合我们的通用写法。

第二种注释:行间注释
代码如下:

class Debug:
    def __init__(self):
        self.x1 = 5
        self.x2 = 10
        
        
    def calculateSum(self):
        # print out the sum of these two numbers
        print(self.x1 + self.x2)


if __name__ == "__main__":
    main = Debug()
    main.calculateSum()

如上述代码所示,#后面的部分就是我们在python中经常会用到的注释方法,也叫行间注释。如这里的print out the sum of these two numbers,这种注释不会通过外部命令被显示,只是用来告知或者提示阅读该代码的人下一行或者下一段代码所要实现的功能。

第三种注释:位于函数名称或者类名后面的注释
代码如下:

class Debug:
    """
    This is a class for debugging
    """
    def __init__(self):
    	"""
    	This funtion only has one property
		"""
        self.x = 5
        

main = Debug()

如上述代码所示,这种类型的注释通常使用三个双引号将注释内容括起来,如:"""注释内容""",这里的This is a class for debugging就是我们对这个类对象的注释,This funtion only has one property就是我们对这个初始化__init__(self)的注释。这种形式的注释是为了给用户在调用函数或者类的时候给与足够的信息提示。那如何查看这些注释呢,请看python注释查看方法。因此不是特殊情况不要乱用这种注释方式,一般的注释推荐使用行间注释的形式。

如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋的大熊猫

你的鼓励将是我写作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值