裝飾器 生成器 迭代器 類中析構方法

網絡傳輸的三要素:
    1,IP 2,端口號3,傳輸協議(TCP / UDP)  
    TCP:面向連接可靠交互數據以管道流形式傳輸可以傳輸大文件
    UDP:面向無連接不可靠交互數據是以數據包形式傳輸大小限於64KB以內只能傳輸小文件

?外鍵有什麼用,該是否外用外鍵鍵一定需要索引嗎
    使用外鍵的作用英文

                     1,保證數據的參照完整性(一致性)

                     2,避免不必要的冗(rong)餘,---->
 一般情況下:
        1,在大型系統中(性能要求不高,安全要求高),使用外鍵;在大型系統中(性能要求高,安全自己控制),不用外鍵;小系統隨便,最好用外鍵
        .2,不用外鍵而用程序控制數據一致性和完整性時,可以寫一層驗證層來保證,然後個個應用通過這個層來訪問數據庫
        .3,不一定使用索引

索引有什麼用,大致原理是什麼?設計索引有什麼注意點?
    在數據之外,數據庫系統還維護着滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣可以就這些在數據結構上實現高級查找算法這種數據結構,就是索引。
    爲表設置索引要付出代價的
        一是增加了數據庫的存儲空間,
        二是在插入和修改數據時要花費較多的時間(因爲索引也要隨之變動)

創建索引可以大大提高系統的性能。

        >>第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。

        >>第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。

        >>第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。
        
        >>第四,在使用分組和排序子句進行數據檢索時,同樣可以顯着減少查詢中分組和排序的時間。

        >>第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
    
需注意:

        >>第一,對於那些在查詢中很少使用或者參考的列不應該創建索引。這是因爲,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。
       
        >>第二,對於那些只有很少數據值的列也不應該增加索引。這是因爲,由於這些列的取值很少增加索引,並不能明顯加快檢索速度。

        >> 第三,對於那些定義爲text, image和bit數據類型的列不應該增加索引。這是因爲,這些列的數據量要麼相當大,要麼取值很少。

        >> 第四,當修改性能遠遠大於檢索性能時,不應該創建索引。這是因爲,修改性能和檢索性能是互相矛盾的.
數據量和性能

    當物理內存夠用的時候,redis>mongodb>mysql

is與== 的區別?

is 判斷的是地址值是否相等

== 判斷的是內容是否一致

地址值相等,內容肯定一致,但是內容一致,地址值不一定相等


關於變量的問題 : 

1, 函數內部可以使用外部變量,但是不能修改

2, 若修改需要使用global進行全局聲明

3, 當函數內部外部出現同名變量,默認使用的是內部變量

4, 內部函數使用外部函數局部變量,需要使用nonlocal進行聲明

數學函數math的應用: 

import math

math.e:自然對數 

math.pi:圓周率 

math.ceil:向上取整 

math.floor:向下取整 

math.sqrt:開方(請平方根) 

math.degrees:弧度轉換爲度 

math.radians:度轉換爲弧度 

匿 名 函 數 : 

函數可以像普通變量一樣進行賦值

函數可以作爲另一個函數的參數進行傳遞

裝 飾 器 : 

    作用 : 當我們想要增加原有函數的功能,但是不想(無法)改變原來的函數,可以通過裝飾器來實現. 示例:

python
  def zhuangshiqi(func):
      def wrapper():
          print('前面裝飾')
          func()
          print('後面裝飾')
      return wrapper

  @zhuangshiqi    # 等價於test = zhuangshiqi(test)
  def test():
      print('hello')

  test()

列表生成式 : 可以快速生成有特定規律的列表

lt = [i for i in range(1, 11)]

生成器: 將列表生成式中的[]改爲()即可生成器保存了生成數據的算法,並不是所有的數據

使用場景:
    。當數據量較大時,就會出現內存使用突然增大的情況爲了解決內存佔用突然增大的問題

    ☛  注意: 任意方式的使用生成器,都只能是單次的

    通過在函數中使用關鍵字yield完成,示例: 

def test(n):
    for i in range(1, n+1):
        yield i
t = test(5)
# 生成器對象
print(t)
# 一次一個獲取
# print(next(t))
# print(next(t))
# 轉換爲列表
print(list(t))

迭代器: 

            能夠使用換的進行遍歷,並且可以通過下一個函數依次獲取元素的對象

            生成器就是一種特殊的迭代器

可迭代對象: 能夠使用for-in進行遍歷的對象,都是可迭代對象

                    例如: 字符串,列表,元組,集合,字典等

說明: 迭代  器一定是可迭代對象

              將可迭代對象轉換爲迭代器,使用專門的函數iter

隨機數中__打亂元素順序的方法 :

import random
lt = [1,32,3,4,7,8,9,6,5]
random.shuffle(lt)
print(lt)

PIP的使用: 

pip -h/--help				# 查看幫助文檔
pip install 包名				# 安裝指定軟件包
pip install -r 文件			#安裝文件中指定包
pip uninstall 包名			# 卸載指定軟件包
pip list					# 列表顯示所有的安裝包
pip show 包名					# 顯示指定包的詳情
pip freeze                     #冷凍當前環境

class類中的分構方法: 當對象釋放時系統會自動調用,通常用於釋放資源

class Pig:
    # 析構方法:當對象釋放時,系統會自動調用
    # 若手動使用del刪除,則會立即調用該方法
    # 該方法一般做資源釋放處理:數據庫連接斷開,文件關閉
    def __del__(self):
        print('大師兄,我不行了')
        
bajie = Pig()
del bajie
print('八戒,一路走好!')  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章