初始化self|初始化this|html
__init__.py
的文件,這個文件是必須存在的,不然,Python就把這個目錄當成普通目錄,而不是一個包。在計算機編程中,自省是指這種能力:檢查某些事物以肯定它是什麼、它知道什麼以及它能作什麼。自省向程序員提供了極大的靈活性和控制力。java
dir([obj]):
調用這個方法將返回包含obj大多數屬性名的列表(會有一些特殊的屬性不包含在內)。obj的默認值是當前的模塊對象。python
**七大設計原則:**
1. 單一職責原則:一個類負責一項職責。
2. 里氏替換職責:繼承與派生的規則。(子類可替換父類)
3. 依賴倒轉原則:高層模塊不該該依賴底層模塊,兩者都應該依賴其抽象;抽象不該該依賴細節;細節應該依賴抽象。即針對接口編程,不要針對實現編程。
4. 接口隔離原則:創建單一接口,不要創建龐大臃腫的接口,儘可能細化接口,接口中的方法儘可能少。
5. 迪米特法則:高內聚,低耦合。
6. 開閉原則:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。
7. 組合/聚合複用原則:儘可能使用組合和聚合,少使用繼承的關係來達到複用的原則。mysql
**24種設計模式:**
**1、建立型模式**
1. 抽象工廠模式:提供一個接口,用於建立相關或依賴對象的家族,而不須要指定具體類。
2. 生成器模式:使用生成器模式封裝一個產品的構造過程,並容許按步驟構造。將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。
3. 工廠模式:定義了一個建立對象的接口,但由子類決定要實例化的類是哪個。工廠方法讓類把實例化推遲到子類。
4. 原型模式:當建立給定類的實例過程很昂貴或很複雜時,就使用原形模式。
5. 單例了模式:確保一個類只有一個實例,並提供全局訪問點。
6. 多例模式:在一個解決方案中結合兩個或多個模式,以解決通常或重複發生的問題。
**2、結構型模式**
1. 適配器模式:將一個類的接口,轉換成客戶指望的另外一個接口。適配器讓本來接口不兼容的類能夠合做無間。對象適配器使用組合,類適配器使用多重繼承。
2. 橋接模式:使用橋接模式經過將實現和抽象放在兩個不一樣的類層次中而使它們能夠獨立改變。
3. 組合模式:容許你將對象組合成樹形結構來表現「總體/部分」層次結構。組合能讓客戶以一致的方式處理個別對象以及對象組合。
4. 裝飾者模式:動態地將責任附加到對象上,若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。
5. 外觀模式:提供了一個統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。
6. 亨元模式:如想讓某個類的一個實例能用來提供許多」虛擬實例」,就使用蠅量模式。
7. 代理模式:爲另外一個對象提供一個替身或佔位符以控制對這個對象的訪問。
**3、行爲型模式**
1. 責任鏈模式:經過責任鏈模式,你能夠爲某個請求建立一個對象鏈。每一個對象依序檢查此請求並對其進行處理或者將它傳給鏈中的下一個對象。
2. 命令模式:將」請求」封閉成對象,以便使用不一樣的請求,隊列或者日誌來參數化其餘對象。命令模式也支持可撤銷的操做。
3. 解釋器模式:使用解釋器模式爲語言建立解釋器。
4. 迭代器模式:提供一種方法順序訪問一個聚合對象中的各個元素,而又不暴露其內部的表示。
5. 中介者模式:使用中介者模式來集中相關對象之間複雜的溝通和控制方式。
6. 備忘錄模式:當你須要讓對象返回以前的狀態時(例如, 你的用戶請求」撤銷」),你使用備忘錄模式.
7. 觀察者模式:在對象之間定義一對多的依賴, 這樣一來, 當一個對象改變狀態,依賴它的對象都會收到通知,並自動更新。
8. 狀態模式:容許對象在內部狀態改變時改變它的行爲,對象看起來好象改了它的類。
9. 策略模式:定義了算法族,分別封閉起來,讓它們之間能夠互相替換,此模式讓算法的變化獨立於使用算法的客戶。
10. 模板方法模式: 在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類能夠在不改變算法結構的狀況下,從新定義算法中的某些步驟。
11. 訪問者模式:當你想要爲一個對象的組合增長新的能力,且封裝並不重要時,就使用訪問者模式。linux
**pickle模塊:**對於大多數應用程序來說,dump()和load()函數的使用就是你使用pickle模塊的所有了。
+ dumps(object)和dump(object):序列化。
+ loads(bytes)和load(bytes):反序列化。
二者不一樣的是:dump()和load()是(反)序列化關於二進制文件中,dumps()和loads()是關於反序列化對象。程序員
**json模塊:**
+ json.dumps()從字典(可序列化json的對象)轉換爲json格式數據。
+ json.loads()從json到字典。
+ json.dump()和json.load()是file文件中使用的。
+ default:把任意一個對象變成一個可序列化爲JSON的對象
+ intent:格式化規範點面試
**開頭單下劃線:**誤認爲它表示該方法或屬性是該類型的私有方法或屬性。但其實在Python中不存在真正意義上的私有方法或者屬性,、算法
前面加單下劃線「_」只是表示你不該該去訪問這個方法或者屬性,由於它不是API的一部分。單下劃線「_」開始的成員變量叫保護變量,意思是隻有類對象和子類對象能訪問到這些變量。sql
#coding=utf-8 import threading from time import sleep, ctime class MyThread(threading.Thread): def __init__(self,func,args,name=''): threading.Thread.__init__(self) self.name=name self.func=func self.args=args def run(self): apply(self.func,self.args) def super_play(file,time): for i in range(2): print 'Start playing: %s! %s' %(file,ctime()) sleep(time) list = {'愛情買賣.mp3':3,'阿凡達.mp4':5} #建立線程 threads = [] files = range(len(list)) for k,v in list.items(): t = MyThread(super_play,(k,v),super_play.__name__) threads.append(t) if __name__ == '__main__': #啓動線程 for i in files: threads[i].start() for i in files: threads[i].join() #主線程 print 'end:%s' %ctime()
一、使用4個空格而不是tab鍵進行縮進。 二、每行長度不能超過80 三、使用空行來間隔函數和類,以及函數內部的大塊代碼 四、必要時候,在每一行下寫註釋 五、使用文檔註釋,寫出函數註釋 六、在操做符和逗號以後使用空格,可是不要在括號內部使用 七、命名類和函數的時候使用一致的方式,好比使用CamelCase來命名類,使用lower_case_with_underscores來命名函數和方法 八、在類中老是使用self來做爲默認 九、儘可能不要使用魔法方法 十、默認使用UTF-8,甚至ASCII做爲編碼方式 十一、換行可使用反斜槓,最好使用圓括號 十二、不要在一句import中多個庫 空格的使用: 各類右括號前不要加空格 逗號、冒號前不要加空格 函數的左括號前不要加空格。如Func(1) 序列的左括號前不要加空格。如list[2] 操做符左右各加一個空格,不要爲了對齊增長空格 函數默認參數使用的賦值符左右省略空格 不要將多句語句寫在同一行 if/for/while語句中,即便執行語句只有一句,也必須另起一行 包名小寫(不含下劃線),函數名小寫(可含下劃線),常量名大寫(可含下劃線),類名駝峯寫法,類屬性小寫(可含下劃線)。
import this Beautiful is better than ugly. # 優美勝於醜陋(Python以編寫優美的代碼爲目標) Explicit is better than implicit. # 明瞭勝於晦澀(優美的代碼應當是明瞭的,命名規範,風格類似) Simple is better than complex. # 簡潔勝於複雜(優美的代碼應當是簡潔的,不要有複雜的內部實現) Complex is better than complicated. # 複雜勝於凌亂(若是複雜不可避免,那代碼間也不能有難懂的關係,要保持接口簡潔) Flat is better than nested. # 扁平勝於嵌套(優美的代碼應當是扁平的,不能有太多的嵌套) Sparse is better than dense. # 間隔勝於緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題) Readability counts. # 可讀性很重要(優美的代碼是可讀的) Special cases aren't special enough to break the rules. Although practicality beats purity. # 即使假借特例的實用性之名,也不可違背這些規則(這些規則至高無上) Errors should never pass silently. Unless explicitly silenced. # 不要包容全部錯誤,除非你肯定須要這樣作(精準地捕獲異常,不寫except:pass風格的代碼) In the face of ambiguity, refuse the temptation to guess. # 當存在多種可能,不要嘗試去猜想 There should be one-- and preferably only one --obvious way to do it. # 而是儘可能找一種,最好是惟一一種明顯的解決方案(若是不肯定,就用窮舉法) Although that way may not be obvious at first unless you're Dutch. # 雖然這並不容易,由於你不是 Python 之父(這裏的Dutch是指Guido) Now is better than never. Although never is often better than *right* now. # 作也許好過不作,但不假思索就動手還不如不作(動手以前要細思量) If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. # 若是你沒法向人描述你的方案,那確定不是一個好方案;反之亦然(方案測評標準) Namespaces are one honking great idea -- let's do more of those! # 命名空間是一種絕妙的理念,咱們應當多加利用(倡導與號召)
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
Django中的中間鍵,能夠本身定義中間件,定義的中間鍵要註冊。
LINUX中進程的最大理論數計算:
每一個進程的局部段描述表LDT都做爲一個獨立的段而存在,在全局段描述表GDT中要有一個表項指向這個段的起始地址,並說明該段的長度以及其餘一些 參數。除上以外,每一個進程還有一個TSS結構(任務狀態段)也是同樣。因此,每一個進程都要在全局段描述表GDT中佔據兩個表項。那麼,GDT的容量有多大 呢?段寄存器中用做GDT表下標的位段寬度是13位,因此GDT中能夠有8192個描述項。除一些系統的開銷(例如GDT中的第2項和第3項分別用於內核 的代碼段和數據段,第4項和第5項永遠用於當前進程的代碼段和數據段,第1項永遠是0,等等)之外,尚有8180個表項可供使用,因此理論上系統中最大的 進程數量是4090。
編輯 /etc/resolv.conf 因而編輯 /etc/resolv.conf 添加了兩行(DNS地址是諮詢了服務器運營商得知的) nameserver 202.96.209.133 nameserver 61.129.88.123 再執行service network restart重啓網絡服務便可
crond 是linux用來按期執行程序的命令。當安裝完成操做系統以後,默認便會啓動此任務調度命令。crond命令每分鍾會按期檢查是否有要執行的工做,若是有要執行的工做便會自動執行該工做。能夠用如下的方法啓動、關閉這個服務: /sbin/service crond start //啓動服務 /sbin/service crond stop //關閉服務 /sbin/service crond restart //重啓服務 /sbin/service crond reload //從新載入配置
Linux中能夠用chmod修改文件的權限 Linux中每一個文件都都有全部者、全部組、其餘組。 Linux中的rwx也能夠用數字表示 r=4 w=2 x=1 7=4+2+1及將rwx權限賦予全部者、組、其餘用戶
匿名管道的的特性:
【n<space>】光標向右移動n個字符
【Home】移動到這一行的最前面字符處:0數字,但不能用數字小鍵盤上的數字
【End】 移動到這一行的最後面字符處:$,我測試好像不行
【w】光標跳到下個字的開頭
【e】光標跳到下個字的字尾
【H】 光標移動到這個屏幕的最上方那一行的第一個字符
【M】 光標移動到這個屏幕的中間那一行的第一個字符
【L】光標移動到這個屏幕的最下方那一行的第一個字符
【G】 移動到這個文件的最後一行
【nG】移動到這個文件的第n行(可配合:set nu)
【gg】 移動到這個文件的第一行,至關於1G
【n<Enter>】光標向下移動n行
刪除、複製與粘貼
【x】 爲向後刪除一個字符 (至關於【del】鍵)
【X】 爲向前刪除一個字符(至關於【backspace】鍵)
【nx】 連續向後刪除n個字符
【dd】 刪除光標所在行
【ndd】 刪除光標所在的向下n行
【d1G】 刪除光標所在行到第一行的全部數據
【dG】 刪除光標所在到最後一行的全部數據
【d$】 刪除光標所在處,到該行的最後一個字符
【d0】 刪除光標所在處,到該行的最前一個字符
【yy】 複製光標所在的那一行
【nyy】 複製光標所在的向下n列
【y1G】 複製光標所在行到第一行的全部數據
【yG】 複製光標所在行到最後一行的全部數據
【y0】 複製光標所在的那個字符到該行行首的全部數據
【y$】 複製光標所在的那個字符到該行行尾的全部數據
【p】將已複製的數據在光標下一行粘貼上
【P】 則爲貼在光標的上一行
【u】 恢復前一個操做
【Ctrl+r】重作上一個操做
【.】 是重複前一個操做
mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
這樣就建立了一個名爲:test 密碼爲:1234 的用戶。
注意:此處的"localhost",是指該用戶只能在本地登陸,不能在另一臺機器上遠程登陸。若是想遠程登陸的話,將"localhost"改成"%",表示在任何一臺電腦上均可以登陸。也能夠指定某臺機器能夠遠程登陸。
mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
這樣就建立了一個名爲:test 密碼爲:1234 的用戶。
注意:此處的"localhost",是指該用戶只能在本地登陸,不能在另一臺機器上遠程登陸。若是想遠程登陸的話,將"localhost"改成"%",表示在任何一臺電腦上均可以登陸。也能夠指定某臺機器能夠遠程登陸。
爲用戶受權
受權格式:grant 權限 on 數據庫.* to 用戶名@登陸主機 identified by "密碼";
2.1 登陸MYSQL(有ROOT權限),這裏以ROOT身份登陸:
@>mysql -u root -p
@>密碼
2.2 首先爲用戶建立一個數據庫(testDB):
mysql>create database testDB;
2.3 受權test用戶擁有testDB數據庫的全部權限(某個數據庫的全部權限):
mysql>grant all privileges on testDB.* to test@localhost identified by '1234';
mysql>flush privileges;//刷新系統權限表
格式:grant 權限 on 數據庫.* to 用戶名@登陸主機 identified by "密碼";
2.4 若是想指定部分權限給一用戶,能夠這樣來寫:
mysql>grant select,update on testDB.* to test@localhost identified by '1234';
mysql>flush privileges; //刷新系統權限表
2.5 受權test用戶擁有全部數據庫的某些權限:
mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";
//test用戶對全部數據庫都有select,delete,update,create,drop 權限。
//@"%" 表示對全部非本地主機受權,不包括localhost。(localhost地址設爲127.0.0.1,若是設爲真實的本地地址,不知道是否能夠,沒有驗證。)
//對localhost受權:加上一句grant all privileges on testDB.* to test@localhost identified by '1234';便可。
刪除用戶
@>mysql -u root -p
@>密碼
mysql>Delete FROM user Where User='test' and Host='localhost';
mysql>flush privileges;
mysql>drop database testDB; //刪除用戶的數據庫
刪除帳戶及權限:>drop user 用戶名@'%';
>drop user 用戶名@ localhost;
修改指定用戶密碼
@>mysql -u root -p
@>密碼
mysql>update mysql.user set password=password('新密碼') where User="test" and Host="localhost";
mysql>flush privileges;
與分組相關的聚合函數
count() 返回某個字段的值的行數
max() 求最大某字段最大的值
min() 求某字段最小值
avg() 返回某字段平均值
sum() 求某字段總數
group_concat() 將分組的結果拼接成字符串
列出全部數據庫
mysql>show database;
切換數據庫
mysql>use '數據庫名';
列出全部表
mysql>show tables;
顯示數據表結構
mysql>describe 表名;
刪除數據庫和數據表
mysql>drop database 數據庫名;
mysql>drop table 數據表名;
規則:
①出如今SELECT子句中的單獨的列,必須出如今GROUP BY子句中做爲分組列
②分組列能夠不出如今SELECT子句中
③分組列可出如今SELECT子句中的一個複合表達式中
④若是GROUP BY後面是一個複合表達式,那麼在SELECT子句中,它必須總體做爲一個表達式的一部分才能使用。