python概念英文版_python重要概念
1.python2和python3的區別
python3中的bytes,就是python2中的字符串
python3中的字符串就是Python2的unicode
print在Python2中是一個聲明但是在python3中卻是一個函數
Python2的raw_input和python3的input一樣
python3中斜杠表示真除Python2有小數點表示真除
range/和xrange
在 Python 3 中,range() 是像 xrange() 那樣實現以至于一個專門的 xrange() 函數都不再存在(在 Python 3 中xrange() 會拋出命名異常)。
在 Python 2 中 xrange() 創建迭代對象的用法是非常流行的。比如: for 循環或者是列表/集合/字典推導式。
這個表現十分像生成器(比如。“惰性求值”)。但是這個 xrange-iterable 是無窮的,意味著你可以無限遍歷。
由于它的惰性求值,如果你不得僅僅不遍歷它一次,xrange() 函數 比 range() 更快(比如 for 循環)。盡管如此,對比迭代一次,不建議你重復迭代多次,因為生成器每次都從頭開始。
2.中間件
中間件一般做認證或者是批量導入的請求,django中間件其實就是一個類,在請求結束后,Django會根據自己的規則在合適的時機執行中間件中相應的方法.
如請求過來執行process_request,process_view,process_response
用到中間件的地方:權限認證,登錄認證,cors,session,緩存
3.django,tornado,flask各自的優勢
django:django框架的特點是簡便.開發迅速,并遵循MvC的設計(輸入,處理,輸出)django有許多的第三方插件(time.os.json,threading)django還有很強的擴展性.
tornado:它是非阻塞服務器這讓它的運行速度相當快,得力于其非阻塞的方式和對epll的運用,filter,缺點沒有session,需要自己定制
flask:微型的web框架,自由.簡單靈活入門簡單即便沒有多少web開發的經驗,也能夠很快的做出網站,非常適用與web服務的api.
組件:WTFrom/SQlachemy/sessionn/admin/
4.Django怎樣么實現并發
nginx+uwsig為django提供高并發,nginx的并發能力超過單臺并發能力,在純凈的web服務中更是突出其優越的地方,由于底層使用的是epoll異步io模型進行處理的
5.tornmodo的ioloop知道是什么嗎?
事件循環
6.select_relact,和prefetch_related,q和f
select_relact:一對多使用,查詢主動做連表
prefetch_relact:多對多或者一對多的時候使用,不做連表,做多次查詢
q:用于構造復雜的查詢條件
f:更新時用于獲取原來的值,專門取對象中的某一列進行操作
7.什么是ORM
orm即(object-Relatioal mapping)對象關系映射,它的作用是在關系型數據庫和業務實體對象之間做一個映射
orm優點
優點擺脫復雜的sql操作,適應快速開發,讓數據庫結果變得簡單,數據庫遷移成本低
orm缺點
性能比較差,不適用于大型應用,復雜的sql語句操作還是需要sql語句來完成
8.CORS跨域資源共享
首先會發送"預檢"opption",請求,如果"預檢"成功,則發送真實數據
9.django的form有什么功能?
生成html標簽,驗證用戶is_valid,html form提交保留上次提交數據,初始化頁面顯示內容
10.CBV和FBV
cbv在指定的類上面加上裝飾器或在這個方法上面添加裝飾器@method_decorator,并繼承view
11.cookie以及session
cookie
cookie是保留在客戶端上面的一組鍵值對,cookie不是很安全,別人可以分析存在本地的cookie,cookie還有字節的限制
session
session是保存在服務器上的一組鍵值對,依賴cookie安全指數比cookie高沒有字節的限制
12.django的請求生命周期
請求來了先到uwsgi,把請求做一部分封給django框架,然后經過所有的中間件,路由,視圖,視圖處理再返回給中間件,中間件在返回給uwsgi在返還給用戶
13.uwsgi和wsgi
wsgi:是web服務器網光接口,是python應用程序或框架和web服務器之間的接口,其廣泛使用django框架
uwsgi:是一個web服務器,它實現了wagi協議,nginx中httpUwsgiModule的作用是與Uwsgi服務器進行交換
14.Django-debug-toolbar的使用
使用django開發站點時,可以使用django-debug-toolbar來進行調試,在setting.py中添加debug-toolbar.midleware到項目的MiDDLEWARE_CLASSE內
15.python__new__,init的區別
__new__是一個靜態方法,__init__是一個實例方法
__new__返回一個創建的實例,__init__什么都不返回
__new__返回一個cls的實例后面的__init__才能被調用
當創建一個新實例時調用__new__,初始化一個實例的時候調用__init__
16.深淺拷貝
淺拷貝只是增加了一個指針指向一個存在的地址,而深拷貝是增加一個指針并開辟一塊新的內存,這個增加了指針指向這個新的內存
采用淺拷貝的情況,釋放內存,會釋放同一塊內存,深拷貝不會出現釋放同一內存的錯誤
簡單的說就是淺拷貝就是增加標簽,深拷貝就是復制一份新的出來
li=[[1,2],[2,3],[3,4]]
new_l1=copy.copy(li)
new_l2=copy.deepcopy(li)
li[2][0]=l1
print(new_l1) #:[1,2],[2,3],[11,4]
print(new_l2) #:[1,2],[2,3],[3,4]
17.http/ip相關協議分別位于那一層
http是超文本傳輸協議,http是基于tcp/ip通信協議進行傳遞數據 http協議工作在
c/s架構上,瀏覽器作為http的客戶端通過url向web服務器發送請求,web舞武器接到所有的請求后,向客戶端發送相應信息。http的特點是:短連接無狀態
地址欄輸入url按下回車后經歷了什么?
1瀏覽器向dns服務器請求解析該url中的域名所對應的IP地址
2解析出ip后,根據ip地址和默認端口80和服務器建立tcp連接
3瀏覽器發出的讀取文件的http請求,該請求報文作為tcp三次握手的第三個報文的數據的時候發送給服務器
4服務器對瀏覽器請求做出響應,并把對應的html文件發送給瀏覽器
5釋放tcp連接
6瀏覽器將該html渲染并指出內容·
18.TCP/UDP區別
tcp協議是面向連接,保證可靠性(數據沒有丟失,數據無序,數據無錯誤,數據無重復達到)傳輸層協議
udp協議數據容易丟失,安全性不是很高
19.webscoket
websocket是基于http協議的可持續化連接
輪詢:瀏覽器每個幾秒鐘就發送一次請求,詢問服務器是否有新消息
長輪詢:客戶端發起連接后如果沒有消息,就一直不返回response給客戶端,直到消息返回,返回完后,客戶端再次發起連接.
20.Rabbitmq:
服務器端有Erlang語言來編寫,支持多種客戶端,只會ajax,用于分布式系統中存儲轉發消息,在易用性、擴展性、高可用性的方面不俗。
connection是RabbitMQ的socket連接,它封裝了socket部分相關協議邏輯
connectionFactroy為connection的制造工廠
channel是我們與RabbitMQ打交道的最重要的一個接口,大部分的業務操作是在chaanel這個接口中完成,包括定義Queue、定義Exchange、
綁定Queue與Exchange,發布消息等
21.裝飾器
調用裝飾器其實是閉包函數,為其他函數添加附加的功能,不能修改源代碼和不修改被修飾的方式,裝飾器的返回值是一個函數對象
比如插入日志,性能測試,事物處理,緩存權限驗證,有了裝飾器就可以抽離出大量與函數功能本身無關的雷同代碼并繼續重用
def outher(func):
def good(*args,**kwargs):
ret=func(*args,**kwargs)
return ret
return good
@outher
def bar():
print('狗241131313')
bar()
22.閉包
必須有內嵌函數
內嵌函數必須引用外部函數的變量(該函數包含對外作用域而不是全局作用域名字的引用)
外部函數的返回值必須是內嵌函數
def hei():
x=20
def inner():
'''閉包函數'''
print(x)
return inner()
23.迭代器和生成器
迭代可迭代對象對應iter(方法)和迭代器對應next(方法)的一個過程
生成器:包括含有yield這個關鍵字,生成器也是迭代器,調動next把函數變成迭代器。
24.classmethod,statIcmethod,Property
類方法:將類的函數轉換成類方法,函數上裝飾@classmethod會將函數的自動傳值參數改成cls
靜態方法:此方法相當于給類擴展一個功能,將類內的函數實例化,給類或對象使用,此時類內的函數就是普通函數,不管是類還是實例化的對象都可以使用
實例化:類的實例化就會產生一個實例(對象),可以理解為類()把虛擬的東西實例化,得到具體存在的值
25.常用狀態碼
200--服務器成功返回網頁
204--請求收到,但返回信息為空
304--客戶端已經執行了GET,但文件未變化
400--錯誤請求,如語法錯誤
403--無權限訪問
404--請求的頁面不存在
500--服務器產生內部錯誤
26.多線程,多進程,協程,GIL
GIL:全局解釋器鎖,是鎖在cpython解釋器上,導致同一時刻,同一進程只能有一個線程被執行
多進程:多進程模塊multiprocessing來實現,cpu密集型,Io計算型可以用多進程
多線程:多進程模塊threading來實現,Io密集型,多線程可以提高效率
協程:簡單說協程就是進程和線程的升級版,進程和線程都面臨內核態和用戶態的切換問題而耗費許多時間,而協程就是用戶自己控制切換的時機,不在需要陷入系統的內核態python里面yield就是協程的思想(有greenlet,gevent)
進程:是資源管理單位,進程是相互獨立的,實現并行和并發
線程:是最小的執行單位,線程的出現減少了上下文切換的消耗,提供系統的并發性
27.io多路復用/異步非阻塞
IO多路復用:通過一種機制,可以監聽多個描述符 select/poll/epoll
select:連接數受限,查找配對速度慢,數據由內核拷貝到用戶態
poll:改善了連接數,但是還是查找配對速度慢,數據由內核拷貝到用戶態
epoll:epoll是linux下多路復用IO接口,是select/poll的增強版,它能顯著提高程 序在大量并發連接中只有少量活躍的情況下的系統CPU利用率
異步非阻塞:異步體現在回調上,回調就是有消息返回時告知一聲兒進程進行處理。非阻塞就是不等待,不需要進程等待下去, 繼續執行其他操作,不管其他進程的狀態。
28.with上下文機制原理
enter和exit,上下文管理協議,即with語句,為了讓一個對象兼容with語句,必須在這個類中聲明enter和exit方法
使用with語句的目的就是把代碼塊放入with中執行,with結束后,自動完成清理工作,無須收到干預
29.經典類和新式類
經典類遵循:深度優先,python2中
新式類遵循:廣度優先,Python3中
30.有沒有一個工具可以幫助查找Python的bug和進行靜態的代碼分析?
PyChecker是一個Python代碼的靜態分析工具,它可以幫助查找Python代碼的bug,會對代碼的復雜度和格式提出警告,Pylint是另外一個工具可以進行codingstandard檢查
31.python是如何進行內存管理的
python主要使用引用計數來跟蹤和回收垃圾.在引用計數的基礎上,通過標記-清除解決容器對象可能產生的循環引用問題,通過“分代回收”以空間換時間的方法來提高垃圾回收效率(另外一篇有詳細)
32.數組和元組的區別是什么?
數組和元組的區別:數組內容可以被修改,而元組內容是只讀的,不可以被修改的,但是元組里面有可能有可以被修改的數據類型,另外元組可以被哈希,比如作為字典的key
33.參數按值傳遞和引用傳遞是如何實現的?
PyChecker是一個Python代碼的靜態分析工具,它可以幫助查找Python代碼的bug,會對代碼的復雜度和格式提出警告,
Pylint是另外一個工具可以進行codingstandard檢查
34.python都有哪些自帶的數據結構
python自帶的數據結構分為可變和不可變:可變的有:數組,集合,字典,不可變的是:字符串,元組,整數
35.什么是python的名稱空間?
在python中,所有的名字都存在一個空間中,它們在空間中存在和被操作這就是名稱空間,他就好像一個盒子,在每個變量名字都對應裝著一個對象,當查詢變量的時候,會在該盒子里尋找相應的對象
36.python中的unittest是什么?
在python中,unittest是python中的單元測試框架,它擁有支持共享搭建、自動測試、在測試中暫停代碼、將不同測試迭代成一組。
37.args與*kwargs
args代表位置參數,它會接收任意多個參數并把這些參數作為元祖傳遞給函數*kwargs代表的關鍵字參數,返回的是字典,位置參數一定要放在關鍵字前面
38.在Python中什么是slicing?
slicing是一種在有序的對象類型中(數組、元祖、字符串)節選某一段的語法
39.os與sys區別:
os是模塊負責程序與操作系統的交互,提供了訪問操作系統底層的接口sys模塊是負責程序與python解釋器的交互,提供了一系列的函數和變量,用于操Python時運行的環境
40.函數和方法的區別
函數要手動傳self,方法不用傳
如果是一個函數,用類名去調用如果是一個方法用對象去調用
41.include和inclusion_tag區別
這兩個都是處理代碼沉余的,由于其他頁面也會有這樣的功能
也要用到,我們可以把它摘出來,在創建個文件夾寫進去。導入進來
如果用include,這里面的數據得從后端傳
如果用inclusion_tag,你返回什么就幫你傳什么,它既有自己的功能也有include的功能,又可以處理數據
42.什么是元類
用來控制創建類的,正如類是創建對象的模板一樣,而元類的主要目的是為了控制類的創建行為。
元類的實例化的結果是我們用class定義的類,正如類的實例為對象(類是type類創建的一個實例)
type是python的一個內建元類,用來直接控制生成類,python中任何class定義的類其實都是type實例化后的對象。
43.如何判斷python對象是否為可調用函數?
使用內置的callable函數
判斷對象類型是否是Function Type
判斷對象是否實現call方法
43.Python中的作用域
python中,一個變量的作用域總是在代碼中被賦值的地方所決定的
當python遇到一個變量的話他會按照這樣的順序進行搜索
本地作用域---當前作用域被嵌入的本地作用域-全局/模塊作用域
---內置作用域
44.面向對象
一種編程方式,面向對象編程解決了程序的可擴展性
面向對象的四個特性:
繼承:繼承是指的是類與類的關系,解決什么是什么的關系用來解決代碼重用的問題繼承是一種創建新類的方式,在python中新建的類可以繼承一個或多個父類,父類又可以稱為基類或超類新建的稱為派生類或子類
抽象: 抽象即抽取類似或者比較像的部分,奧巴馬和梅西抽象成人,麥兜和豬堅強抽象成豬,人豬抽象成動物。繼承是基于抽象這個過程后,通過編程語言去實現的
多態:一種事物的多種形態, 例子:就如,列表,字符串,元組,都是有序的序列類型,在這種情況下len這種方法的統計長度就是多態性python里面處處都是多態,只是我們一般發現不了 操作時候不需要關心這個對象的數據類型,你只要用就行面向對象的
封裝:什么是封裝(封裝不是單純意義的隱藏,其實它還是可以查看的)封裝數據:目的是保護隱私 功能的封裝:目的是隔離復雜度如果用于私有在類的外部無法使用變形的屬性,但是在類的內部可以使用。封裝類屬性的私有屬性(就是在類屬性前面加_)
45.反射
反射可以用字符串的方式去訪問對象的屬性,調用對象方法(但是不能去訪問方法),python中一切皆對象,都可以使用
反射有四種方法
hasattr:hasattr(object,name)判斷一個對象是否有name屬性或者name方法。有就返回True,沒有就返回False
getattr:獲取對象的屬性或者方法,如果存在則打印出來。hasattr和getattr配套使用需要注意的是,如果返回的是對象的方法,返回出來的是對象的內存地址,如果需要運行這個方法,可以在后面添加一對()
setattr:給對象的屬性賦值,若屬性不存在,先創建后賦值
delattr:刪除該對象指定的一個屬性
46.鴨子類型
"當看到一只鳥走起來像鴨子,游起來像鴨子,那么這只鳥就可以被稱為鴨子.
我們并不關心對象是什么類型,到底是不是鴨子,只關心行為
比如在python中,有很多file-like的東西,比如StringIO,GzipFile,socket。它們有很多相同的方法,我們把它們當作文件使用。
又比如list.extend()方法中,我們并不關心它的參數是不是list,只要它是可迭代的,所以它的參數可以是list/tuple/dict/字符串/生成器等.
鴨子類型在動態語言中經常使用,非常靈活,使得python不想java那樣專門去弄一大堆的設計模式。
圖片發自簡書App
總結
以上是生活随笔為你收集整理的python概念英文版_python重要概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css二级菜单的隐藏与显示_具有二级菜单
- 下一篇: 骁龙855处理器怎么样 高通骁龙855处