1. 程式人生 > >python開發知識點總結

python開發知識點總結

*args的用法

python中規定引數前帶 * 的,稱為可變位置引數,只是我們通常稱這個可變位置引數為*args而已,叫其他的一樣一樣滴。

*args:是一個列表,傳入的引數會被放進列表裡。

def test_args(f,*args):
    for x in args:
        print(x)
test_args(1,2,3,4,5)

**kwargs的用法

同理,python中規定引數前 帶 ** 的,稱為可變關鍵字引數,通常**kwargs

**kwargs:是一個字典,傳入的引數以鍵值對的形式存放到字典裡。

def test_kwargs(f,**kwargs):
    print(kwargs.items())
    for k,v in kwargs.items():
        print(k,v)

test_kwargs(1,a=2,b=3,c=4)

如何求素數

# 素數又稱質數,0,1不是質數

# 除了1和它自身以外,不能被其他自然數整除的數

高階函式

# map()函式:接受一個函式f和一個list,並把這個函式f作用在這個list上面
def f(x):
    return x*x
print(list(map(f,[1,2,3,4,5]))) #注意python3中不能直接打印出map函式,輸出一個map物件,必須加一個list()進行輸出
#輸出[1, 4, 9, 16, 25]

# reduce()函式:f必須接受兩個引數,reduce實際上是對list的每個元素呼叫f
# 在 Python3 中,reduce() 函式已經被從全域性名字空間裡移除了,它現在被放置在 fucntools 模組裡,
# 如果想要使用它,則需要通過引入 functools 模組來呼叫 reduce() 函式:
from functools import reduce
def f(x,y):
    return x * y # 如果這裡的*換成+,則是一個累加
print(reduce(f,[1,2,3,4])) 
#輸出24

# filter()函式:過濾一些元素
def is_odd(x):
    return x % 2 == 1
print(list(filter(is_odd,[1,2,3,4,5,6,7,8,9,10])))#注意python3中不能直接打印出filter函式,這裡會輸出一個物件,必須加一個list()進行輸出
#輸出[1, 3, 5, 7, 9]

# sorted()函式:iterable 可迭代物件進行排序
# sort:只能對list進行排序,如果將列表換成元祖就無法使用了
a = [2,1,3,9,8,4,5,7,6]
print(sorted(a)) #預設是升序,如果需要降序在列表引數後面加上reverse=True
a.sort()
print(a) #[1, 2, 3, 4, 5, 6, 7, 8, 9]

 

Python中__new__與__init__方法的區別

       __new__:

       觸發時機:在例項化時觸發      

       引數:至少一個cls接受當前類

       返回值:必須返回一個物件例項      

       作用:例項化物件

       注意:例項化物件是object類底層實現,其他類繼承了object的__new__才能夠實現例項化物件

       __init__:

       觸發時機:初始化物件時觸發(不是例項化觸發,但是和例項化在一個操作中)   

       引數:至少一個self接受物件

       返回值:無   

       作用:初始化物件成員

       注意:使用該方法初始化的成員都是直接寫入物件當中,類中無法具有

什麼是匿名函式?

 Lambda函式,不用擔心函式名衝突,不過python對匿名函式支援有限,只有一些簡單的情況下可以使用

# 宣告一個簡單的lambda表示式
mylamb = lambda x,y:x+y
# 呼叫函式
result = mylamb(8,9)
print(result)

 

簡要概述一下python中生成器和迭代器

(1)迭代器:

迭代器協議:物件需要提供next()方法,它要麼返回迭代中的下一項,要麼就引起一個StopIteration異常,以終止迭代。

可迭代物件:實現了迭代器協議物件。list、tuple、dict都是Iterable(可迭代物件),但不是Iterator(迭代器物件)。但可以使用內建函式iter(),把這些都變成Iterable(可迭代器物件)。

for item in Iterable 迴圈的本質就是先通過iter()函式獲取可迭代物件Iterable的迭代器,然後對獲取到的迭代器不斷呼叫next()方法來獲取下一個值並將其賦值給item,遇到StopIteration的異常後迴圈結束。

(2)生成器:

將列表生成式中[]改變為()資料結構會改變,從列表變為生成器;

列表受記憶體限制,所以沒有必要建立完整的列表(節省大量記憶體空間),在python中我們可以採用生成器:邊迴圈邊計算的機制;

生成器是隻能遍歷一次的。生成器是一類特殊的迭代器。還能使用 def 定義函式,但是,使用yield而不是return語句返回結果。yield語句一次返回一個結果,在每個結果中間,掛起函式的狀態,以便下次從它離開的地方繼續執行。

Python的垃圾回收機制(garbage collection)

(1)當gc模組的計數器達到閾值,垃圾自動回收

(2)當呼叫gc.collect(),垃圾收到回收

(3)程式退出的時候,python直譯器來回收垃圾

函式裝飾器的作用

裝飾器本質上是一個Python函式,它可以讓其他函式在不需要做任何程式碼變動的前提下增加額外功能,裝飾器的返回值也是一個函式物件。

它經常用於有切面需求的場景,比如:插入日誌、效能測試、事務處理、快取、許可權校驗等場景。有了裝飾器,我們就可以抽離出大量與函式功能本身無關的雷同程式碼並繼續重用。概括的講,裝飾器的作用就是為已經存在的物件新增額外的功能。

程序、執行緒的區別

(1)定義的不同

程序是系統進行資源分配和排程的一個獨立單位。

執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源。

(2)區別

一個程式至少有一個程序,一個程序至少有一個執行緒。

執行緒的劃分尺度小於程序(資源比程序少),使得多執行緒程式的併發性高。

程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

線執行緒不能夠獨立執行,必須依存在程序中。

(3)優缺點

執行緒和程序在使用上各有優缺點:

執行緒執行開銷小,但不利於資源的管理和保護;而程序正相反。

函式的閉包

閉包就是函數語言程式設計的重要語法結構,提高了程式碼可重複實用性。使用特定或特殊的方式,將區域性變數(內部函式)引入到全域性環境中使用,這就是閉包操作。

Python裡的拷貝

copy.copy():淺拷貝,只拷貝父物件(頂級物件),不拷貝父物件的子物件(巢狀物件)。例如:L=[1,2,3,[4,5,6]]中1,2,3,[4,5,6]就是頂級物件,而[4,5,6]中的4,5,6就是巢狀物件。當我們對L頂級物件進行更改時copy.copy()不會更改,如果對L的巢狀物件進行更改copy.copy()是會更改的,因為他們共用巢狀物件.

copy.deepcopy():深拷貝,拷貝父物件(頂級物件)和子物件(巢狀物件)。當我們對L頂級物件以及巢狀物件進行更改時,不會影響copy.deepcopy().

Python中單下劃線和雙下劃線分別是什麼?

__name__:一種約定,Python內部的名字,用來與使用者自定義的名字區分開,防止衝突

_name:一種約定,用來指定變數私有

__name:直譯器用_classname__name來代替這個名字用以區別和其他類相同的命名

說明os,sys模組不同,並列舉常用的模組方法

os模板提供了一種方便的使用作業系統函式的方法

sys模板可供訪問由直譯器使用或維護的變數和與直譯器互動的函式

os模組負責程式與作業系統的互動,提供了訪問作業系統底層的介面。sys模組負責程式與Python直譯器的互動,提供了一系列的函式和變數使用者操作Python執行時的環境。

 

Python中pass語句的作用是什麼?

pass語句不會執行任何操作,一般作為佔位符或者建立佔位程式

apache和nginx的區別

(1)nginx 相對 apache 的優點:

輕量級,同樣起web 服務,比apache 佔用更少的記憶體及資源

抗併發,nginx 處理請求是非同步非阻塞的,支援更多的併發連線,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高效能

配置簡潔

高度模組化的設計,編寫模組相對簡單

社群活躍

(2)apache 相對nginx 的優點:

rewrite ,比nginx 的rewrite 強大;

模組超多,基本想到的都可以找到;

少bug ,nginx 的bug 相對較多;

超穩定。

什麼是事務?

事務(Transaction)是併發控制的基本單位。所謂事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。例如,銀行轉帳工作:

從一個帳號扣款並使另一個帳號增款,這兩個操作要麼都執行,要麼都不執行。所以,應該把他們看成一個事務。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性。

事務四大特性:

原子性:事務中的全部操作在資料庫中是不可分割的,要麼全部完成,要麼均不執行;

一致性:幾個並行執行的事務,其執行結果必須與按某一順序序列執行的結果相一致;

隔離性:事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的;

永續性:對於任意已提交事務,系統必須保證該事務對資料庫的改變不被丟失,即使資料庫出現故障。