使用 Python 函数callable和isinstance的意义

一、说明

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

猜你喜欢

转载自blog.csdn.net/gongdiwudu/article/details/133329488