使用 Python 函数callable和isinstance的意义

一、说明

        在这篇博客中,我们将探讨两个python函数:1  callable 中的函数及其有趣的应用程序。该callable函数用于检查对象是否可调用,这意味着它可以作为函数调用。2  isinstance这个内置函数允许我们比较两种不同的数据类型并确定它们是否相同。

第一部分  callable

1.1 使用变量

        让我们首先分配一个变量x并使用该callable函数来检查它是否可调用。由于变量不可调用,因此该callable函数将返回False。但是,如果我们定义一个函数并将其传递给该callable函数,它将返回True

x = "variable"def function():passprint(callable(x))  # Output: False
print(callable(function))  # Output: True

1.2 探索class

        现在,让我们看看该callable函数应用于类时的一些更有趣的方面。我们将创建一个名为 的类Engine并定义一个 dunder 方法__call__,该方法允许将该类的实例作为函数调用。在方法内部__call__,我们将打印传递给实例的参数和关键字参数。

class Engine:def __call__(self, *args, **kwargs):if args:print(args)if kwargs:print(kwargs)print('Running the engine!)engine = Engine()

最初,callable使用类的实例调用函数Engine将返回False,因为默认情况下类不可调用。

print(callable(engine))  # Output: False

但是,通过将__call__方法添加到类中,我们可以使类的实例可调用。让我们__call__暂时删除该方法并再次检查该callable函数,该函数现在将返回False

del Engine.__call__
print(callable(engine))  # Output: False

现在,让我们__call__重新添加该方法并再次检查该callable函数,该函数现在将返回True

class Engine:def __call__(self, *args, **kwargs):if args:print(args)if kwargs:print(kwargs)print('Running the engine!)def func():passif __name__ == "__main__":var = "x"engine = Engine()print(callable(engine))# Output: True

1.3 使用可调用类

        现在该类Engine是可调用的,我们可以将其用作函数。我们可以将参数和关键字参数传递给类的实例,它会在运行引擎之前打印它们。

engine("bmw", fuel="electric")# Outpuut
# ('bmw')
# {'fuel': 'electric'}
# Running the engine
# True

1.4 使用callable混合数据类型列表

        该函数的另一个有趣的应用callable是处理包含函数、变量和其他数据类型混合的列表。for我们可以通过使用循环和函数来简化仅调用可调用对象的过程callable

engine_variable = [engine, "variable", function, 123]for item in engine_variable:if callable(item):item()

        在此示例中,我们迭代列表engine_variable并检查每个项目是否可以使用该callable函数调用。如果它是可调用的,我们将该项目称为函数。在这种情况下,它将运行引擎和函数。

1.5 结论

        在这篇博客中,我们探索了callablePython 中的函数。我们从使用变量开始,然后转向类。通过将__call__dunder 方法添加到类中,我们使该类的实例可调用。我们还了解了如何callable使用该函数仅调用混合数据类型列表中的可调用对象。该callable函数是一个强大的工具,它允许我们确定一个对象是否可以作为函数调用,从而为我们的代码提供灵活性和控制。

 第二部分  isinstance()

        在本节中,我们将探讨该函数,它是Pythonisinstance()中的内置函数。专业人士通常使用此功能来比较两种不同的数据类型并确定它们是否相同。通过使用,我们可以在继续程序之前轻松检查变量是否属于特定数据类型。

2.1 传入字符串和我们想要与之比较的数据类型

        让我们从一个例子开始。假设我们有一个字符串变量和一个名为 的类Animal。该类Animal仅保存动物的种类。我们要检查字符串是否是字符串类型。为此,我们可以使用该isinstance() 方法,传入字符串和我们想要与之比较的数据类型。这是代码:

string = "Hello, world!"
print(isinstance(string, str))# Output
# True
        在这种情况下,isinstance() 函数将返回,True因为变量string是字符串类型。但是,如果我们将 的值更改string为整数并重新运行程序,该函数将返回,False因为string不再是字符串类型。

        该isinstance()函数还可以与其他数据类型一起使用,例如整数。您可以插入任何要比较的数据类型。例如,如果我们运行以下代码:

string = "Hello, world!"
print(isinstance(string, (int, str)))
print(isinstance(string, (int, float)))# Output
# True
# False

        第一个isinstance() 函数将返回,True因为string它是字符串,但第二个isinstance()函数将返回False,因为string它不是整数。

2.2 组合数据类型比较 

        当我们开始组合数据类型时,事情会变得更加有趣。我们可以将数据类型的元组传递给函数isinstance()来检查变量是否与任何指定的数据类型匹配。例如:

string = "Hello, world!"
print(isinstance(string, (int, str)))
print(isinstance(string, (int, float)))# Output
# True
# False
在第一种情况下,该isinstance()函数将返回,True因为它string是一个字符串。然而,在第二种情况下,它将返回,False因为string它既不是整数也不是浮点数。

2.3 不限于内置类型

        该isinstance()函数不限于内置数据类型。我们还可以用它来比较用户定义的类型,例如类。让我们考虑以下示例:

class Animal:def __init__(self, species):self.species = speciesclass Cat(Animal):passcat = Cat("Persian")
print(isinstance(cat, Animal))# Output
# True
在此示例中,我们有一个名为 的类Animal和一个名为 的子类CatCat我们创建一个Called实例cat,然后使用该isinstance() 函数检查是否cat属于类型Animal。该函数将返回,True因为它cat确实是该类的一个实例Animal

2.4 结论

        在本文中,我们探讨了Python 中的函数。这个内置函数允许我们比较两种不同的数据类型并确定它们是否相同。通过使用,我们可以在继续程序之前轻松检查变量是否属于特定数据类型。在处理用户输入并确保提供正确的数据类型时,此函数特别有用。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Flink--6、输出算子(连接到外部系统、文件、kafka、MySQL、自定义Sink)

星光下的赶路人star的个人主页 世间真正温煦的春色,都熨帖着大地,潜伏在深谷 文章目录 1、输出算子(Sink)1.1 连接到外部系统1.2 输出到文件1.3 输出到Kafka1.4 输出到MySQL(JDBC)1.4 自定义Sink输出 1、输…

[密码学入门]仿射密码(Affine)

加密算法y(axb)mod N 解密算法x*(y-b)mod N(此处的为a关于N的乘法逆元,不是幂的概念) 如何求,涉及的知识挺多,还没想好怎么写,丢番图方程,贝祖定理(又译裴蜀定理),扩展欧…

IO流————

一、字符流 前面我们学习了字节流,使用字节流可以读取文件中的字节数据。但是如果文件中有中文,使用字节流来读取,就有可能读到半个汉字的情况,这样会导致乱码。虽然使用读取全部字节的方法不会出现乱码,但是如果文件过大又不太合适。 所以Java专门为我们提供了另外一种…

opencv: 解决保存视频失败的问题

摘要:opencv能读取视频,但保存视频时报错。 一、首先要确保已经下载了openh264.dll文件,否则保存的视频无法打开,详细可以浏览这个:opencv:保存视频。 二、保存视频时出现一下问题: OpenCV:…

vue_Delete `␍`eslint(prettier/prettier)

Delete ␍eslint(prettier/prettier) 错误的解决方案 问题背景 在Windows笔记本上新拉完代码,在执行pre-commit时,出现如下错误: Delete ␍eslint(prettier/prettier)问题根源 罪魁祸首是git的一个配置属性:core.autocrlf 由于…

【空间-光谱联合注意网络:多时相遥感图像】

A Spatial–Spectral Joint Attention Network for Change Detection in Multispectral Imagery (一种用于多光谱图像变化检测的空间-光谱联合注意网络) 变化检测是通过比较双时相图像来确定和评估变化,这是遥感领域的一项具有挑战性的任务…

Oracle VM VirtualBox安装并下载安装CentOS7

Oracle VM VirtualBox安装并下载安装CentOS7 Oracle VM VirtualBox下载CentOS创建虚拟机 Oracle VM VirtualBox VM下载链接 https://www.oracle.com/cn/virtualization/virtualbox/ 点击链接直接下载就行,下载完默认安装或者更改一下安装目录。 下载CentOS http://…

快速排序与冒泡排序以及代码

快速排序 快速排序(Quicksort)是一种常用的排序算法,它基于分治的思想。 时间复杂度:O(nlogn) 空间复杂度:O(logn) 快速排序的基本思想如下: 选择一个元素…

vue3 + mark.js | 实现文字标注功能

页面效果 具体实现 新增 1、监听鼠标抬起事件,通过window.getSelection()方法获取鼠标用户选择的文本范围或光标的当前位置。2、通过 选中的文字长度是否大于0或window.getSelection().isCollapsed (返回一个布尔值用于描述选区的起始点和终止点是否位于一个位置&…

设计模式 - 代理模式

目录 一. 前言 二. 实现 三. 静态代理和动态代理 一. 前言 代理模式(Proxy Pattern),为某个对象提供一种代理以控制对对象的访问。即客户端可通过代理对象间接访问目标对象,同时可限制、增强、修改目标对象的一些特性。访问者不…

KF32A学习笔记(一):工程导入、编译烧录方法(KF32 IDE+ KF32 PRO)

目录 概述KF32 IDE打开现有项目工程1.工程导入2.编译工程3.下载程序 KF32 PRO 概述 本文主要是对KF32A150芯片程序的编译、烧录方法进行说明。针对开发过程中的编译烧录和无代码情况下的烧录两种场景,需要安装ChipON PRO KF32和ChipON IDE KF32两个上位机工具&…

华为云智能化组装式交付方案 ——金融级PaaS业务洞察及Web3实践的卓越贡献

伴随信息技术与金融业务加速的融合,企业应用服务平台(PaaS)已从幕后走向台前,成为推动行业数字化转型的关键力量。此背景下,华为云PaaS智能化组装式交付方案闪耀全场,在近日结束的华为全联接大会 2023上倍受…

vue若依前端项目搭建

1.项目搭建 首先进入到你需要创建的项目目录下面,然后输入命令vue create .创建项目 接下来选择手动搭建,然后把下面图片中的内容选上 再然后继续配置一些参数信息 接下来运行npm run serve项目就启动起来了 2.配置登录界面文件 首先修改src/router…

数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...

全文链接:http://tecdat.cn/?p27384 在本文中,数据包含有关葡萄牙“Vinho Verde”葡萄酒的信息(点击文末“阅读原文”获取完整代码数据)。 介绍 该数据集(查看文末了解数据获取方式)有1599个观测值和12个变量&#xf…

使用EPPlus实现C#控件Excel文件内容导入转换

使用EPPlus实现C#控件Excel文件内容导入转换 1.添加EPPlus库 在使用EPPlus库时,你需要确保在项目中添加了正确的引用。你可以通过以下方式添加引用: 打开你的项目。 在“解决方案资源管理器”中,右键单击“引用”并选择“管理NuGet程序包”…

作为一名独立开发者,如何获取客户?

很多程序员想成为一名独立开发者,从事自由职业,最大的困难在于如何赚钱,进一步来说,就是如何找到自己的客户,有很多开发者拥有丰富的经验,优秀的能力,但无法吸引客户。这篇文章的灵感正是为此而…

Python实现猎人猎物优化算法(HPO)优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

一创聚宽的实盘就要关闭了,有没有好用的实盘平台推荐

挺多的,比较普遍的是QMT和Ptrade,python语言,易上手,通用性好,要说适用性可以考虑Ptrade,问一下你的客户经理有没有,用Ptrade的券商也多,如果之前用一创聚宽你可以无缝切换&#xff…

单链表详细解析|画图理解

前言: 在前面我们学习了顺序表,相当于数据结构的凉菜,今天我们正式开始数据结构的硬菜了,那就是链表,链表有多种结构,但我们实际中最常用的还是无头单向非循环链表和带头双向循环链表,我们今天先…

ELF文件结构

目录 ELF文件类型 ELF文件结构 通过链接视角分析目标文件 ELF文件头(ELF Header) 节头表 .text代码节 .data 数据节 .rodata 只读数据节 .bss节 其他常见的节 字符串节 符号表 重定位表 通过运行视角分析目标文件 本节内容: ELF文件类型ELF文件结构 …