一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

迭代器和生成器的區(qū)別

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-09-29 15:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大數(shù)據(jù)的文件讀取

① 利用生成器generator

②迭代器進(jìn)行迭代遍歷:for line in file

迭代器和生成器的區(qū)別

1)迭代器是一個(gè)更抽象的概念,任何對(duì)象,如果它的類有next方法和iter方法返回自己本身。對(duì)于string、list、dict、tuple等這類容器對(duì)象,使用for循環(huán)遍歷是很方便的。在后臺(tái)for語(yǔ)句對(duì)容器對(duì)象調(diào)用iter()函數(shù),iter()是python的內(nèi)置函數(shù)。iter()會(huì)返回一個(gè)定義了next()方法的迭代器對(duì)象,它在容器中逐個(gè)訪問(wèn)容器內(nèi)元素,next()也是python的內(nèi)置函數(shù)。在沒(méi)有后續(xù)元素時(shí),next()會(huì)拋出一個(gè)StopIteration異常

2)生成器(Generator)是創(chuàng)建迭代器的簡(jiǎn)單而強(qiáng)大的工具。它們寫起來(lái)就像是正規(guī)的函數(shù),只是在需要返回?cái)?shù)據(jù)的時(shí)候使用yield語(yǔ)句。每次next()被調(diào)用時(shí),生成器會(huì)返回它脫離的位置(它記憶語(yǔ)句最后一次執(zhí)行的位置和所有的數(shù)據(jù)值)

區(qū)別:生成器能做到迭代器能做的所有事,而且因?yàn)樽詣?dòng)創(chuàng)建了__iter__()和next()方法,生成器顯得特別簡(jiǎn)潔,而且生成器也是高效的,使用生成器表達(dá)式取代列表解析可以同時(shí)節(jié)省內(nèi)存。除了創(chuàng)建和保存程序狀態(tài)的自動(dòng)方法,當(dāng)發(fā)生器終結(jié)時(shí),還會(huì)自動(dòng)拋出StopIteration異常

裝飾器的作用和功能

引入日志

函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)

執(zhí)行函數(shù)前預(yù)備處理

執(zhí)行函數(shù)后的清理功能

權(quán)限校驗(yàn)等場(chǎng)景

緩存

Global Interpreter Lock(全局解釋器鎖)

Python代碼的執(zhí)行由Python 虛擬機(jī)(也叫解釋器主循環(huán),CPython版本)來(lái)控制,Python 在設(shè)計(jì)之初就考慮到要在解釋器的主循環(huán)中,同時(shí)只有一個(gè)線程在執(zhí)行,即在任意時(shí)刻,只有一個(gè)線程在解釋器中運(yùn)行。對(duì)Python 虛擬機(jī)的訪問(wèn)由全局解釋器鎖(GIL)來(lái)控制,正是這個(gè)鎖能保證同一時(shí)刻只有一個(gè)線程在運(yùn)行。

在多線程環(huán)境中,Python 虛擬機(jī)按以下方式執(zhí)行:

1. 設(shè)置GIL2. 切換到一個(gè)線程去運(yùn)行3. 運(yùn)行: a. 指定數(shù)量的字節(jié)碼指令,或者

b. 線程主動(dòng)讓出控制(可以調(diào)用time.sleep(0))4. 把線程設(shè)置為睡眠狀態(tài)5. 解鎖GIL6. 再次重復(fù)以上所有步驟

在調(diào)用外部代碼(如C/C++擴(kuò)展函數(shù))的時(shí)候,GIL 將會(huì)被鎖定,直到這個(gè)函數(shù)結(jié)束為止(由于在這期間沒(méi)有Python 的字節(jié)碼被運(yùn)行,所以不會(huì)做線程切換)。

find和grep

grep命令是一種強(qiáng)大的文本搜索工具,grep搜索內(nèi)容串可以是正則表達(dá)式,允許對(duì)文本文件進(jìn)行模式查找。如果找到匹配模式,grep打印包含模式的所有行。

find通常用來(lái)再特定的目錄下搜索符合條件的文件,也可以用來(lái)搜索特定用戶屬主的文件。

線上服務(wù)可能因?yàn)榉N種原因?qū)е聮斓粼趺崔k?

linux下的后臺(tái)進(jìn)程管理利器 supervisor

每次文件修改后再linux執(zhí)行 service supervisord restart

如何提高python的運(yùn)行效率

使用生成器;關(guān)鍵代碼使用外部功能包(Cython,pylnlne,pypy,pyrex);針對(duì)循環(huán)的優(yōu)化--盡量避免在循環(huán)中訪問(wèn)變量的屬性

常用Linux命令

ls,help,cd,more,clear,mkdir,pwd,rm,grep,find,mv,su,date

Python中的yield用法

yield簡(jiǎn)單說(shuō)來(lái)就是一個(gè)生成器,這樣函數(shù)它記住上次返 回時(shí)在函數(shù)體中的位置。對(duì)生成器第 二次(或n 次)調(diào)用跳轉(zhuǎn)至該函 次)調(diào)用跳轉(zhuǎn)至該函 數(shù)。

描述數(shù)組、鏈表、隊(duì)列、堆棧的區(qū)別?

數(shù)組與鏈表是數(shù)據(jù)存儲(chǔ)方式的概念,數(shù)組在連續(xù)的空間中存儲(chǔ)數(shù)據(jù),而鏈表可以在非連續(xù)的空間中存儲(chǔ)數(shù)據(jù);

隊(duì)列和堆棧是描述數(shù)據(jù)存取方式的概念,隊(duì)列是先進(jìn)先出,而堆棧是后進(jìn)先出;隊(duì)列和堆??梢杂脭?shù)組來(lái)實(shí)現(xiàn),也可以用鏈表實(shí)現(xiàn)。

你知道幾種排序,講一講你最熟悉的一種?

Python是如何進(jìn)行內(nèi)存管理的

一、垃圾回收:

python不像C++,Java等語(yǔ)言一樣,他們可以不用事先聲明變量類型而直接對(duì)變量進(jìn)行賦值。對(duì)Python語(yǔ)言來(lái)講,對(duì)象的類型和內(nèi)存都是在運(yùn)行時(shí)確定的。這也是為什么我們稱Python語(yǔ)言為動(dòng)態(tài)類型的原因(這里我們把動(dòng)態(tài)類型可以簡(jiǎn)單的歸結(jié)為對(duì)變量?jī)?nèi)存地址的分配是在運(yùn)行時(shí)自動(dòng)判斷變量類型并對(duì)變量進(jìn)行賦值)。

二、引用計(jì)數(shù):

Python采用了類似Windows內(nèi)核對(duì)象一樣的方式來(lái)對(duì)內(nèi)存進(jìn)行管理。每一個(gè)對(duì)象,都維護(hù)這一個(gè)對(duì)指向該對(duì)對(duì)象的引用的計(jì)數(shù)。當(dāng)變量被綁定在一個(gè)對(duì)象上的時(shí)候,該變量的引用計(jì)數(shù)就是1,(還有另外一些情況也會(huì)導(dǎo)致變量引用計(jì)數(shù)的增加),系統(tǒng)會(huì)自動(dòng)維護(hù)這些標(biāo)簽,并定時(shí)掃描,當(dāng)某標(biāo)簽的引用計(jì)數(shù)變?yōu)?的時(shí)候,該對(duì)就會(huì)被回收。

三、內(nèi)存池機(jī)制Python的內(nèi)存機(jī)制以金字塔行,-1,-2層主要有操作系統(tǒng)進(jìn)行操作,

第0層是C中的malloc,free等內(nèi)存分配和釋放函數(shù)進(jìn)行操作;

第1層和第2層是內(nèi)存池,有Python的接口函數(shù)PyMem_Malloc函數(shù)實(shí)現(xiàn),當(dāng)對(duì)象小于256K時(shí)有該層直接分配內(nèi)存;

第3層是最上層,也就是我們對(duì)Python對(duì)象的直接操作;

在C 中如果頻繁的調(diào)用 malloc 與 free 時(shí),是會(huì)產(chǎn)生性能問(wèn)題的.再加上頻繁的分配與釋放小塊的內(nèi)存會(huì)產(chǎn)生內(nèi)存碎片. Python 在這里主要干的工作有:

如果請(qǐng)求分配的內(nèi)存在1~256字節(jié)之間就使用自己的內(nèi)存管理系統(tǒng),否則直接使用 malloc.

這里還是會(huì)調(diào)用malloc 分配內(nèi)存,但每次會(huì)分配一塊大小為256k的大塊內(nèi)存.

經(jīng)由內(nèi)存池登記的內(nèi)存到最后還是會(huì)回收到內(nèi)存池,并不會(huì)調(diào)用 C 的 free 釋放掉.以便下次使用.對(duì)于簡(jiǎn)單的Python對(duì)象,例如數(shù)值、字符串,元組(tuple不允許被更改)采用的是復(fù)制的方式(深拷貝?),也就是說(shuō)當(dāng)將另一個(gè)變量B賦值給變量A時(shí),雖然A和B的內(nèi)存空間仍然相同,但當(dāng)A的值發(fā)生變化時(shí),會(huì)重新給A分配空間,A和B的地址變得不再相同

web框架部分

1.django 中當(dāng)一個(gè)用戶登錄 A 應(yīng)用服務(wù)器(進(jìn)入登錄狀態(tài)),然后下次請(qǐng)求被 nginx 代理到 B 應(yīng)用服務(wù)器會(huì)出現(xiàn)什么影響?

如果用戶在A應(yīng)用服務(wù)器登陸的session數(shù)據(jù)沒(méi)有共享到B應(yīng)用服務(wù)器,納米之前的登錄狀態(tài)就沒(méi)有了。

2.跨域請(qǐng)求問(wèn)題django怎么解決的(原理)

啟用中間件

post請(qǐng)求

驗(yàn)證碼

表單中添加{%csrf_token%}標(biāo)簽

3.請(qǐng)解釋或描述一下Django的架構(gòu)

對(duì)于Django框架遵循MVC設(shè)計(jì),并且有一個(gè)專有名詞:MVT

M全拼為Model,與MVC中的M功能相同,負(fù)責(zé)數(shù)據(jù)處理,內(nèi)嵌了ORM框架

V全拼為View,與MVC中的C功能相同,接收HttpRequest,業(yè)務(wù)處理,返回HttpResponse

T全拼為Template,與MVC中的V功能相同,負(fù)責(zé)封裝構(gòu)造要返回的html,內(nèi)嵌了模板引擎

4.django對(duì)數(shù)據(jù)查詢結(jié)果排序怎么做,降序怎么做,查詢大于某個(gè)字段怎么做

排序使用order_by()

降序需要在排序字段名前加-

查詢字段大于某個(gè)值:使用filter(字段名_gt=值)

5.說(shuō)一下Django,MIDDLEWARES中間件的作用?

答:中間件是介于request與response處理之間的一道處理過(guò)程,相對(duì)比較輕量級(jí),并且在全局上改變django的輸入與輸出。

你對(duì)Django的認(rèn)識(shí)?

Django是走大而全的方向,它最出名的是其全自動(dòng)化的管理后臺(tái):只需要使用起ORM,做簡(jiǎn)單的對(duì)象定義,它就能自動(dòng)生成數(shù)據(jù)庫(kù)結(jié)構(gòu)、以及全功能的管理后臺(tái)。

Django內(nèi)置的ORM跟框架內(nèi)的其他模塊耦合程度高。

應(yīng)用程序必須使用Django內(nèi)置的ORM,否則就不能享受到框架內(nèi)提供的種種基于其ORM的便利;理論上可以切換掉其ORM模塊,但這就相當(dāng)于要把裝修完畢的房子拆除重新裝修,倒不如一開(kāi)始就去毛胚房做全新的裝修。

Django的賣點(diǎn)是超高的開(kāi)發(fā)效率,其性能擴(kuò)展有限;采用Django的項(xiàng)目,在流量達(dá)到一定規(guī)模后,都需要對(duì)其進(jìn)行重構(gòu),才能滿足性能的要求。

Django適用的是中小型的網(wǎng)站,或者是作為大型網(wǎng)站快速實(shí)現(xiàn)產(chǎn)品雛形的工具。

Django模板的設(shè)計(jì)哲學(xué)是徹底的將代碼、樣式分離; Django從根本上杜絕在模板中進(jìn)行編碼、處理數(shù)據(jù)的可能。

Django重定向你是如何實(shí)現(xiàn)的?用的什么狀態(tài)碼?

使用HttpResponseRedirect

redirect和reverse

狀態(tài)碼:302,301

ngnix的正向代理與反向代理?

正向代理是一個(gè)位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端??蛻舳吮仨氁M(jìn)行一些特別的設(shè)置才能使用正向代理。

反向代理正好相反,對(duì)于客戶端而言它就像是原始服務(wù)器,并且客戶端不需要進(jìn)行任何特別的設(shè)置??蛻舳讼蚍聪虼淼拿臻g中的內(nèi)容發(fā)送普通請(qǐng)求,接著反向代理將判斷向何處(原始服務(wù)器)轉(zhuǎn)交請(qǐng)求,并將獲得的內(nèi)容返回給客戶端,就像這些內(nèi)容原本就是它自己的一樣。

Tornado 的核是什么?

Tornado 的核心是 ioloop 和 iostream 這兩個(gè)模塊,前者提供了一個(gè)高效的 I/O 事件循環(huán),后者則封裝了 一個(gè)無(wú)阻塞的 socket 。通過(guò)向 ioloop 中添加網(wǎng)絡(luò) I/O 事件,利用無(wú)阻塞的 socket ,再搭配相應(yīng)的回調(diào) 函數(shù),便可達(dá)到夢(mèng)寐以求的高效異步執(zhí)行。

Django 本身提供了 runserver,為什么不能用來(lái)部署?

runserver 方法是調(diào)試 Django 時(shí)經(jīng)常用到的運(yùn)行方式,它使用 Django 自帶的

WSGI Server 運(yùn)行,主要在測(cè)試和開(kāi)發(fā)中使用,并且 runserver 開(kāi)啟的方式也是單進(jìn)程 。

uWSGI 是一個(gè) Web 服務(wù)器,它實(shí)現(xiàn)了 WSGI 協(xié)議、uwsgi、http 等協(xié)議。注意 uwsgi 是一種通信協(xié)議,而 uWSGI 是實(shí)現(xiàn) uwsgi 協(xié)議和 WSGI 協(xié)議的 Web 服務(wù)器。uWSGI 具有超快的性能、低內(nèi)存占用和多 app 管理等優(yōu)點(diǎn),并且搭配著 Nginx

就是一個(gè)生產(chǎn)環(huán)境了,能夠?qū)⒂脩粼L問(wèn)請(qǐng)求與應(yīng)用app 隔離開(kāi),實(shí)現(xiàn)真正的部署 。相比來(lái)講,支持的并發(fā)量更高,方便管理多進(jìn)程,發(fā)揮多核的優(yōu)勢(shì),提升性能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    322

    瀏覽量

    21901
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86771
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    8960

    瀏覽量

    140256

原文標(biāo)題:史上最全 python常見(jiàn)面試題(一)

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何去使用生成器

    生成器的工作原理是什么?如何去使用生成器呢?
    發(fā)表于 10-25 08:44

    python生成器

    python生成器1. 什么是生成器?生成器(英文名 Generator ),是一個(gè)可以像迭代那樣使用for循環(huán)來(lái)獲取元素的函數(shù)。
    發(fā)表于 02-24 15:56

    pim卡資料生成器

    pim卡資料生成器
    發(fā)表于 11-22 23:23 ?6次下載

    自制酸奶生成器

    自制酸奶生成器
    發(fā)表于 04-23 11:48 ?981次閱讀
    自制酸奶<b class='flag-5'>生成器</b>

    代碼生成器的應(yīng)用

    jeesite框架代碼生成器,可以很方便的生成代碼,挺不錯(cuò)的。
    發(fā)表于 01-14 15:19 ?0次下載

    數(shù)碼管代碼生成器

    數(shù)碼管代碼生成器,迅速生成數(shù)碼管的相應(yīng)代碼
    發(fā)表于 04-25 10:54 ?44次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版 STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版
    發(fā)表于 07-25 18:52 ?0次下載

    了解Python數(shù)據(jù)結(jié)構(gòu)迭代對(duì)象、迭代、生成器的概念

    在了解Python的數(shù)據(jù)結(jié)構(gòu)時(shí),容器(container)、可迭代對(duì)象(iterable)、迭代(iterator)、生成器(generator)、列表/集合/字典推導(dǎo)式(list,
    發(fā)表于 11-15 17:34 ?1015次閱讀
    了解Python數(shù)據(jù)結(jié)構(gòu)<b class='flag-5'>迭代</b>對(duì)象、<b class='flag-5'>迭代</b><b class='flag-5'>器</b>、<b class='flag-5'>生成器</b>的概念

    帶你一起學(xué)習(xí)徹底搞懂Python生成器

    在這說(shuō)「迭代」的原因是「生成器」自動(dòng)實(shí)現(xiàn)了「迭代協(xié)議」,所謂協(xié)議,就是一種約定。為了更好的理解生成器
    的頭像 發(fā)表于 02-25 09:13 ?3013次閱讀

    AN-113:精密坡道生成器

    AN-113:精密坡道生成器
    發(fā)表于 05-16 12:04 ?6次下載
    AN-113:精密坡道<b class='flag-5'>生成器</b>

    python生成器是什么

    python生成器 1. 什么是生成器? 生成器(英文名 Generator ),是一個(gè)可以像迭代那樣使用for循環(huán)來(lái)獲取元素的函數(shù)。
    的頭像 發(fā)表于 02-24 15:53 ?3952次閱讀

    Arduino贊美生成器

    電子發(fā)燒友網(wǎng)站提供《Arduino贊美生成器.zip》資料免費(fèi)下載
    發(fā)表于 11-09 14:22 ?1次下載
    Arduino贊美<b class='flag-5'>生成器</b>

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置一起使用的項(xiàng)目

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置一起使用的項(xiàng)目
    發(fā)表于 01-11 19:00 ?0次下載
    將使用代碼<b class='flag-5'>生成器</b><b class='flag-5'>生成</b>的項(xiàng)目移植到與智能配置<b class='flag-5'>器</b>一起使用的項(xiàng)目

    通用RFID生成器

    通用RFID生成器資料分享
    發(fā)表于 02-10 15:35 ?1次下載

    Python中的迭代生成器

    Python迭代生成器 列表生成式 列表生成式也叫做列表推導(dǎo)式,它本身還是列表,只不過(guò)它是根據(jù)我們定義的規(guī)則來(lái)
    的頭像 發(fā)表于 02-20 10:43 ?394次閱讀