首頁>技術>

1.is和==的區別:

is比較的是id,物件的記憶體地址= =比較的是值

2.按字典中的value值進行排序

sorted(dict.items(), key = lambda x: x[1])

3.字典和json的區別

字典是python的資料結構,字典中的key值能hashjson是一種資料的表現形式,是字串

4.可變、不可變型別:

指的是記憶體中的值是否可以被改變不可變:數值、字串、元組可變:列表、字典、集合

5.常用的字串格式化

佔位符 s1 = “%s DSB 你好”%nameformat s2 = “{} DSB 你好”.format(name)f-string s3 = f"{name} DSB 你好"

6.字串駐留機制

對短字串,賦值給多個不同物件時,記憶體中只有一個副本駐留適用範圍:由數字,字元和下劃線組成的python識別符號及整數[-5,256]

透過set內建的去重實現: l2 = list(set(l1))#保持原來順序透過內建sort方法:l2.sort(key=l1.index)l2 = sorted(set(l1), key=l1.index)遍歷:if not in l2 -> append

8.統計函式的執行效率

import cProfil #引入程式分析包,分析程式碼效能cProfile.run(‘func(paras)’) #把函式以字串形式傳入模組的run方法

9.列舉字串、列表、元組、字典的5個常用方法

str1 = ‘’ : replace, strip, split, reverse, upper, lower…list1 =[]: append, pop, insert, remove,sort, count, index…tuple1 = (): index, count, len(), dir()…dict1 = {}: get, keys, values, items, pop, popitems, clear, update…

10.什麼是反射,以及應用場景

透過字串的形式去訪問物件的屬性,呼叫物件的方法(但是不能去訪問方法)比如本來可以透過if elif判斷字串然後呼叫函式,但在大規模系統中不可取。核心主題是如何利用字串驅動不同的事件,比如匯入模組、呼叫函式等等,這些都是python的反射機制,是一種程式設計方法、設計模式的體現,凝聚了高內聚、松耦合的程式設計思想,不能簡單的用執行字串來代替。可以透過__import__函式,我們實現了基於字串的動態的模組匯入。obj = import(modules)#對於lib.xxx.xxx.xxx這一類的模組匯入路徑,__import__預設只會匯入最開頭的圓點左邊的目錄,也就是“lib”=> obj = import(“lib.” + modules, fromlist=True) # 注意fromlist引數class Foo:passfoo = Foo()foo.x = 1#getattrgetattr(foo,‘x’)) # 1 ## getattr 函式讓程式去foo模組了,尋找一個叫x的成員# 相當於把字串變成函式名的過程,然後把結果複製給變數func,變數指向foo裡某個函式#setattrsetattr(foo, ‘y’, 2))getattr(foo,‘y’)) # 2#hasattrhasattr(foo, ‘z’)) #False # 通常透過hasattr的判斷,防止非法輸入錯誤#delattrdelattr(foo, 'x))

11.淺copy和深copy的區別:

首先深複製和淺複製都是物件的複製,都會生成一個看起來相同的物件,他們本質的區別是複製出來的物件的地址是否和原物件一樣,淺複製是地址的複製,深複製是值的複製,就是完全跟以前就沒有任何關係了,原來的物件怎麼改都不會影響當前物件。

12.Python中的self關鍵字:

python的類中定義函式時的self關鍵字跟python的方法函式有關,方法函式由類的例項化物件呼叫,需要把呼叫它的例項化物件傳入方法函式中,self代表呼叫時的類的例項,而非類。在Python的直譯器內部,當我們呼叫t.prt()時,實際上Python解釋成Test.prt(t),也就是說把self替換成類的例項。

13.Yield關鍵字和生成器:

yield是一種特殊的return,執行遇到yield時,立即返回,這一點與return相似,不同之處在於,下次進入函式時直接到yield的下一個語句,而return後再進入函式,還是從函式體的第一行程式碼開始執行。帶yield的函式生成器,通常與next函式結合用。g=f()執行f,只得到一個生成器物件g,使用next函式進入到函式體內(執行next(g))。優點-節省記憶體,佔用記憶體空間為O(1)。

生成器:在需要返回資料的時候使用 yield 語句。每次 next()被呼叫時,生成器會返回它脫離的位置,自動建立iter()和 next()方法簡潔、高效,節省記憶體

14.列表和迭代器的區別

列表經過內建函式iter包裝,成為迭代器 a_iter = iter(a)列表不論遍歷多少次,表頭位置始終是第一個元素迭代器遍歷結束後,不再指向原來的表頭位置,而是最後元素的下一個位置(迭代到最後一個元素,再執行next,會觸發stopiteratio異常,透過捕獲此異常,求迭代器指向列表a的長度;生成器也是一種迭代器)

15.python垃圾回收機制

16. try except用法和作用

try用於檢測異常,except用於捕獲所有異常,保證程式的正常執行Exception:捕獲萬能異常finally:無論是否錯誤,都會執行此處程式碼raise:觸發異常

17.enumerate的作用

將一個可迭代物件中的元素,按元素順序每個增加一個索引值,組成索引序列,利用它可以同時獲得索引和值,方便後續操作。

18.lambda匿名函式表示式及應用場景

與函式有相同的作用域,但是匿名意味著引用計數為0, 使用一次就釋放,除非給其命名作為內建函式的引數,與內建函式配合一起使用

19.python的遞迴最大層數99820.常見的內建函式

17. filter,map,reduce的作用

filter(lambda x: x == 2, [1,2,3]) #透過判斷函式func,篩選符合條件的元素map(lambda x: x + ‘xxx’, [‘1’,‘2’]) #將func用於每個iterable物件reduce(lambda x, y: x + y, [1,2,3,4,5]) # 函式會對引數序列中的元素進行累積

18.什麼是閉包

定義在一個函式內部的函式,被外層函式包裹著,特點是可以訪問到外層函式中的名字閉包函式時名稱空間與作用域、函式物件、函式巢狀的結合體

19.裝飾器

裝飾器其實就是一個以函式作為引數並返回一個替換函式的可執行函式,即裝飾器是一個函式,它以函式作為引數,返回另一個函式。使用 @函式名字,放在某些函式上面,起到增強它們功能的作用。裝飾器使得程式碼更簡潔,程式碼的複用性大大提升。在Java中裝飾器被稱為註解。python支援非同步程式設計,從中也能看到裝飾器的身影

20.函數語言程式設計:面向過程的程式設計21.Python LEGB規則

Python的名稱空間是一個字典,字典內儲存了變數名稱與物件之間的對映關係查詢變數名就是在名稱空間字典中查詢鍵-值對, LEGB就是用來規定名稱空間查詢順序的規則LEGB含義解釋:L-Local(function);函式內的名字空間E-Enclosing function locals;外部巢狀函式的名字空間(例如closure)G-Global(module);函式定義所在模組(檔案)的名字空間B-Builtin(Python);Python內建模組的名字空間Python在確定一個變數的核心規則是LEGB,只有熟悉LEGB規則,才能清楚在程式執行過程中呼叫的變數究竟是什麼

22.@property的用法

如果在一個類中要設定和獲取一個成員變數的話, 一般是定義get和set的方法,但我們希望get/set一個值時有更簡單的方法,像設定成員變數一樣去設定一個變數,又可以檢查型別引數。在方法定義前,加 @property 裝飾器,可以像操作成員變數一樣進行操作。新式類中的屬性有三種訪問方式,如下:@property對應讀取@方法名.setter修改@方法名.deleter刪除屬性

23.多執行緒threading和多程序multiprocessing的應用場景每一個應用程式都有一個自己的程序。作業系統會為這些程序分配一些執行資源,例如記憶體空間等。在程序中,又可以建立一些執行緒,他們共享這些記憶體空間,並由作業系統呼叫,以便平行計算。

執行緒的狀態建立執行緒之後,執行緒並不是始終保持一個狀態。其狀態大概如下:

New 建立。Runnable 就緒。等待排程Running 執行。Blocked 阻塞。阻塞可能在 Wait Locked SleepingDead 消亡執行緒的型別執行緒有著不同的狀態,也有不同的型別。大致可分為:主執行緒子執行緒守護執行緒(後臺執行緒)前臺執行緒

io 操作不佔用CPU(從硬碟、從網路、從記憶體讀資料都算io)計算佔用CPU(如1+1計算)

python中的執行緒是假執行緒,不同執行緒之間的切換是需要耗費資源的,因為需要儲存執行緒的上下文,不斷的切換就會耗費資源。

python多執行緒適合io操作密集型的任務(如socket server 網路併發這一類的);python多執行緒不適合cpu密集操作型的任務,主要使用cpu來計算,如大量的數學計算。

那麼如果有cpu密集型的任務怎麼辦,可以透過多程序來操作(不是多執行緒)。

24.非同步和多執行緒的區別非同步是單執行緒的,它能更優雅處理了io密集型的應用場景

25.__new__和__init__的區別建立時初始化例項__new__是在例項建立之前被呼叫的,因為它的任務就是建立例項然後返回該例項物件,是個靜態方法。__init__是當例項物件建立完成後被呼叫的,然後設定物件屬性的一些初始值,通常用在初始化一個類例項的時候。是一個例項方法。也就是: __new__先被呼叫,__init__後被呼叫,__new__的返回值(例項)將傳遞給__init__方法的第一個引數,然後__init__給這個例項設定一些引數。

26.如何實現一個單例只初始化一次,在資料庫連線中很常用

單例模式是一個軟體的設計模式,為了保證一個類,無論呼叫多少次產生的例項物件,都是指向同一個記憶體地址,僅僅只有一個例項(只有一個物件)。

實現單例模式的手段有很多種,但總的原則是保證一個類只要例項化一個物件,下一次再例項的時候就直接返回這個物件,不再做例項化的操作。

方式:https://www.jb51.net/article/202178.htm

透過模組匯入的方式透過類的繫結方法透過魔法方法__new__透過元類**函式裝飾器類裝飾器

27.python查詢物件屬性的順序

_getattribute_()類屬性資料描述符例項屬性非資料描述符__getattr__()方法

28.SQL注入SQL注入即是指web應用程式對使用者輸入資料的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程式中事先定義好的查詢語句的結尾上新增額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的資料資訊。

22
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Python實現多個pdf檔案合併