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

(小甲鱼python)函数笔记合集七 函数(XI)总结 python函数的函数文档、类型注释、内省详解

一、基础复习

  1. 函数的基本用法 创建和调用函数 函数的形参与实参等等
  2. 函数的几种参数 位置参数、关键字参数、默认参数等
  3. 函数的收集参数*args **args 解包参数详解
  4. 函数中参数的作用域 局部作用域 全局作用域 global语句 嵌套函数 nonlocal语句等详解
  5. 函数的闭包(工厂函数)
  6. lambda()函数表达式、map()、filter()函数详解
  7. 生成器的定义、使用和产生生成器的两种方法详解
  8. 函数的递归、递归和迭代的区别详解
  9. python实现汉诺塔详解(主要通过函数的递归实现)

二、函数文档、类型注释、内省

1.函数文档

在python中,使用help()函数,可以快速查看一个函数的使用文档了

函数文档的作用: 相当于函数的说明书
例1:

>>> help(print)
Help on built-in function print in module builtins:print(...)print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)Prints the values to a stream, or to sys.stdout by default.Optional keyword arguments:file:  a file-like object (stream); defaults to the current sys.stdout.sep:   string inserted between values, default a space.end:   string appended after the last value, default a newline.flush: whether to forcibly flush the stream.

例2:函数文档

>>> def exchange(dollar,rate=6.32):"""功能:汇率转换,美元 ->人民币参数:- dollar 美元数量- rate 汇率,默认值是6.32(2022-03-08)返回值:- 人民币的数量"""return dollar * rate>>> exchange(20)
126.4

通过help()函数查看文档

>>> help(exchange)
Help on function exchange in module __main__:exchange(dollar, rate=6.32)功能:汇率转换,美元 ->人民币参数:- dollar 美元数量- rate 汇率,默认值是6.32(2022-03-08)返回值:- 人民币的数量>>> 

2.类型注释

例3:代码返回字符串

>>> def times(s:str,n:int) ->str:return s * n>>> times("FishC",5)  # 第一个字符串打印5遍。
'FishCFishCFishCFishCFishC'
>>> 
>>> times(5,5) # 这里传入整数也是可以的,  :str是给人看的,不是给机器看的。
25

代码注释:希望调用者传入到s参数中的类型是字符串类型,传入到n参数是整数类型,函数将返回一个字符串类型的返回值。

>>> def times(s:str="FishC",n:int=3) ->str:return s * n>>> times()
'FishCFishCFishC'
>>> 

例4:代码返回列表。

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

例5:代码返回字典(本人python版本为3.7.3,代码会报错,python3.9版本可以正常运行。)

>>> def times(s:dict[str,int],n:int=3) ->list:return list(s.keys()) * n>>> 
>>> times({'A':1,'B':2,'C':3})
['A','B','C','A','B','C','A','B','C']

3.内省

内省:指在程序运行的时候能够进行自我检测的一种机制,称之为内省或者自省。

例6:想知道函数的名字可以通过name来获取,前后是两个下横线’__’
代码注释:

  • name: 返回函数的名字
  • annotations:查看函数的类型注释
  • doc:查看文档
>>> times.__name__  #返回函数的名字
'times'
>>> 
>>> times.__annotations__  # 用annotations查看函数的类型注释,以字典的方式打印函数里面的三个类型注释
{'s': <class 'list'>, 'n': <class 'int'>, 'return': <class 'list'>}
>>> exchange.__doc__  # doc查看文档
'\n\t功能:汇率转换,美元 ->人民币\n\t参数:\n\t- dollar 美元数量\n\t- rate 汇率,默认值是6.32(2022-03-08)\n\t返回值:\n\t- 人民币的数量\n\t'
>>> 
>>> print(exchange.__doc__) # print会把转义字符给解析出来功能:汇率转换,美元 ->人民币参数:- dollar 美元数量- rate 汇率,默认值是6.32(2022-03-08)返回值:- 人民币的数量>>> 

课后题:
1.函数文档必须要放在函数体的开头吗?
答:是的。
解析:下面这样写是没有用的。

>>> def exchange(dollor, rage=6.32):
...     pass
...     """
...     功能:汇率转换,美元 -> 人民币
...     参数:
...     - dollar 美元数量
...     - rate 汇率,默认值 6.32(2022-03-08)
...     返回值:
...     - 人民币数量
...     ""
...     return dollar * rate
...
>>> help(exchange)
Help on function exchange in module __main__:exchange(dollor, rage=6.32)

2.函数文档通常是保存在哪里?
答:当然是保存在函数中啦~
解析:具体地说,是保存在函数中的 doc 中,所以我们才能够在程序运行的时候使用 doc 进行自省。

>>> exchange.__doc__
'\n\t功能:汇率转换,美元 -> 人民币\n\t参数:\n\t- dollar 美元数量\n\t- rate 汇率,默认值 6.32(2022-03-07)\n\t返回值:\n\t- 人民币数量\n\t'

3.请问下面代码会打印什么呢?

>>> def times(s:str, n:int) -> str:
...     return s * n
...
>>> times(5, "FishC")
# 请问这里会打印什么内容?

答:

>>> times(5, "FishC")
'FishCFishCFishCFishCFishC'

解析:类型注释仅是作为函数作者对程序员的提醒,并不会起到真正的限制作用。
4.请问下面代码会打印什么呢?

>>> def foo(a: 'x', b: 5 + 6, c: list) -> max(2, 9):
>>>     pass
...
>>> foo.__annotations__
# 请问这里会打印什么内容?

答:

>>> foo.__annotations__
{'a': 'x', 'b': 11, 'c': <class 'list'>, 'return': 9}

5.如果我们自己定义一个函数 times,期望用户传入的两个参数分别是 整数型列表 和 整数,那么请问相应的类型注释应该怎么写?
答:

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

6.如果我们自己定义一个函数 times,期望用户传入的两个参数分别是 字典(其中键为字符串,值为浮点数)和 整数,那么请问相应的类型注释应该怎么写?
答:

>>> def times(s:dict[str, float], n:int = 5) -> list[str]:
...     return list(s.keys()) * n
...

题目来自小甲鱼函数XI

相关文章:

(小甲鱼python)函数笔记合集七 函数(XI)总结 python函数的函数文档、类型注释、内省详解

一、基础复习 函数的基本用法 创建和调用函数 函数的形参与实参等等函数的几种参数 位置参数、关键字参数、默认参数等函数的收集参数*args **args 解包参数详解函数中参数的作用域 局部作用域 全局作用域 global语句 嵌套函数 nonlocal语句等详解函数的闭包&#xff08;工厂函…...

Leetcode是什么

力扣&#xff08;LeetCode&#xff09;是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷&#xff0c;力扣为全球程序员提供了专业的IT 技术职业化提升平台&#xff0c;有效帮助程序员实现快速进步和长期成长。 此外&#xff0c;力扣&#xff08;Leet…...

2023-03-07 MySQL—基于规则优化-子查询优化

简介 在使用MySQL编写查询语句时,有时候无法避免的会写出一些执行起来十分耗时、耗性能的语句,但是MySQL在执行这些语句的时候,还是会竭尽全力的做出一些优化,把这个很糟糕的语句转换成某种可以比较高效执行的形式,这个过程也可以被称作查询重写 条件化简 我们编写查询…...

Rocketmq技术详解

Rocketmq技术详解 运维部署 docker-compose.yml version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxisw…...

TeeChart VCL/FMX v2023 crack

TeeChart VCL/FMX v2023 crack TeeChart Pro VCL允许您为所有领域(包括商业、工程、金融、统计、科学、医疗、实时和网络)创建通用和专用图表和绘图应用程序。TeeChart Pro VCL具有多种图表类型的图表库&#xff0c;包括2D或3D线条、条形图、水平条、区域、点、饼图、箭头、气泡…...

[Java·算法·困难]LeetCode32. 最长有效括号

每天一题&#xff0c;防止痴呆题目示例分析思路1题解1分析思路2题解2分析思路3题解3&#x1f449;️ 力扣原文 题目 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 输入&#xff1a;s "(()&q…...

pytorch如何搭建一个最简单的模型,

一、搭建模型的步骤 在 PyTorch 中&#xff0c;可以使用 torch.nn 模块来搭建深度学习模型。具体步骤如下&#xff1a; 定义一个继承自 torch.nn.Module 的类&#xff0c;这个类将作为我们自己定义的模型。 在类的构造函数 __init__() 中定义网络的各个层和参数。可以使用 to…...

JS实现css的hover效果,兼容移动端

Hi I’m Shendi JS实现css的hover效果&#xff0c;兼容移动端 功能概述 CSS的hover即触碰时触发&#xff0c;在电脑端鼠标触碰&#xff0c;移动端手指触摸 有的时候光靠css实现不了一些效果&#xff0c;例如元素触发hover&#xff0c;其他元素触发动画效果&#xff0c;所以需要…...

企业微信的后台怎么进入和管理?

企业微信管理后台&#xff0c;只有企业的管理员才可以进企业微信后台&#xff0c;普通员工想要进入后台、可以联系管理员将你设置为后台管理员。 一、怎么进入企业微信后台 管理员进入企业微信后台有两种路径&#xff1b; 路径一&#xff1a; 企业管理员直接在浏览器搜索企…...

【2223sW2】LOG2

写在前面 好好学习&#xff0c;走出宿舍&#xff0c;走向毕设&#xff01; 一些心路历程记录&#xff0c;很少有代码出现 因为鬼知道哪条代码到时候变成毕设的一部分了咧&#xff0c;还是不要给自己的查重挖坑罢了 23.3.2 检验FFT 早上师兄帮忙看了一眼我画的丑图&#xff…...

buuctf-web-[SUCTF 2018]MultiSQL1

打开界面&#xff0c;全部点击一遍&#xff0c;只有注册和登录功能可以使用注册一个账号&#xff0c;注册admin提示用户存在&#xff0c;可能有二次注入&#xff0c;注册admin自动加了一个字符&#xff0c;无法二次注入&#xff0c;点击其他功能点换浏览器重新登录后&#xff0…...

GitLab创建仓库分配权限

文章目录创建仓库分配权限参考资料创建仓库 点击“New project”创建新项目 分配权限 点击左侧菜单栏“Members”成员&#xff0c;菜单 “Invite member”邀请成员&#xff0c;添加人员&#xff1b;“Invite group”邀请组织&#xff0c;添加一个组织所有成员下面输入框搜索…...

代码随想录-51-110.平衡二叉树

目录前言题目1.求高度和深度的区别节点的高度节点的深度2. 本题思路分析&#xff1a;3. 算法实现4. pop函数的算法复杂度5. 算法坑点前言 在本科毕设结束后&#xff0c;我开始刷卡哥的“代码随想录”&#xff0c;每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专…...

项目实战典型案例27——对生产环境以及生产数据的敬畏之心

对生产环境以及生产数据的敬畏之心一&#xff1a;背景介绍总结升华一&#xff1a;背景介绍 本篇博客是对项目开发中出现的对生产环境以及生产数据的敬畏之心行的总结并进行的改进。目的是将经历转变为自己的经验。通过博客的方式分享给大家&#xff0c;大家一起共同进步和提高…...

如何查找你的IP地址?通过IP地址能直接定位到你家!

我们ip地址分为A、B、C、D、E共5类&#xff0c;每一类地址范围不同&#xff0c;从A到Eip地址范围依次递减&#xff0c;其中哦&#xff0c;D和E是保留地址&#xff0c;我们用不了。A、B、C3类地址很多都被美国这样的西方国家分走了&#xff0c;而留给我们的就剩有限的地址了&…...

Containers--array类

Array 类 简介 Array 类是一个固定大小的数组&#xff0c;它的大小在编译时就已经确定了。Array 类的大小是固定的&#xff0c;因此它的大小不能改变。 数组是固定大小的序列容器:它们以严格的线性顺序保存特定数量的元素。 在内部&#xff0c;数组除了包含的元素之外不保留…...

LinqConnect兼容性并支持Visual Studio 2022版本

LinqConnect兼容性并支持Visual Studio 2022版本 现在支持Microsoft Visual Studio 2022版本17.5预览版。 添加了Microsoft.NET 7兼容性。 共享代码-共享相同的代码&#xff0c;以便在不同的平台上处理数据。LinqConnect是一种数据库连接解决方案&#xff0c;适用于不同的基于.…...

流量监管与整形

流量监管与整形概览流量监管介绍流量监管令牌桶流量监管的具体实现单桶单速流量监管双桶单速流量监管双桶双速流量监管流量整形介绍GTS&#xff08;Generic Traffic Shaping&#xff09;LR&#xff08;Line Rate&#xff09;流量整形与流量监管的区别概览 流量整形是对报文的速…...

详解init 容器

什么是init容器 init 容器是一种特殊容器&#xff0c;在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 你可以在 Pod 的规约中与用来描述应用容器的 containers 数组平行的位置指定 Init 容器 每个 Pod 中可以包含多个容器&…...

RequestResponseBodyMethodProcessor

既是一个参数解析器&#xff0c;也是一个返回结果处理器。 1.持有消息转换器的集合 protected final List<HttpMessageConverter<?>> messageConverters;2.作为参数解析器&#xff0c;例如对RequestBody标识的参数进行解析 判断是否支持当前类型的参数 Overrid…...

计算机毕设微信小程序入门实战:从零搭建到避坑指南

最近在帮学弟学妹看计算机毕设&#xff0c;发现很多同学第一次做微信小程序&#xff0c;很容易踩坑。要么是代码写得像“意大利面条”&#xff0c;逻辑混在一起&#xff1b;要么是功能做完了&#xff0c;结果卡在微信审核上&#xff0c;反复被拒。今天我就结合自己的经验&#…...

WVP-GB28181-Pro:构建统一视频监控平台的技术指南

WVP-GB28181-Pro&#xff1a;构建统一视频监控平台的技术指南 【免费下载链接】wvp-GB28181-pro 项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro 在安防监控领域&#xff0c;企业和机构常常面临多品牌设备协议不兼容、系统扩展困难、运维成本高昂等…...

C++ Move 构造函数底层执行机制

C Move构造函数底层执行机制探秘 在C11引入的移动语义中&#xff0c;Move构造函数通过高效转移资源所有权优化性能&#xff0c;成为现代C的核心特性之一。理解其底层机制不仅能提升代码效率&#xff0c;还能避免资源管理中的常见陷阱。本文将深入剖析Move构造函数的实现原理&a…...

Adafruit_GFX_1351:嵌入式TFT显示的轻量级图形适配层

1. Adafruit_GFX_1351 库概述&#xff1a;面向嵌入式显示驱动的轻量级图形抽象层Adafruit_GFX_1351 是一个专为 ST7789V/ST7735S 等兼容 135240 分辨率 IPS TFT 显示屏设计的图形驱动库&#xff0c;其核心定位并非独立显示驱动&#xff0c;而是作为 Adafruit GFX 图形库&#x…...

高效开启AI专著撰写!揭秘让写作速度飙升的实用工具

创新与AI写专著工具的背景 创新是学术专著的核心&#xff0c;也是写作过程中的一大挑战。一部优秀的专著不应仅仅是把之前的研究成果堆在一起&#xff0c;而是要能够提出贯穿全书的新颖观点、理论结构或研究手段。在海量的学术文献中&#xff0c;发现未被充分探讨的研究空白并…...

ARM64安全特性实战:UAO/PAN如何保护你的内核免受用户空间攻击

ARM64安全架构深度解析&#xff1a;UAO/PAN机制如何筑起内核防护墙 在嵌入式系统与内核开发领域&#xff0c;安全防护从来不是可选项而是必选项。当你的代码运行在数以亿计的智能设备中时&#xff0c;一个微小的内存访问漏洞就可能成为攻击者长驱直入的通道。ARM64架构通过UAO&…...

Thief-Book:在IDE中开辟第二空间的开发者时间管理工具

Thief-Book&#xff1a;在IDE中开辟第二空间的开发者时间管理工具 【免费下载链接】thief-book-idea IDEA插件版上班摸鱼看书神器 项目地址: https://gitcode.com/gh_mirrors/th/thief-book-idea 作为开发者&#xff0c;你是否也曾经历过这样的场景&#xff1a;代码正在…...

如何在ESXi 6.7上完美驱动Realtek RTL8125网卡:完整编译与部署指南

如何在ESXi 6.7上完美驱动Realtek RTL8125网卡&#xff1a;完整编译与部署指南 【免费下载链接】r8125-esxi Realtek RTL8125 driver for ESXi 6.7 项目地址: https://gitcode.com/gh_mirrors/r8/r8125-esxi 想要在VMware ESXi 6.7服务器上使用Realtek RTL8125网卡&…...

别再只盯着Mesh了!聊聊NoC拓扑选型:从Ring、Torus到Fat Tree,你的芯片设计该怎么选?

芯片设计中的NoC拓扑选型实战指南&#xff1a;从Ring到Fat Tree的深度权衡 当你在设计一款高性能芯片时&#xff0c;是否曾为选择合适的片上网络(NoC)拓扑而纠结&#xff1f;面对Ring、Mesh、Torus、Fat Tree等多种选项&#xff0c;每个决策都可能直接影响芯片的性能、功耗和面…...

PDF补丁丁实战指南:从文档难题到高效解决方案的全流程掌握

PDF补丁丁实战指南&#xff1a;从文档难题到高效解决方案的全流程掌握 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱&#xff0c;可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档&#xff0c;探查文档结构&#xff0c;提取图片、转成图片等等 项目地址: https:…...