Python中的符号

解释经常在python源码中看到的@,->和:等符号。python在函数名或类名首字母用_来表示私有接口(仅供内部使用)。

标注

关联到某个变量、类属性、函数形参或返回值的标签,被约定作为类型提示来使用。
局部变量的标注在运行时不可访问,但全局变量、类属性和函数的标注会分别存放模块、类和函数的 __annotations __特殊属性中。

类型提示

标注为变量、类属性、函数的形参或返回值指定预期的类型。

类型提示属于可选项,Python 不要求提供,但其可对静态类型分析工具起作用,并可协助 IDE 实现代码补全与重构。

全局变量、类属性和函数的类型提示可以使用 typing.get_type_hints() 来访问,但局部变量则不可以。

typing.get_type_hints()

返回一个字典,字典内含有函数、方法、模块或类对象的类型提示。

一般情况下,与 obj.__annotations __相同。此外,可通过在 globals 与 locals 命名空间里进行评估,以此来处理编码为字符串字面量的前向引用。如有需要,在默认值设置为 None时,可为函数或方法注解添加 Optional[t]。对于类 C,则返回一个由所有__annotations__与 C.__mro__逆序合并而成的字典。

函数标注

即针对函数形参或返回值的标注。
函数标注通常用于类型提示:

形参标注:在形参名称后面加 : expression 即可。
函数返回标注:在形参列表后加 -> expression即可。

例如以下函数预期接受两个 int 参数并预期返回一个 int 值:

def sum_two_numbers(a: int, b: int) -> int:return a + b

变量标注

对变量或类属性的标注。

在标注变量或类属性时,还可选择为其赋值:

class C:field: 'annotation'

变量标注通常被用作类型提示:
例如以下变量预期接受 int 类型的值:

count: int = 0

装饰器

返回值为另一个函数的函数,通常使用@wrapper语法形式进行函数变换。
装饰器的常见例子包括 classmethod() 和 staticmethod()

装饰器语法只是一种语法糖,以下两个函数定义在语义上完全等价:

def f(...):...
f = staticmethod(f)@staticmethod
def f(...):...

@staticmethod

将方法转换为静态方法。
静态方法不会接收隐式的第一个参数。要声明一个静态方法,请使用此语法:

class C:@staticmethoddef f(arg1, arg2, ...): ...

静态方法的调用可以在类上进行 (例如 C.f()) 也可以在实例上进行 (例如 C().f())。
像所有装饰器一样,也可以像常规函数一样调用 staticmethod ,并对其结果执行某些操作。比如某些情况下需要从类主体引用函数并且您希望避免自动转换为实例方法。对于这些情况,请使用此语法:

class C:builtin_open = staticmethod(open)

@classmethod

把一个方法封装成类方法。
一个类方法把类自己作为第一个实参,就像一个实例方法把实例自己作为第一个实参。请用以下习惯来声明类方法:

class C:@classmethoddef f(cls, arg1, arg2, ...): ...

类方法的调用可以在类上进行 (例如 C.f()) 也可以在实例上进行 (例如 C().f())。 其所属类以外的类实例会被忽略。 如果类方法在其所属类的派生类上调用,则该派生类对象会被作为隐含的第一个参数被传入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java高可用grpc_GRPC java 分布式调用链跟踪实践

Opentracing基本模型image.png如图,在跟踪链中有以下几个比较重要的数据结构和概念:span:标识一次分布式调用,其自身包含了id,parentId(指向上级Span的id), traceIds,服务名称等重要属性&#x…

jrebel gradle_JRebel适用于Gradle Spring Boot应用程序

jrebel gradle关于如何将JRebel添加到使用Gradle作为构建工具的Spring Boot应用程序中,有一些文档 。 它是基本的,但是效果很好。 您所要做的就是在build.gradle中添加几行: if (project.hasProperty(rebelAgent)) {bootRun.jvmArgs rebel…

vim 的寄存器/剪贴板

文章目录 一、查看寄存器查看所有的寄存器查看指定的寄存器二、各种寄存器介绍无名寄存器(默认寄存器)命名寄存器复制专用寄存器逐级临时缓存寄存器。行内删除寄存器黑洞寄存器表达式寄存器文件名寄存器搜索模式寄存器命令行寄存器插入寄存器轮换缓冲区寄存器系统剪贴板选择和…

Python中的lambda表达式

lambda表达式被用于创建匿名函数。匿名函数就是没有名字的函数。 返回类型是函数类型。 作用:一行就可以表示一个函数,使代码简洁。很适合只使用一次的函数。 语法 lambda 参数:表达式等价于 def 函数名(参数):return 表达式举例 无参函数…

华为的型号命名规则_华为Mate 40 Pro+ 外观曝光 正面双挖孔 背部奥利奥

近日关于华为Mate 40 Pro的消息,又有了新进展。有媒体曝光出了一组Mate 40 Pro 的外观渲染图。华为Mate 40系列将会有三种型号,分别是华为Mate 40,Mate 40 Pro 和Mate 40 Pro ,这与之前发布的华为 P40 系列是相同的型号命名规则。…

drools 执行函数_Drools可执行模型还活着

drools 执行函数总览 可执行模型的目的是提供规则集的纯基于Java的表示,以及方便的Java DSL以编程方式创建这种模型。 该模型是低级的,旨在为用户提供所需的所有信息,例如用于索引评估的lambda。 这样可以使其保持快速运行,并避免…

vim 底行命令模式的正则表达式(匹配模式)

文章目录一、vim 替换表达式的语法格式二、vim 关于 range 的表达式三、vim 关于 flags 的元字符四、vim 关于数量的元字符五、环视和固化分组六、vim 替换表达式的示例(一)结合 copy 命令使用(二)结合 move 命令使用(…

navicat模型显示注释_RetinaNet模型构建面罩检测器

字幕组双语原文:如何使用RetinaNet模型构建面罩检测器英语原文:How to build a Face Mask Detector using RetinaNet Model!翻译:雷锋字幕组(李珺毅)介绍目标检测是计算机视觉中一个非常重要的领域,对于自动…

python中parse.add_argument()简单用法

argparse模块简单使用流程以及与命令行的交互1.导入模块2.创建解析器3.添加参数4.解析参数5使用参数完整代码与命令行的交互argparse 模块是 Python 内置的一个用于命令项选项与参数解析的模块。下面以例子来简单记下模块使用流程。1.导入模块 import argparse2.创建解析器 该…

java最好学习的方法_学习Java的最佳方法

java最好学习的方法Java是有些人可能说很难学习的语言之一,而其他人则认为它与其他语言具有相同的学习曲线。 两种观察都是正确的。 但是,由于Java具有平台无关性,因此在语言方面具有相当大的优势。 Java是一种低级语言,它以一种…

什么是整数

整数(integer)是正整数、零、负整数的集合。 整数的全体构成整数集,整数集是一个数环。在整数系中,零和正整数统称为自然数。-1、-2、-3、…、-n、…(n为非零自然数)为负整数。则正整数、零与负整数构成整数…

镜像电流源特点_模电中的电流源电路

在模电中,电流源电路也称恒流源电路,经常作为放大电路中的偏置电路(即为放大电路提供合适的静态工作点的电路)、有源负载以及电压-电流转换电路等。在一些名牌大学的期末考试或研究生入学考试中,也经常出一道和恒流源相关的题。不同学校的教材…

java改变变量编码方式_Java 10将如何改变您的编码方式

java改变变量编码方式突出显示Java 10中新的Java局部变量类型推断功能 早在2016年,Java社区就掀起了新的JDK增强提案(JEP): JEP 286 。 现在,两年后,局部变量类型推断可以说是Java 10中最值得注意的功能。…

vim 批量注释技巧

文章目录一、块选择模式批量注释取消注释二、替换命令批量注释取消注释一、块选择模式 批量注释 Ctrl v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按 …

深度学习Pytorch--梯度与反向传播笔记

Pytorch梯度与反向传播相关概念导数偏导数方向导数梯度梯度下降法自动求梯度概念Tensor反向传播求梯度相关概念 先来理解一下从导数到梯度的相关概念。 导数 一元函数中导数就是该函数所代表的曲线在这一点上的切线斜率。 多元函数的导数可以称为全导数,可以得到…

工业机器人打磨抛光编程员工资_一种工业机器人打磨抛光工作平台的制作方法...

本实用新型涉及工业机器人领域,具体是一种工业机器人打磨抛光工作平台。背景技术:随着手机的使用量逐年增加,人们对手机外观的要求越来越高,手机壳的打磨和抛光工艺变得越来越严格。由于在拉伸和其他冲压工序中,容易使…

jdk10 换成jdk8_JDK 10的摘要Javadoc标签

jdk10 换成jdk8JDK 10通过发行JDK-8173425 引入了Javadoc标签{summary} (“ Javadoc需要一个新标签来指定摘要。”)。 这个新标签允许开发人员显式指定Javadoc注释的哪一部分出现在“摘要”中,而不是依靠Javadoc的默认处理来寻找一段时间和空…

深度学习pytorch--线性回归(一)

线性回归线性回归案例提出问题模型定义模型训练(1) 训练数据(2) 损失函数(3) 优化算法模型预测线性回归的表示方法神经网络图矢量计算小结线性回归案例 线性回归输出是一个连续值,因此适用于回归问题。回归问题在实际中很常见,如预测房屋价格、气温、销…

关于 vim 的 magic 设置

文章目录一、magic 介绍二、设置 magic(一)长效设置(二)临时设置(三)magic 示例1. 匹配由 3 个以字母 a 开头,以字母 c 结尾,中间是任意一个字符的子串组成的字符串(1&am…

语言逻辑运算符两侧运算对象_5.3 C语言逻辑运算符与表达式

01优先次序 1、有3种逻辑运算符:与(AND),或(OR),非(NOT)。在basic和Pascal等语言可以在程序中直接用and,or,not作为逻辑运算符。在C语言中不能再程…