鱼C论坛

 找回密码
 立即注册
查看: 3010|回复: 8

[知识点备忘] 第051讲:函数(XI)- 函数文档、类型注释、内省

[复制链接]
发表于 2022-3-11 04:50:26 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-14 10:40:39 | 显示全部楼层
本节讲了几个有趣的概念——首先是函数文档,也就是函数的说明书,只需使用字符串(三引号多行字符串)即可创建,写在函数最顶部,函数主体之前,可使用help()函数进行查看;其次是类型注释,也就是函数作者为函数参数类型及返回值类型写的提示,是函数作者的一种期望,可以违反,这也是Python 3为满足用户需求催生出的新特性,还可以使用第三方模块Mypy让Python帮忙真正做一下类型检测;最后是内省,也叫自省,是程序运行时进行自我检测的机制,通过一些特殊的属性来实现,如__name__获取函数名,__annotations__获取类型注释,__doc__获取函数文档等。总之,这些都是与函数息息相关的“冷知识”,在现实开发中常会用到。期待后续有关类、对象以及魔法方法的介绍!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2022-5-5 11:14:46 | 显示全部楼层
函数文档:

  1. def exchange(dollar, rate=6.5):
  2.     """
  3.     功能:汇率转换,美元 -> 人民币
  4.     参数:
  5.     - dollar 美元数量
  6.     - rate 汇率,默认值是 6.5
  7.     返回值:
  8.     - 人民币的数量
  9.     """
  10.     return dollar * rate

  11. help(exchange)
  12. >>>
  13. Help on function exchange in module __main__:

  14. exchange(dollar, rate=6.5)
  15.     功能:汇率转换,美元 -> 人民币
  16.     参数:
  17.     - dollar 美元数量
  18.     - rate 汇率,默认值是 6.5
  19.     返回值:
  20.     - 人民币的数量

  21. exchange(20)
  22. >>>
  23. 130.0
复制代码


内省也叫自省,是程序运行时进行自我检测的机制,通过一些特殊的属性来实现。
如果想获取我们之前定义的exchange函数文档:

  1. print(exchange.__doc__)

  2.     功能:汇率转换,美元 -> 人民币
  3.     参数:
  4.     - dollar 美元数量
  5.     - rate 汇率,默认值是 6.5
  6.     返回值:
  7.     - 人民币的数量
复制代码


类型注释是给人看的,程序默认是不会检测的。

  1. def times(s:list[int], n:int = 3) -> list:
  2.     return s * n

  3. times([1, 2, 3])
  4. >>>
  5. [1, 2, 3, 1, 2, 3, 1, 2, 3]

  6. # :后面的为类型注释
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-16 21:03:08 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-11 15:36:28 | 显示全部楼层
卡打
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-18 17:58:47 | 显示全部楼层
>>> def times(s:list[int],n:int=2) -> list:
        return s*n

Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    def times(s:list[int],n:int=2) -> list:
TypeError: 'type' object is not subscriptable
>>> def times(s:dict[str,int],n:int=2)->list:
        return list(s.keys())*n

Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    def times(s:dict[str,int],n:int=2)->list:
TypeError: 'type' object is not subscriptable “类型对象不可下标”!!!

是因为版本太低吗?我现在用的是3.7.3

求解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-10 11:16:28 | 显示全部楼层
Learning...3.10版一切正常.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-15 23:02:04 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-4 19:13:34 | 显示全部楼层
打卡,本节理论和概念比较强,还可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 22:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表