(小甲鱼python)函数笔记合集七 函数(XI)总结 python函数的函数文档、类型注释、内省详解
一、基础复习
- 函数的基本用法 创建和调用函数 函数的形参与实参等等
- 函数的几种参数 位置参数、关键字参数、默认参数等
- 函数的收集参数*args **args 解包参数详解
- 函数中参数的作用域 局部作用域 全局作用域 global语句 嵌套函数 nonlocal语句等详解
- 函数的闭包(工厂函数)
- lambda()函数表达式、map()、filter()函数详解
- 生成器的定义、使用和产生生成器的两种方法详解
- 函数的递归、递归和迭代的区别详解
- 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语句等详解函数的闭包(工厂函…...

Leetcode是什么
力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT 技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(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具有多种图表类型的图表库,包括2D或3D线条、条形图、水平条、区域、点、饼图、箭头、气泡…...

[Java·算法·困难]LeetCode32. 最长有效括号
每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2分析思路3题解3👉️ 力扣原文 题目 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 输入:s "(()&q…...
pytorch如何搭建一个最简单的模型,
一、搭建模型的步骤 在 PyTorch 中,可以使用 torch.nn 模块来搭建深度学习模型。具体步骤如下: 定义一个继承自 torch.nn.Module 的类,这个类将作为我们自己定义的模型。 在类的构造函数 __init__() 中定义网络的各个层和参数。可以使用 to…...

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

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

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

buuctf-web-[SUCTF 2018]MultiSQL1
打开界面,全部点击一遍,只有注册和登录功能可以使用注册一个账号,注册admin提示用户存在,可能有二次注入,注册admin自动加了一个字符,无法二次注入,点击其他功能点换浏览器重新登录后࿰…...

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

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

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

如何查找你的IP地址?通过IP地址能直接定位到你家!
我们ip地址分为A、B、C、D、E共5类,每一类地址范围不同,从A到Eip地址范围依次递减,其中哦,D和E是保留地址,我们用不了。A、B、C3类地址很多都被美国这样的西方国家分走了,而留给我们的就剩有限的地址了&…...

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

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

流量监管与整形
流量监管与整形概览流量监管介绍流量监管令牌桶流量监管的具体实现单桶单速流量监管双桶单速流量监管双桶双速流量监管流量整形介绍GTS(Generic Traffic Shaping)LR(Line Rate)流量整形与流量监管的区别概览 流量整形是对报文的速…...
详解init 容器
什么是init容器 init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 你可以在 Pod 的规约中与用来描述应用容器的 containers 数组平行的位置指定 Init 容器 每个 Pod 中可以包含多个容器&…...
RequestResponseBodyMethodProcessor
既是一个参数解析器,也是一个返回结果处理器。 1.持有消息转换器的集合 protected final List<HttpMessageConverter<?>> messageConverters;2.作为参数解析器,例如对RequestBody标识的参数进行解析 判断是否支持当前类型的参数 Overrid…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...