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