我试图理解以下代码之间的区别以及每个代码存在什么用例。或者它们只是冗余代码?
代码1(使用match/case)
var = 0
match var:
case str():
print("string")
case list():
print("list")
case float():
print("float")
case bool():
print("boolean")
case int():
print("integer")
case _:
print("unknown")
字符串
这就给出了如下的输出
integer
型
代码2(使用type())
print(type(var))
型
这也给了我同样的输出,因为它应该
<class 'int'>
型
想知道这些可能有哪些不同的用例吗?
3条答案
按热度按时间jgwigjjp1#
在两个代码片段中找到相似之处是很困难的!不过,我会一一描述。
个字符
前者是一个控制语句--你可以在这些块中做任何事情。后者是一个生成类型
int
的语句。考虑如下代码:
型
在这两种情况下,你都得到了
"Hey, you're running Python!"
,因为Python匹配的是类中的字段,而python
是这两种情况下的cmd
字段。您不能用type
进行这种模式匹配(您需要类似type(cmd) is Command and cmd.cmd == "python"
的东西)628mspwn2#
match
不能动态扩展,这意味着您必须硬编码每个值。在某些情况下,这可能是有帮助的,例如向不熟悉编程的用户显示类型或错误。type()
则返回示例的基类。在您的示例中,0
是内置int
类型的示例。使用
type
占用的空间更少,此外,还可以与字典一起使用来替换match
。由于match
和case
是Python 3.10中的新成员,因此它们的支持可能有限。许多公司和生产环境仍将使用3.8。如果你确实需要硬编码不同的值,而不是match或if-elif-else,你可以使用字典来将键Map到值:字符串
至于用例,
type
和match
都有更微妙和复杂的特性,在这样的简单用例中可能不需要这些特性。type
在面向对象编程范例中更常见,而match
用于复杂的控制流场景。就我个人而言,我会使用type
,因为无论您在哪个环境中工作,match
都可能不受支持。TL;DR:使用类型,以防止硬编码值和支持。
pkwftd7m3#
代码1(使用match/case)和代码2(使用type())都用于确定变量的数据类型。但是,它们在用例和行为方面存在一些差异。
代码1(使用匹配/大小写):
match
是Python 3.10中引入的一个新特性。它允许您对表达式的值执行模式匹配。在给定的代码中,match用于模式匹配变量var的值,然后根据其数据类型执行相应的块。当您特别想要检查资料类型,并根据类型执行不同的动作时,这个程式码会很有帮助。当您要行程多个型别,而且想要避免使用多个if-elif-else
陈述式时,这个方法特别有用。代码2(使用类型()):
type()
是Python中的一个内置函数,用于返回对象的类型。在给定的代码中,type(var)
用于直接获取变量var的类型。当您只需要知道变量的类型时,此代码会更简单、更直接。您不必像在match/case语句中那样使用多个case块。但是,它不允许您直接根据类型执行不同的操作。您可能需要使用if-elif-else
或其他条件语句来分别处理不同的类型。使用案例:
代码1(使用match/case)在您希望根据变量的数据类型执行不同的操作时非常有用,尤其是在您要处理多个数据类型时。代码2(使用type())在您只需要知道变量的数据类型,而不需要根据类型执行不同的操作时很有用。
代码1的示例用例:
假设您有一个函数,它接收不同类型的输入,并且需要以不同的方式处理它们。您可以使用match来分别行程不同的资料类型。当解析具有动态数据类型的JSON或CSV文件时,match可以帮助您适当地处理每种数据类型。
代码2的示例用例:
在调试或分析代码时,您可能希望快速检查变量的类型以了解其行为。当您需要编写包含某些变量的数据类型信息的日志或报告时,可以使用
type()
来提取此信息。