二分查找以及單例模式

二分查找

一:

def fun(opt,lis,start = 0,end=len(lis)):
  m_lis = (end-1-start)/2+start
  if opt >lis[m_lis]:
    return fun(opt,lis,start = m_lis)
  elif opt <lis[m_lis]:
    return fun(opt,lis,start =0,end=m_lis+1)
  elif opt==lis[m_lis]:
    return m_lis
  else:
    return "sorry none"

 二:

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

def func(l,aim):
    mid = (len(l)-1)//2
    if l:
        if aim > l[mid]:
            func(l[mid+1:],aim)
        elif aim < l[mid]:
            func(l[:mid],aim)
        elif aim == l[mid]:
            print("bingo",mid)
    else:
        print('找不到')
func(l,66)
func(l,6)

三:

l1 = [1, 2, 4, 5, 7, 9]
def two_search(l,aim,start=0,end=None):
    end = len(l)-1 if end is None else end
    mid_index = (end - start) // 2 + start
    if end >= start:
        if aim > l[mid_index]:
            return two_search(l,aim,start=mid_index+1,end=end)

        elif aim < l[mid_index]:
            return two_search(l,aim,start=start,end=mid_index-1)

        elif aim == l[mid_index]:
            return mid_index
        else:
            return '沒有此值'
    else:
        return '沒有此值'
print(two_search(l1,9))

 

遞歸版本的二分查找:

 

 

單例模式

單例模式(Singleton Pattern)是一種經常使用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實例存在。當你但願在整個系統中,某個類只能出現一個實例時,單例對象就能派上用場。設計模式

好比,某個服務器程序的配置信息存放在一個文件中,客戶端經過一個 AppConfig 的類來讀取配置文件的信息。若是在程序運行期間,有不少地方都須要使用配置文件的內容,也就是說,不少地方都須要建立 AppConfig 對象的實例,這就致使系統中存在多個 AppConfig 的實例對象,而這樣會嚴重浪費內存資源,尤爲是在配置文件內容不少的狀況下。事實上,相似 AppConfig 這樣的類,咱們但願在程序運行期間只存在一個實例對象。服務器

在 Python 中,咱們能夠用多種方法來實現單例模式spa

單例模式 :對一個類是能實例化一個對象
class A:
    __instance = None
    def __new__(cls, *args, **kwargs):
        if A.__instance is None: # 第一次進入,知足這個條件
            obj = object.__new__(cls)  # 利用object 建立一個對象空間 給了obj
            A.__instance = obj  # 我將類的私有靜態字段 __instance 從新賦值了 對象空間obj
        return A.__instance
a1 = A()
b1 = A()
c1 = A()
print(a1,b1,c1)
獲得結果  對象地址都是同樣的
相關文章
相關標籤/搜索