使用 Python 函数callable和isinstance的意义

news2024/11/25 3:32:18

一、说明

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

第一部分  callable

1.1 使用变量

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

x = "variable"

def function():
    pass

print(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():
  pass

if __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 = species

class Cat(Animal):
    pass

cat = Cat("Persian")
print(isinstance(cat, Animal))

# Output
# True
         在此示例中,我们有一个名为 的类Animal和一个名为 的子类CatCat我们创建一个Called实例cat,然后使用该isinstance() 函数检查是否cat属于类型Animal。该函数将返回,True因为它cat确实是该类的一个实例Animal

2.4 结论

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

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

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

相关文章

rancher部署pv、pvc、离线部署nfs

(1)NFS离线安装 使用nfs配置两台机器共享目录 假设两台机器188.188.30.32(服务端)、188.188.30.31(客户端)配置nfs 1.在可以联网的机器上下载rpm安装包 yum -y install nfs-utils --downloadonly --dow…

ETF场内基金佣金最低可达万0.5!速速办理

2023年ETF基金开户,交易手续费佣金一般默认是万三左右的,最低是5元起。想要申请低佣金是可以通过线上客户经理办理的,客户经理手中一般都是有低佣金开户渠道的,账户开通后还可以给您提供VIP专属服务,十几分钟就可以办理…

NPU上PyTorch模型训练问题案例

在昇腾AI处理器上训练PyTorch框架模型时,可能由于环境变量设置问题、训练脚本代码问题,导致打印出的堆栈报错与实际错误并不一致、脚本运行异常等问题,那么本期就分享几个关于PyTorch模型训练问题的典型案例,并给出原因分析及解决…

动态照片怎么制作?教你如何制作gif动图

Gif动图想必大家都不陌生吧!那么,这种gif格式的动图要怎么操作呢?很简单通过使用gif动态图片制作(https://www.gif.cn/)工具-GIF中文网,只需上传jpg、png格式的两张以上图片无需下载软件,手机、…

为什么说网络安全是IT行业最后的红利?是风口行业?

前言 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万…

uniapp ui安装 阿里图标库使用 报错 Assignment to constant variable.

安装 ui uni-app官网 (dcloud.net.cn) (一)安装 pages.js配置 安装 sassnpm i sass -D 或 yarn add sass -D 安装 sass-loader npm i sass-loader10.1.1 -D 或 yarn add sass-loader10.1.1 -D安装 uni-uinpm i dcloudio/uni-ui 或 yarn a…

VMware:一个多云+AI的未来

“以往在应用人工智能时,首先你需要一个基础算法模型,然后使用特定的数据进行处理,最后再将其加人到应用程序上…… 但是很显然,这里的每一步骤都涉及到法律和隐私问题:算法模型的知识产权、私人数据的法律风险&#x…

计算机竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…

解决VUE报错GET http://127.0.0.1:5500/favicon.ico 404 (Not Found)

当我们启动VUE项目的时候控制台会报错错误GET http://127.0.0.1:5500/favicon.ico 404 (Not Found) 原因就是项目下的 favicon.ico 找不见,缺少一个页签图标 解决方法: 在根目录下放置一张图片,重命名为favicon.ico 这个时候选中的图片就会…

算法-版本号升级

背景 今天看到了一个工具类AutoUpgradeVersionUtil,觉得很有意思,大体的作用是版本号的升级,类似于从0.0.1-> 0.0.2这样的。我一想,我之前刷算法的时候这样的案例遇到的多着呢,还有很多种的变种! 数字…

云原生Kubernetes:K8S安全机制

目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜…

IDM中下载请求两次无法下载的解决办法

IDM中下载请求两次无法下载的解决办法 遇到的问题描述solution分析原因 遇到的问题描述 如果你在其他地方的帖子无法解决,试试我的包治百病! 本人的idm版本老一点,很久没更新。在下载很多文件的时候会出现两次重复下载的情况,今天…

【设计模式】四、工厂模式

文章目录 概述工厂模式简单工厂模式:工厂方法模式抽象工厂模式小结 概述工厂模式 传统方式: 简单工厂模式: 简单工厂模式的设计方案: 定义一个可以实例化 Pizaa 对象的类,封装创建对象的代码。 存在的问题: 简单工厂…

微信小程序 语法学习

1. 注册小程序账号 https://mp.weixin.qq.com/cgi-bin/wx 2. 获取appId 开发管理 -> 开发设置 3. 下载开发工具 https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html 4. 登录开发工具 不推荐游客模式,使用微信扫描 工具内置了很多模…

25835-2010 缆索用环氧涂层钢丝 阅读笔记

声明 本文是学习GB-T 25835-2010 缆索用环氧涂层钢丝. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了缆索用环氧涂层钢丝的术语和定义、产品标记、订货内容、材料、涂覆、技术要求、涂层 的修补、试验方法、检验规则、包装、标…

转载-C#学习笔记-基本概念(CLR、CTS、CLS...)

1. CLR(Common Language Runtime,公共语言运行时(库)) 可由多种.NET语言使用的运行时环境,其主要作用是定位、加载和管理.NET类型、内存管理、安全检查、线程管理等。.NET运行库提供了一个定义明确的运行库层,可以被支持.NET的所有语言和平台…

【萌新的RiscV学习之流水线结构的概述-7】

萌新的RiscV学习之流水线结构的概述-7 之前写完了单周期的指令 目前朝着流水线迈进 由于涉及学业机密 就不展示代码了 主要展示学习过程和一些想法 由于时钟周期必须满足所有指令中最坏的情况,所以不能使用那些缩短常用指令执行时间而不改变最坏情况的实现技术。因…

一键导入照片就能转成电子相册?

每次旅行、每个瞬间,都值得被珍藏。无论是生日、聚会还是旅行,这款神器都能帮你记录下美好瞬间。你只需要上传照片,选择几个模板,就能在几分钟内拥有一本精美的电子相册! 首先这个神器叫做FLBOOK制作3D仿真翻页电子杂志…

VMware CentOS7 忘记root密码如何更改

VMware CentOS7 忘记root密码如何更改 1、进来的页面马上点上下键停止自动进入 (Immediately click the up and down buttons on the incoming page to stop automatic entry) 2、点键盘e键进入编辑页面e (Click the keyboard e key to en…

基于51单片机气体检测报警系统-proteus仿真-源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、MQ5采集气体值送到液晶1602显示。 3、按键设置报警阀值,声光报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void init_1602() //初始化 { lcdwc(0x01); lcdwc(0x38)…