当前位置: 首页 > 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…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...