欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中Switch/Case實(shí)現(xiàn)的示例代碼

 更新時(shí)間:2017年11月09日 10:00:34   作者:gerrydeng  
本篇文章主要介紹了python中Switch/Case實(shí)現(xiàn)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

學(xué)習(xí)Python過(guò)程中,發(fā)現(xiàn)沒(méi)有switch-case,過(guò)去寫(xiě)C習(xí)慣用Switch/Case語(yǔ)句,官方文檔說(shuō)通過(guò)if-elif實(shí)現(xiàn)。所以不妨自己來(lái)實(shí)現(xiàn)Switch/Case功能。

使用if…elif…elif…else 實(shí)現(xiàn)switch/case

可以使用if…elif…elif..else序列來(lái)代替switch/case語(yǔ)句,這是大家最容易想到的辦法。但是隨著分支的增多和修改的頻繁,這種代替方式并不很好調(diào)試和維護(hù)。

方法一

通過(guò)字典實(shí)現(xiàn)

def foo(var):
  return {
      'a': 1,
      'b': 2,
      'c': 3,
  }.get(var,'error')  #'error'為默認(rèn)返回值,可自設(shè)置

方法二

通過(guò)匿名函數(shù)實(shí)現(xiàn)

def foo(var,x):
  return {
      'a': lambda x: x+1,
      'b': lambda x: x+2,
      'c': lambda x: x+3, 
  }[var](x)

方法三

通過(guò)定義類實(shí)現(xiàn)

參考Brian Beck通過(guò)類來(lái)實(shí)現(xiàn)Swich-case

# This class provides the functionality we want. You only need to look at
# this if you want to know how this works. It only needs to be defined
# once, no need to muck around with its internals.
class switch(object):
  def __init__(self, value):
    self.value = value
    self.fall = False

  def __iter__(self):
    """Return the match method once, then stop"""
    yield self.match
    raise StopIteration

  def match(self, *args):
    """Indicate whether or not to enter a case suite"""
    if self.fall or not args:
      return True
    elif self.value in args: # changed for v1.5, see below
      self.fall = True
      return True
    else:
      return False


# The following example is pretty much the exact use-case of a dictionary,
# but is included for its simplicity. Note that you can include statements
# in each suite.
v = 'ten'
for case in switch(v):
  if case('one'):
    print 1
    break
  if case('two'):
    print 2
    break
  if case('ten'):
    print 10
    break
  if case('eleven'):
    print 11
    break
  if case(): # default, could also just omit condition or 'if True'
    print "something else!"
    # No need to break here, it'll stop anyway

# break is used here to look as much like the real thing as possible, but
# elif is generally just as good and more concise.

# Empty suites are considered syntax errors, so intentional fall-throughs
# should contain 'pass'
c = 'z'
for case in switch(c):
  if case('a'): pass # only necessary if the rest of the suite is empty
  if case('b'): pass
  # ...
  if case('y'): pass
  if case('z'):
    print "c is lowercase!"
    break
  if case('A'): pass
  # ...
  if case('Z'):
    print "c is uppercase!"
    break
  if case(): # default
    print "I dunno what c was!"

# As suggested by Pierre Quentel, you can even expand upon the
# functionality of the classic 'case' statement by matching multiple
# cases in a single shot. This greatly benefits operations such as the
# uppercase/lowercase example above:
import string
c = 'A'
for case in switch(c):
  if case(*string.lowercase): # note the * for unpacking as arguments
    print "c is lowercase!"
    break
  if case(*string.uppercase):
    print "c is uppercase!"
    break
  if case('!', '?', '.'): # normal argument passing style also applies
    print "c is a sentence terminator!"
    break
  if case(): # default
    print "I dunno what c was!"

# Since Pierre's suggestion is backward-compatible with the original recipe,
# I have made the necessary modification to allow for the above usage.
 

查看Python官方:PEP 3103-A Switch/Case Statement

發(fā)現(xiàn)其實(shí)實(shí)現(xiàn)Switch Case需要被判斷的變量是可哈希的和可比較的,這與Python倡導(dǎo)的靈活性有沖突。在實(shí)現(xiàn)上,優(yōu)化不好做,可能到最后最差的情況匯編出來(lái)跟If Else組是一樣的。所以Python沒(méi)有支持。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python如何新建三維數(shù)組并賦值

    Python如何新建三維數(shù)組并賦值

    本文詳細(xì)介紹了如何使用Python和numpy庫(kù)建立三維數(shù)組并對(duì)其進(jìn)行賦值。首先,通過(guò)numpy創(chuàng)建一個(gè)3x3x3的三維數(shù)組,其次,將自定義的二維數(shù)組賦值到三維數(shù)組中。本文還解釋了相關(guān)參數(shù)的含義,使讀者能夠更好地理解和應(yīng)用到其他多維矩陣的操作中
    2024-09-09
  • Python通過(guò)調(diào)用mysql存儲(chǔ)過(guò)程實(shí)現(xiàn)更新數(shù)據(jù)功能示例

    Python通過(guò)調(diào)用mysql存儲(chǔ)過(guò)程實(shí)現(xiàn)更新數(shù)據(jù)功能示例

    這篇文章主要介紹了Python通過(guò)調(diào)用mysql存儲(chǔ)過(guò)程實(shí)現(xiàn)更新數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了Python調(diào)用mysql存儲(chǔ)過(guò)程實(shí)現(xiàn)更新數(shù)據(jù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python裝飾器的定義和使用詳情

    Python裝飾器的定義和使用詳情

    這篇文章主要介紹了Python裝飾器的定義和使用詳情,裝飾器給已有函數(shù)增加額外的功能的函數(shù),本質(zhì)上是一個(gè)閉包函數(shù),下文更多相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • OpenCV圖像變換之傅里葉變換的一些應(yīng)用

    OpenCV圖像變換之傅里葉變換的一些應(yīng)用

    這篇文章主要給大家介紹了關(guān)于OpenCV圖像變換之傅里葉變換的相關(guān)資料,傅里葉變換可以將一幅圖片分解為正弦和余弦兩個(gè)分量,換而言之,他可以將一幅圖像從其空間域(spatial domain)轉(zhuǎn)換為頻域(frequency domain),需要的朋友可以參考下
    2021-07-07
  • Python編程pygame模塊實(shí)現(xiàn)移動(dòng)的小車示例代碼

    Python編程pygame模塊實(shí)現(xiàn)移動(dòng)的小車示例代碼

    這篇文章主要介紹了Python編程pygame模塊實(shí)現(xiàn)移動(dòng)的小車示例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python模塊、包(Package)概念與用法分析

    Python模塊、包(Package)概念與用法分析

    這篇文章主要介紹了Python模塊、包(Package)概念與用法,結(jié)合實(shí)例形式分析了Python中模塊、包(Package)概念、功能、相關(guān)使用技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-05-05
  • Python math庫(kù) ln(x)運(yùn)算的實(shí)現(xiàn)及原理

    Python math庫(kù) ln(x)運(yùn)算的實(shí)現(xiàn)及原理

    這篇文章主要介紹了Python math庫(kù) ln(x)運(yùn)算的實(shí)現(xiàn)及原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python列表切片用法示例

    Python列表切片用法示例

    這篇文章主要介紹了Python列表切片用法,結(jié)合實(shí)例形式分析了Python列表切片的常見(jiàn)操作方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • 使用Python快速生成chrome插件相關(guān)文件結(jié)構(gòu)

    使用Python快速生成chrome插件相關(guān)文件結(jié)構(gòu)

    本文主要介紹了如何使用Python編寫(xiě)一個(gè)程序,它允許用戶創(chuàng)建一些特定文件并將它們保存在指定的文件夾中,同時(shí)也能夠啟動(dòng)?Google?Chrome?瀏覽器并打開(kāi)擴(kuò)展頁(yè)面,感興趣的可以了解一下
    2024-11-11
  • 深入淺出分析Python裝飾器用法

    深入淺出分析Python裝飾器用法

    這篇文章主要介紹了Python裝飾器用法,結(jié)合實(shí)例形式對(duì)比分析了Python裝飾器的定義與使用技巧,需要的朋友可以參考下
    2017-07-07

最新評(píng)論