交换机是一种语句,它评估某个输入值的准确性或相似性。但是如果IF语句的表现不是相同的事情吗?让您查看以Bash脚本语言开始的此语句。
案例表达式在pattern_1)陈述; pattern_2)陈述; pattern_n)陈述; *)陈述;; eSAC.
表达式是表达式(命令)或变量。 pattern_n,是从表达式预期的值。 *是默认值。
所以给出了表达式,我评估了模式案例,如果它们不适合后者,则默认*发挥作用。简单的。让我们在工作中看到她。
Echo -N"输入水果&#34的名称;读水果echo-n" $ fill是"苹果的案例$水果)回声-n"苹果" ;;香蕉)echo-n"香蕉" ;;蓝莓|覆盆子| "蓝葡萄干" |醋栗)回声-n"浆果" ;; *)回声-N"未知" ;; eSAC.
在Bash中,一切都非常简单明了。让我们看看其他语言发生的事情。
在其他语言中,如Java和.NET C#,交换机盒有点复杂。但是,与BASH案例的简单性相比,目的是清晰的。java中的示例。
公共类果子厂家{公共静态void main(String [] args){String Fruit ="香蕉" ;开关(水果){案例"苹果" : 系统 。出去 。 Println("水果是苹果");休息 ;案例"香蕉" : 系统 。出去 。 Println("水果是香蕉");休息 ;案例"蓝莓" :案例"覆盆子" :案例"蓝醋栗" :案例"醋栗" : 系统 。出去 。 Println("水果是浆果");休息 ;默认值:系统。出去 。 println("水果是未知的"); }}}
使用系统;公共类厂家{public static void main(){string fruit ="香蕉" ;开关(案例开关){案例"苹果" : 安慰 。写道("水果是苹果");休息 ;案例"香蕉" : 安慰 。写道("水果是香蕉");休息 ;案例"蓝莓" :案例"覆盆子" :案例"蓝醋栗" :案例"醋栗" : 安慰 。写道("水果是浆果");休息 ;默认值:控制台。写道("水果是未知的");休息 ; }}}
Python没有任何交换机语句。已经评估和创建了PEP 3103,但结论是:
在平均的时间,Python没有交换机语句很好,也许那些声称添加一个的错误是正确的。
正如我上面的反映,交换机箱非常相似,IF语句非常相似。如果if / elif / else语句可以给出python中的早期版本的开关。
水果="香蕉"如果水果=="苹果" :印刷("水果是苹果")Elif Fruit =="香蕉" :打印("水果是香蕉")Elif Cuthit("蓝莓""覆盆子","蓝葡萄干",&#34 ;葡萄干"):印刷("水果是浆果")else:print("水果是未知的")
这两个都读取和理解很简单。但它仍然不是切换声明。开关评估精度,而且一个word.There的相似性是在python对象充当选择器。没有任何内容在java和c#上面写的两个类被称为“选择器”。
选择器评估表达式,占据其值并检查模式的准确性,否则,它返回默认值(*)。字典对象是一种选择器:
映射对象将Hashable值映射到任意对象。映射是可变的物体。目前只有一个标准映射类型,字典。
基于哈希索引,检索值更快。让我们尝试创建我们的选择器。
Myfruit ="香蕉"水果= {"苹果" :"水果是苹果" ,"香蕉" :"水果是香蕉" ,"蓝莓" :"水果是浆果" ,"覆盆子" :"水果是浆果" ,"蓝醋栗" :"水果是浆果" ,"醋栗" :"水果是浆果"打印(果实。得到(Myfruit,"水果是未知的"))
通过这种方式,我们制作了开关选择器,美丽和“Pythonic”。但仍然,没有评估精确性,但也没有评估单词的相似性。
是的,当然!现在让我们创建一个将作为一个选择的功能,因为我们已经在Java和C#。有见过做的是一个python内置适用过滤器。该函数称为过滤器。将函数应用于可迭代。 Terables等函数是Python对象,可以分配为其他功能的参数。此外,我们的水果选择器(字典)是一个可迭代的。我们只需要一个评估密钥的相似性的函数。
def果子厂(水果):水果= {"苹果" :"水果是苹果" ,"香蕉" :"水果是香蕉" ,"蓝莓" :"水果是浆果" ,"覆盆子" :"水果是浆果" ,"蓝醋栗" :"水果是浆果" ,"醋栗" :"水果是浆果" ,"默认" :"水果是未知的" }返回DICT(过滤器(Lambda键:key中的水果[0],水果)。果子()))果子切片('香蕉')果子切片(' Anana')
在Python中,类和函数的方法是类型可调用的对象。作为对象,信息可以存储在它们中。我们将选择我们的选择器转换为交换机,其中附加值摘要我们的选择器甚至更多地使它成为一个有效的转换,就是这样:
DEF开关(匹配,字典,默认="没有匹配"):对于字典中的键。键():如果在键中匹配:交换机。 last_match =键返回字典。 get(key)返回默认结果= {"苹果" :"水果是苹果" ,"香蕉" :"水果是香蕉" ,"蓝莓" :"水果是浆果" ,"覆盆子" :"水果是浆果" ,"蓝醋栗" :"水果是浆果" ,"醋栗" :"水果是浆果" }开关('香蕉'水果)开关(' Anana'水果)开关(切换。last_match,水果,默认=#34;水果是未知的")
此外,由于Python中的函数是对象,因此可以替换具有函数的字符串值,并且如果密钥匹配,则可以调用它们。一个非常简单的例子。效果,就是这样:
DEF开关(匹配,字典,默认="没有匹配"):对于字典中的键。键():如果在键中匹配:交换机。 last_match =键返回字典。 get(key)返回默认计算= {"加上" :lambda x,y:x + y,"减去" :lambda x,y:x - y} plus = switch(' plus' calc,默认="意外函数")minus = switch('减去', Calc,默认="意外函数")加(6,4)减去(6,4)
实际上,Python不需要交换机语句。其他编程语言真的需要吗?我相信,简单的语言如Bash,这是真正需要这个构造。在Java中,您可以通过地图对象和C#中的相同用法做同样的事情。最后,我同意PEP 3103的结论:“在平均时,Python没有交换声明,只许那些声称添加一个是正确的人。"