使用 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 结论
在这篇博客中,我们探索了callable
Python 中的函数。我们从使用变量开始,然后转向类。通过将__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
和一个名为 的子类Cat
。Cat
我们创建一个Called实例cat
,然后使用该isinstance()
函数检查是否cat
属于类型Animal
。该函数将返回,True
因为它cat
确实是该类的一个实例Animal
。
2.4 结论
在本文中,我们探讨了Python 中的函数。这个内置函数允许我们比较两种不同的数据类型并确定它们是否相同。通过使用,我们可以在继续程序之前轻松检查变量是否属于特定数据类型。在处理用户输入并确保提供正确的数据类型时,此函数特别有用。
相关文章:

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

Netty场景及其原理
Netty场景及其原理 Netty简化Java NIO的类库的使用,包括Selector、 ServerSocketChannel、 SocketChannel、ByteBuffer,解决了断线重连、 网络闪断、心跳处理、半包读写、 网络拥塞和异常流的处理等。Netty拥有高性能、 吞吐量更高,延迟更低…...
Java接口和接口继承
Java接口和接口继承 接口 在抽象类中,抽象方法本质上是定义接口规范,即规定高层类的接口,从而保证所有子类都有相同的接口实现,这样,多态就能发挥出威力。 如果一个抽象类没有字段,所有方法全部都是抽象方…...

2023 年解锁网络安全即服务
在当今快速发展的数字世界中,强大的网络安全机制的重要性怎么强调都不为过。对于越来越多地发现自己成为网络威胁焦点的小型企业来说尤其如此。 那么,“网络安全即服务”到底是什么?为什么它对小型企业至关重要? 网络安全即服务…...

python基于轻量级卷积神经网络模型GhostNet开发构建养殖场景下生猪行为识别系统
养殖业的数字化和智能化是一个综合应用了互联网、物联网、人工智能、大数据、云计算、区块链等数字技术的过程,旨在提高养殖效率、提升产品质量以及促进产业升级。在这个过程中,养殖生猪的数字化智能化可以识别并管理猪的行为。通过数字化智能化系统&…...

Selenium自动化测试 —— 通过cookie绕过验证码的操作!
验证码的处理 对于web应用,很多地方比如登录、发帖都需要输入验证码,类型也多种多样;登录/核心操作过程中,系统会产生随机的验证码图片,进行验证才能进行后续操作 解决验证码的方法如下: 1、开发做个万能…...

链表(单链表、双链表)
前言:链表是算法中比较难理解的部分,本博客记录单链表、双链表学习,理解节点和指针的使用,主要内容包括:使用python创建链表、实现链表常见的操作。 目录 单链表 双链表 单链表 引入链表的背景: 先来看…...

面试题08.05.递归算法
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。 示例1: 输入:A 1, B 10输出:10示例2: 输入:A 3, B 4输出:12提示: 保证乘法…...
分布式IT监控系统
公司的IT系统越来越复杂,对运维和维护服务的需求也越来越高。在这种环境下,分布式IT监控系统应运而生。它逐渐成为公司提高运营效率、保证业务高效运营的关键工具,功能强大,性能优良。 分布式IT监控系统是什么? 分布…...
Redis 是什么?
Redis是一种基于内存的数据库,数据的读写都是在内存中完成的,因此读写速度非常的快,常用于缓存,消息队列,分布式锁等场景。 Redis 在高并发项目中,担任着非常重要的作用,扛高并发的,…...
本地源制作
title: 本地源制作 createTime: 2020-10-29 18:05:52 updateTime: 2020-10-29 18:05:52 categories: linuxyum tags: 制作本地源 通过 createrepo 制作本地源 前提 : 前提制作本地源的机器可以安装 这个软件例如 下载nginx的时候 自己加上 nginx的yum的数据源 (rp…...

树莓派(Linux系统通用)交叉编译(环境搭建、简单使用)
概念 交叉编译是指在一台计算机上编译运行在另一台计算机上的程序。(编译是指,在一个平台上生成在该平台上的可执行程序)通常情况下,编译器和目标平台的架构是不同的,例如,在一台x86平台上编译运行在ARM平…...

uniapp - 微信小程序实现腾讯地图位置标点展示,将指定地点进行标记选点并以一个图片图标展示出来(详细示例源码,一键复制开箱即用)
效果图 在uniapp微信小程序平台端开发,简单快速的实现在地图上进行位置标点功能,使用腾讯地图并进行标点创建和设置(可以自定义标记点的图片)。 你只需要复制代码,改个标记图标和位置即可。...

网络安全--IDS--入侵检测
1. 什么是IDS? IDS---入侵检测是防火墙的一个有力补充,形成防御闭环,可以及时、准确、全面的发现入侵弥补防火墙对应用层检查的缺失。对系统的运行状态进行监视,发现各种攻击企图、过程、结果,来保证系统资源的安全&a…...
js实现数组去重方式(12种方法)
目录 1、filter indexOf2、for object3、for includes4、for splice5、filter indexOf6、Map7、Set8、set Array.from9、sort 排序10、for findIndex11、双重for循环12、reduce 1、filter indexOf 数组去重:利用 filter 过滤 配合 indexOf 查找元素 var a…...

AI智能语音机器人的优势
1.高效自动拨号功能。 导入客户数据,外呼机器人自动拨号,无需看守,真人录音话术,定制场景问答和1秒内的问答响应,为客户带来真实准确的咨询体验。同时,每次通话结束后,外呼系统根据通话时间和关…...

BERT: 面向语言理解的深度双向Transformer预训练
参考视频: BERT 论文逐段精读【论文精读】_哔哩哔哩_bilibili 背景 BERT算是NLP里程碑式工作!让语言模型预训练出圈! 使用预训练模型做特征表示的时候一般有两类策略: 1. 基于特征 feature based (Elmo)…...

5-1.(OOP)初步分析MCV架构模式
组成:模型(model)、视图(view)、控制器(controller) view:界面、显示数据 model:数据管理、负责在数据库中存取数据以及数据合法性验证 controller:负责转…...
如何利用React和Flutter构建跨平台移动应用
如何利用React和Flutter构建跨平台移动应用 移动应用已经成为现代生活的一部分,每天都有大量的手机用户在使用各种各样的应用程序。对于开发者来说,构建一个适用于多个平台的移动应用是一个挑战。幸运的是,有一些工具可以帮助我们轻松地实现…...
npm install / webdriver-manager update报错 unable to get local issuer certificate
我这边遇到的问题,用的是angular,跑npm install的时候报错,一开始在.npmrc添加strict-sslfalse但是还是报错,搜索下记录。 参考解决: selenium - webdriver-manager update, Error: unable to get local issuer certi…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...