使用 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.rhkb.cn/news/142331.html

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

相关文章

面试:Spring中单例模式用的是哪种?

你好,我是田哥 需要简历优化、模拟面试、面试辅导、技术辅导......请联系我。10年码农24小时在线为你服务。 面试中被问到设计模式的概率还是蛮高的,尤其是问:你在项目中用过设计模式吗? 面对这个问题,我也在做模拟面试…

蓝桥杯每日一题2023.9.22

4960. 子串简写 - AcWing题库 题目描述 题目分析 原本为纯暴力但是发现会超时,可以加入前缀和,从前往后先记录一下每个位置c1出现的次数 再从前往后扫一遍,如果遇到c2就将答案加上此位置前的所有c1的个数(直接加上此位置的前缀…

React 全栈体系(十六)

第八章 React 扩展 五、Context 1. 代码 /* index.jsx */ import React, { Component } from react import ./index.css//创建Context对象 const MyContext React.createContext() const {Provider,Consumer} MyContext export default class A extends Component {state …

构建卓越语言模型应用的利器:LangChain | 开源日报 No.39

langchain-ai/langchain Stars: 61.3k License: MIT LangChain 是一个用于通过组合性构建 LLMs 应用程序的库。 LLMs 和 Prompts:包括 prompt 管理、prompt 优化、所有 LLM 的通用接口以及与 LLMs 一起使用的常见工具。Chains:超越单个 LLM 调用&…

Logic Pro X10.7.9(mac乐曲制作软件)

Logic Pro X是由苹果公司开发的一款专业音频制作软件,主要用于音乐制作、录音、混音和母带处理等方面。以下是Logic Pro X的特点: 强大的音频编辑功能:Logic Pro X提供了丰富的音频编辑工具,包括波形编辑器、音频自动化、时间拉伸…

W5100S_EVB_PICO快速入门之MQTT篇(十二)

目录 1. 前言 2. MQTT介绍 2.1 什么是mqtt? 2.2 特点 2.3 应用场景 2.4 MQTT协议实现方式 3. 硬件及接线方式 3.1 硬件准备 3.2 硬件介绍 3.3 接线图 4. 测试 4.1 MQTT测试流程图 4.2 相关代码 4.3 测试现象 5. 相关链接: 1. 前言 随着物…

ArduPilot开源飞控之GCS显示DPS310异常问题

ArduPilot开源飞控之GCS显示DPS310异常问题 1. 源由2. 现象3. 分析3.1 Mission Planner3.2 Ardupilot3.3 AP_Baro分析3.4 AP_Baro定位 4. 修复5. 效果6. 参考资料7. 补充7.1 Ardupilot提交PR注意事项7.2 修复主要使用到的命令 1. 源由 2020年Ardupilot官网论坛就有开始讨论DPS…

邮件功能-python中的SMTP协议邮件发送

文章目录 一、SMTP协议邮件准备二、smtplib模块1.使用smtplib封装一个邮件类2.发送邮件 补充 一、SMTP协议邮件准备 需要一个smtp服务器 二、smtplib模块 smtplib模块是python自带的模块 1.使用smtplib封装一个邮件类 import smtplib import logging # 加入日志&#xff…

ORACLE 内存结构之系统全局区(SGA)

每个 Oracle 数据库实例都会在内存中分配一个很大的内存结构, 称为系统全局区(System Global Area), 这是一个大型的共享内存结构,每个Oracle进程都会访问它。 在Linux/Unix操作系统上,SGA是一个物理实体,使用操作系统命令能“看到它”。 它被操作系…

一维卷积神经网络

假设输入数据维度为8,filter维度为5; 不加padding时,输出维度为4,如果filter的数量为16,那么输出数据的shape就是4*16. 一维卷积不代表卷积核只有一维,也不代表被卷积的feature也是一维。一维的意思是说卷…

RIP路由

目录 RIP路由 1、什么是RIP路由 2、RIP的工作原理是什么 3、RIP v1 和 RIP v2的区别 4、RIP的常用场景 5、RIP的通信流程 6、RIP的优缺点 优点: 缺点: 7、扩展部分 1.RIP路由的作用与应用场景 2.与其他路由协议的区别 3.RIP路由协议的工作原…

OpenCV显示10bit Raw数据

参考&#xff1a;10 12 14bit图像存储格式&#xff0c;利用Opencv显示10bit Raw数据,并根据鼠标的移动显示对应位置的灰度值。其他bit位数的Raw数据方法类似。 代码实现&#xff1a; #include<opencv2/opencv.hpp> #include<iostream> #include<opencv/highgu…

2023年毫米波行业研究报告

第一章 行业概况 1.1 定义 毫米波是一种电磁波&#xff0c;其波长范围在1毫米至10毫米之间&#xff0c;频率介于30GHz至300GHz。与sub-6G (6GHz以下频段&#xff09;的5G系统相比&#xff0c;5G毫米波通信在带宽、时延和灵活弹性空口配置方面具有明显优势。这使其能够有效地满…

【C语言练习】DOS黑框框通讯录(使用结构体、动态内存管理联系人信息,函数指针等)

文章目录 1. contacts.h 头文件、函数/常量/结构体声明2. test.c 主界面菜单打印、菜单功能选项选择3. contacts.c 函数实现4. 使用结构体、动态内存&#xff0c;函数指针实现时的注意点5. 运行演示 1. contacts.h 头文件、函数/常量/结构体声明 #pragma once#include <std…

探索公共厕所的数字化治理,智慧公厕完善公共厕所智能化的治理体系

随着城市化进程的不断发展&#xff0c;公共厕所治理成为一个不容忽视的问题。如何通过数字化手段来提升公共厕所管理水平&#xff0c;成为了一个备受关注的话题。本文将以智慧公厕领先厂家广州中期科技有限公司&#xff0c;大量精品案例项目实景实图&#xff0c;探讨公共厕所数…

使用transformers进行端到端的目标检测

目录 目标检测的旧方法 使用transformers进行端到端的目标检测 抛去了目标检测旧的方法 网络架构 Transformer encoder Transformers and Parallel Decoding 注意力起到的作用 使用Hungarian algorithm算法完成匹配 在使用transformers的端到端目标检测中&#xff0c;匈…

【开发篇】七、RedisTemplate与StringRedisTemplate + Jedis与Lettcus

文章目录 1、RedisTemplate详解2、常用方法3、关于IDEA的报黄4、RedisTemplate和StringRedisTemplate的区别5、如何通用RedisTemplate和StringRedisTemplate6、Jedis7、Jedis的连接池8、封装Jedis工具类8、RedisTemplate底层实现技术切换 1、RedisTemplate详解 RedisTemplate是…

spark Structured报错解决

报错&#xff0c;不想看原因的直接去解决方案试试 Exception in thread "main" java.lang.IllegalArgumentException: Pathname /C:/Users/Administrator/AppData/Local/Temp/1/temporary-611514af-8dc5-4b20-9237-e5f2d21fdf88/metadata from hdfs://master:8020/C…

C语言的stdio.h的介绍

C语言的stdio.h的介绍 C语言的stdio.h的介绍 C语言的stdio.h的介绍C语言stdio.h的介绍 C语言stdio.h的介绍 这个含义是导入标准输入输出库 包含头文件.h&#xff0c;std标准库&#xff0c;io是input output输入输出库 <>代表系统库&#xff0c;自定义的话用""…

Ingress Controller

什么是 Ingress Controller &#xff1f; 在云原生生态中&#xff0c;通常来讲&#xff0c;入口控制器( Ingress Controller )是 Kubernetes 中的一个关键组件&#xff0c;用于管理入口资源对象。 Ingress 资源对象用于定义来自外网的 HTTP 和 HTTPS 规则&#xff0c;以控制进…