Tips_one

二十九: MVC / MVT / MVP / MVVM

1. MVC -- Model Views Controller -- 模型層、模板層、視圖函數

2. MVT -- Model Views Templates -- 模型層、視圖函數、模板層

3. MVP -- Model Views Presenter -- 模型層、模板層、視圖函數(contrller/Presenter)

4. MVVM -- Model Views ViewsModel -- 模型層、模板層、視圖函數

  將views和狀態(tài)和抽象化,視圖UI和業(yè)務邏輯分開,viewsmodel可以取出 Model 的數據同時幫忙處
  理 View 中由于需要展示內容而涉及的業(yè)務邏輯。

二十六:數據庫刪除操作(謹慎使用):

    -- 刪除數據庫: drop database if exists 數據庫名;
    -- 刪除表:drop table 表名字 (完全刪除去掉整張表);
    -- 刪除表:delete from 表名 (刪除表里面的數據,一行一行的刪除,表明后面可以跟where 字段名= 值,
              刪除指定的某條或者多條記錄,該命令可以回滾)
    -- 刪除表:truncate table 表名稱 (刪除表中的數據,并且新增加記錄的計數標識會重置,
              比如主鍵id原來是50,用該命令刪除后,新增加的數據主鍵id會從1開始,而不是51開始)

   一般來說:執(zhí)行速度-->drop>truncate>delete
   使用foreign key約束的表,不能用truncate,應使用不帶where的delete

二十 : 操作系統(tǒng)的五大管理功能 :

1.設備管路:主要是負責內核與外圍設備的數據交互,實質是對硬件設備的管理,包括對輸出輸入設備的分配,初始化,維護與回收等,比如管理音頻的輸入輸出;
2.作業(yè)管理:這部分功能主要是負責人機交互,圖形界面或者系統(tǒng)任務的管理;
3.文件管理:這部分功能設計文件的邏輯組織和物理知識,目錄結構和管理等;
4.進程管理:說明一個進程存在的唯一標志是pcd(進程控制塊),負責維護進程的信息和狀態(tài);
5.存儲管理:數據的存儲方式和組織結構。

十八 : SQL注入攻擊

--> 用戶在客戶端輸入特定的字符串提交服務器,在服務器執(zhí)行sql語句時,將用戶輸入的特定字符串誤以為是sql語句并且執(zhí)行語句

如何防御sql注入攻擊:

1.項目上線時,將網頁錯誤提示返回信息關閉,或者重寫(python中配置:debug=False),這種方法只是簡單的掩蓋代碼缺陷,并不能防御;
2.檢查變量數據類型和格式;
3.過過濾字符串;
4.綁定變量,使用預編譯語句;
5.數據庫信息加密;
6.使用數據庫存儲過程;

十四: python容器類型(即數據類型)

1. 列表(list) -- 可變,有序 -- 中括號[]

      a.獲取元素 -  通過下標獲取元素
      b.增刪改
         增 : append ,insert , extend
         刪除:remove , del ,pop ,clear
         改 : 列表[下標] =  新值
      c. 相關運算 :+ ,* ,in /not in ,len() ,list() ,max() ,min()

列表1.append(a) 和列表1.extend(a)的區(qū)別:

      append: 添加對象到列表1(將添加的對象作為列表1的一個元素)
      extend: 添加元素到列表1(將添加的對象中的元素添加到列表1)
                a =  [1,2,3,4]      
                b =  [5,6,7,8]
                a.append(b)   # a: [1,2,3,4,[5,6,7,8]]
                a =  [1,2,3,4] 
                a.extend(b)  # a: [1,2,3,4,5,6,7,8]         

將[[1,2],[3,4],[5,6]]一行代碼展開該列表,得出[1,2,3,4,5,6]

        a= [[1, 2], [3, 4], [5, 6]]
        b= [j for i in a for j in i]

2. 元祖(tuple) -- 不可變,有序 -- 小括號()

         注意: 當元祖只有一個元素時,要加逗號
               a = (1)  ---   a變量類型是int類型
               b = (1,)  ---  b變量類型是tuple類型

          獲取元素 -  通過下標獲取元素
                      變量1,變量2 = (元素1,元素2)
                      變量1,*變量2 = (元素1,元素2,元素3......)
          相關運算 :+ ,* ,in /not in ,len() ,tuple() ,max() ,min()

3. 字典 (dict) -- 可變,有序 -- 大括號{}

           a.獲取元素  -- 通過鍵獲取元素
           b.增刪改
           增  : 字典[key] = 值 , 字典1.update(字典2), 字典1.setdefault(key,值)
           刪  :  del  字典[key],字典.pop(key) ,clear
           改  :字典[key]  = 值
           c. 相關運算 :in /not in ,len() ,dict() ,
                  max() : 取的是字典的key的最小值 ,key類型需要一樣
                  min() :取的是字典的key的最小值 ,key類型需要一樣

4. 集合 (set) -- 可變、無序 --大括號{}

          a. 查--獲取集合元素 : 不能單獨獲取某個元素,只能遍歷
          b. 增 (添加元素): 集合.add(元素) --  將制定元素添加到集合中
                          集合.update(序列) --  將序列中的元素添加到集合中(序列中的元素必須是不可變的)
          c. 刪 (刪除元素):  集合.remove(元素)   --  刪除集合中指定的元素
          d.   in / not in  ,max ,min, len ,set
          e.數學運算:包含(>=,<=),并集(|),交集(&),補集(^),差集(-)

5. 字符串(str)-- 不可變、 有序--兩個單引號''或者雙引號

      a.獲取元素  -- 通過下標獲取元素
      b. 字符串切片:字符串1[:] 
      c. 相關運算 :+ ,* ,in /not in ,len() ,str() ,max() ,min()
      d.轉義字符:\n,\t,\',\
      e.阻止轉義:r/R

八: 閉包問題 (變量作用域)

1. python屬性查找規(guī)則:LEGB

    1. (Local)局部作用域,每當調用一個函數的時候就創(chuàng)建了一個局部作用域,它最先被搜索。 
    2. (Enclosing)嵌套的父級函數的局部作用域 
    3. (global)全局作用域 
    4. (built-in)內建作用域,這個是內建函數和類的作用域。

2. 實列:

    1)   def func(x):
            a = []
            for i in range(5):
                a.append(i*x)
            return a
         b = func(2)
         print(b)
   

    輸出結果為:[0, 2, 4, 6, 8]

  2)
    def func():
       return [lambda x : i * x for i in range(4)]
    
    print([m(2) for m in func()])
    
    輸出結果為: [6, 6, 6, 6]
    如果想得到[0,2,4,6]可以用生成器或者創(chuàng)建閉包或者偏函數

    生成器
    def multipliers():
          for i in range(4): yield lambda x : i * x
    print([m(2) for m in multipliers()])

    將閉包作用域變?yōu)榫植孔饔糜?    def multipliers():
          return [lambda x,i=i : i * x for i in range(4)]
    print([m(2) for m in multipliers()])

    偏函數
    from functools import partial
    from operator import mul
    
    def multipliers():
      return [partial(mul, i) for i in range(4)]
    print([m(2) for m in multipliers()])

七: 映射(map()) -- 歸納(reduce()) -- 過濾(filter()) --

解析式生成可迭代對象:列表解析式,元祖解析式,字典解析式等(任何可迭代對象)

1) map(函數,可迭代序列對象) -- 對可迭代對象的每個元素執(zhí)行函數,返回一個序列對象(需要指定保存類型則:list(map())) <--> (數據處理)

2) reduce(函數,可迭代對象) -- 通常map和reduce都是在列表里結合使用,map對數據進行一一映射處理,reduce對數據進行整合計算 <-->(數據整合)

3) filter(函數,可迭代對象) --  將可迭代對象的元素中滿足函數的保留下來,不滿足的剔除掉 <-->(數據篩選)

4) 解析式是python生成列表的一種高效方式(也可以生成其他類型,通常生成list) : 列表解析式 -- [ function for item in iterable] 

   比如 : [ x * x for x in range(1,5)]
          [ num * num for num in range(-8,5) if num < 0]

字典解析式:
# Taken from page 70 chapter 3 of Fluent Python by Luciano Ramalho

DIAL_CODES = [
    (86, 'China'),
    (91, 'India'),
    (1, 'United States'),
    (62, 'Indonesia'),
    (55, 'Brazil'),
    (92, 'Pakistan'),
    (880, 'Bangladesh'),
    (234, 'Nigeria'),
    (7, 'Russia'),
    (81, 'Japan'),
    ]

>>> country_code = {country: code for code, country in DIAL_CODES}
>>> country_code
{'Brazil': 55, 'Indonesia': 62, 'Pakistan': 92, 'Russia': 7, 'China': 86, 'United States': 1, 'Japan': 81, 'India': 91, 'Nigeria': 234, 'Bangladesh': 880}
>>> {code: country.upper() for country, code in country_code.items() if code < 66}
{1: 'UNITED STATES', 7: 'RUSSIA', 62: 'INDONESIA', 55: 'BRAZIL'}

集合解析式:

# taken from page 87, chapter 3 of Fluent Python by Luciano Ramalho

>>> from unicodedata import name
>>> {chr(i) for i in range(32, 256) if 'SIGN' in name(chr(i), '')}
{'×', '¥', '°', '£', '', '#', '?', '%', 'μ', '>', '¤', '±', '?', '§', '<', '=', '', '$', '÷', '¢', '+'}

五: 字符串格式化-- format函數 (菜鳥教程)

功能: a.代替占位符: f'{a}任意字符' -- 等同于--> '%s任意字符%s' %(a,b)
b.格式化字符串:'{a}'.format(a='內容',b='內容')

實列:

1.傳入參數:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
print("網站名:{name}, 地址 {url}".format(name="菜鳥教程", url="www.runoob.com"))
 
# 通過字典設置參數
site = {"name": "菜鳥教程", "url": "www.runoob.com"}
print("網站名:{name}, 地址 {url}".format(**site))
 
# 通過列表索引設置參數
my_list = ['菜鳥教程', 'www.runoob.com']
print("網站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必須的

2.傳入對象
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class AssignValue(object):
    def __init__(self, value):
        self.value = value
my_value = AssignValue(6)
print('value 為: {0.value}'.format(my_value))  # "0" 是可選的
3.格式化數字:
>>> print("{:.2f}".format(3.1415926));
3.14

三: 裝飾器:一個閉包,把一個函數當做參數返回 一個替代版的函數,本質上就是一個返回函數的函數 (被裝飾的函數名會變成裝飾器的名字,不在是原來的名字)

    裝飾器的三個要素():
     
    1. 外層函數嵌套內層函數
    2. 外層函數返回內層函數
    3. 內層函數調用外層函數參數
    
    #  對要裝飾的函數添加新的代碼
    def outer(func):
        def inner(*args, **kwargs):
                # 需要裝飾的代碼(在func基礎上添加的新代碼)
                return func(*args, **kwargs)
        return inner

二: 偏函數:把一個函數的某些參數固定住(設默認值),返回一個新的函數

列子:

int('234') -- 將'234'字符串變成int類型 --int('234', base=10)將字符串引號去掉后,當成10進制的數,然后轉換成10進制數返回
int('1010',base=2) -- 將字符串去掉引號后當成一個2進制數來算,轉成10進制數返回

自定義偏函數:

導入偏函數模塊:from functools import partial
int2 = partial(int, base=2)
int2就是一個偏函數 
   -- int2('101011')--將101011當2進制,轉換成10進制數
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容