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

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

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

學習Python過程中,發(fā)現(xiàn)沒有switch-case,過去寫C習慣用Switch/Case語句,官方文檔說通過if-elif實現(xiàn)。所以不妨自己來實現(xiàn)Switch/Case功能。

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

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

方法一

通過字典實現(xiàn)

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

方法二

通過匿名函數(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)

方法三

通過定義類實現(xiàn)

參考Brian Beck通過類來實現(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)其實實現(xiàn)Switch Case需要被判斷的變量是可哈希的和可比較的,這與Python倡導的靈活性有沖突。在實現(xiàn)上,優(yōu)化不好做,可能到最后最差的情況匯編出來跟If Else組是一樣的。所以Python沒有支持。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

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

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

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

    Python通過調用mysql存儲過程實現(xiàn)更新數(shù)據(jù)功能示例

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

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

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

    OpenCV圖像變換之傅里葉變換的一些應用

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

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

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

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

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

    Python math庫 ln(x)運算的實現(xiàn)及原理

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

    Python列表切片用法示例

    這篇文章主要介紹了Python列表切片用法,結合實例形式分析了Python列表切片的常見操作方法及相關注意事項,需要的朋友可以參考下
    2017-04-04
  • 使用Python快速生成chrome插件相關文件結構

    使用Python快速生成chrome插件相關文件結構

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

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

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

最新評論