python tips(5)

來源:互聯網
上載者:User

1. list 序列,sample_list = [1, 2, 3, 'abc']

dictionary 字典,sample_dic = {"key" = value, 2:3}

tuple 唯讀序列,sample_tuple = (1, 3, "ab")

序表:序表由一系列值用逗號分隔而成,序表與字串一樣是不可變的,不允許對序表的某一項賦值。

字典:關聯陣列。

與字串不同的是列表是可變的,可以修改列表的每個元素。可以建立嵌套列表(表的元素也是列表)。

 

2. 內建函數:

filter(),filter(函數,序列)返回一個序列(儘可能與原來同類型),序列元素時原序列中由指定的函數篩選出來的那些,篩選規則是“函數(序列元素)=true”,filter()可以用來取出滿足條件的子集。

map(),map(函數,序列)對指定序列的每一項調用指定的函數,結果為傳回值組成的列表,map()可以對序列進行隱式迴圈。

reduce(),reduce(函數,序列)用來進行類似累加這樣的操作,這裡的函數式一個兩個子變數的函數,reduce()先對序列的前兩項調用函數得到一個結果,然後對結果和序列的下一項調用函數得到一個新結果,如此進行到序列尾部。

 

3. python中的and從左至右計算運算式,若所有值均為真,則返回最後一個值,若存在假,返回第一個假值。

or也是從左至右計算運算式,返回第一個為真的值。

>>> 'a' and 'b''b'>>> '' and 'b'''>>> 'a' or 'b''a'>>> '' or 'b''b'

另外有類似三目運算式的用法:bool?a:b

a = 'first'b = 'second'print 1 and a or b #等價於bool = true時的情況print 0 and a or b #等價於bool = false時的情況a = ''print 1 and a or b #a為假時,出現問題print (1 and [a] or [b])[0] #安全用法,因為[a]不可能為假,至少有一個元素>>> firstsecondsecond>>> 

另外一個例子。

collapse = True # FalseprocessFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)

此處無問題,因為一個lambda函數在一個布爾環境下總為真。(這並不意味著lambda函數不能返回假值,函數本身總是為真,它的傳回值可以為任何值)。

test = lambda x, y, z = 2:x*y*zprint test(2, 3, 4)print test(2, 3)>>> 2412>>> 

注意lambda選擇性參數,lambda函數只是一個內嵌函式。

 

4. 序列逆序可以使用reverse()。

 

5. python中如何?tuple和list的轉換?

1)函數tuple(seq)可以把所有可迭代的(iterable)序列轉換成一個tuple,元素不變,排序也不變。

e.g. tuple([1, 2, 3])返回(1, 2, 3)

tuple('abc')返回('a', 'b', 'c')

如果參數已經是一個tuple的話,函數不做任何拷貝而直接返回原來的對象,所以在不確定對象是不是tuple的時候來調用tuple()函數也不是很耗費的。

2)函數list(seq)可以把所有的序列和可迭代的對象轉換成一個list,元素不變,排序也不變。

例如list([1, 2, 3])返回(1, 2, 3),list('abc')返回['a', 'b', 'c'],如果參數是一個list,它會像set[:]一樣做一個拷貝。

 

6. 請寫出一段python代碼實現刪除一個List裡面的重複元素。

def del_Redundant(seq):    for item in seq:        if seq.count(item) > 1:            del seq[seq.index(item)]    return seqprint del_Redundant([1, 2, 3, 4, 1, 5, 2, 6, 1])>>> [3, 4, 5, 2, 6, 1]>>> 

7. python裡面如何拷貝一個對象:

在python中,無論把對象作為參數傳遞,作為函數傳回值,都是引用傳遞的。

標準庫中的copy模組提供了兩個方法來實現拷貝,一個方法是copy,它返回和參數包含內容一樣的對象。

import copynew_list = copy.copy(existing_list)

以上為淺拷貝,若希望對象中的屬性也被複製,可以使用deepcopy方法。

import copynew_list_of_dics = copy.deepcopy(existing_list_of_dicts)

copy.copy可以進行shallow copy,對於對象中的元素,依然使用引用。

淺複製,有時不能獲得一個和原來對象完全一致的副本,如果你想修改對象中的元素,不僅僅是對象本身的話。

>>> [3, 4, 5, 2, 6, 1]>>> import copy>>> list_of_lists = [['a'], [1, 2], ['z', 23]]>>> copy_lol = copy.copy(list_of_lists)>>> copy_lol[1].append('boo')>>> print list_of_lists, copy_lol[['a'], [1, 2, 'boo'], ['z', 23]] [['a'], [1, 2, 'boo'], ['z', 23]]>>> a = [1, 2, 3]>>> b = a>>> b.append(5)>>> print a, b[1, 2, 3, 5] [1, 2, 3, 5]>>> s = 'cat'>>> t = copy.copy(s)>>> s is tTrue>>> 

注意t = copy.copy(s)這一句不可修改對象(string,數字,元組),用複製依然會得到原來的。

is操作符用於判斷兩個對象是否完全一致,而且是同一個對象。

python中的對象包含三要素:id, type, value。

其中id用來唯一標識一個對象,type標識對象的類型,value是對象的值。

is判斷的是a對象是否就是b對象,是通過id判斷的。

==判斷的是a對象的值是否和b對象的值相等,是通過value來判斷的,參照如下代碼。

>>> a = 1>>> b = 1.0>>> a is bFalse>>> a == bTrue>>> id(a)27047920>>> id(b)27080240>>> a = 1>>> b = 1>>> a is bTrue>>> a == bTrue>>> id(a)27047920>>> id(b)27047920>>> #dictionary>>> a = {'m':1, 'n':2}>>> b = dict(a)>>> a is bFalse>>> a == bTrue>>> #list>>> a = [1, 2, 3]>>> b = list(a)>>> a is bFalse>>> a == bTrue>>> #tuple>>> a = (1, 2, 3)>>> b = tuple(a)>>> a is bTrue>>> a == bTrue>>> 

8. python中pass語句的作用:

1)pass語句什麼也不做,一般作為預留位置或者建立佔位程式,pass語句不會執行任何操作。

while False:    pass

2)pass語句通常用來建立一個最簡單的類。

class MyEmptyClass:    pass

3)pass在軟體設計階段也經常用來作為TODO,提醒實現相應的功能。

def initlog():    pass # please implement this

9. python異常處理。

class myException(Exception):    def __init__(self, str):        Exception.__init__(self, str)        self.value = strtry:    raise myException("error...")except myException, e:    print e.valuefinally:    print "pass">>> error...pass>>> 
try:    raise Exception, "hello world"except Exception, e:    print e>>> hello world>>> 

10. python assert用法:
1)assert語句用來聲明某個條件是真的

2)如果非常確信某個使用的列表中至少有一個元素,且想要檢驗這一點,並且在它非真的時候引發一個錯誤,則較適合用assert語句。

3)當assert語句失敗的時候,會引發一個Assertion Error。

>>> my_list = ['item']>>> assert len(my_list) >= 1>>> my_list.pop()'item'>>> assert len(my_list) >= 1Traceback (most recent call last):  File "<pyshell#52>", line 1, in <module>    assert len(my_list) >= 1AssertionError>>> 

11. 知道一個python對象的類型用type(x)。

 

12. python中range的用法。

1)range(stop)

2)range(start, stop[, step])

>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> range(1, 11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> range(0, 30, 5)[0, 5, 10, 15, 20, 25]>>> range(0, 10, 3)[0, 3, 6, 9]>>> range(0, -10, -1)[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]>>> range(0)[]>>> range(1, 0)[]>>> 

13. python全域變數:

def a():    x = 2    print xdef b():    global x    x = 4    print xx = 3print xa()print xb()print x>>> 32344>>> 

1)global variable全域變數:
在程式檔案中任何地方都可以引用,包括函數和類的內部,但是如果在函數和類中對全域變數賦值,必須在該函數或者類中聲明該變數為全域變數,否則經過賦值操作後,變數為本地變數。

2)local variable本地變數:

通常是在函數或者類的方法中直接使用,在該函數或者類方法之外,不能引用該變數。

 

14. python中產生隨機數:

import randomrandom.random() #[0.0, 1.0)中一個浮點數random.randint(start, stop) #[start, stop]中一個整數random.randrange(start, stop) #[start, stop)中一個整數

15. Regex通常用於在文本中尋找匹配的字串。

使用Regex進行匹配的流程:

首先由Regex引擎編譯Regex文本,產生Regex對象(包含應如何進行匹配的資訊),然後將Regex對象與需要匹配的文本進行匹配得到匹配結果(包含了這次成功匹配的資訊,如匹配到的字串、分組以及在文本中的索引)。

 

16. 用python來查詢和替換一個文本字串。

import repattern = re.compile('blue|white|red')print pattern.sub('haha', 'blue socks and red shoes')print pattern.sub('haha', 'blue socks and red shoes', 1)print pattern.subn('haha', 'blue socks and red shoes')print pattern.subn('haha', 'blue socks and red shoes', 1)>>> haha socks and haha shoeshaha socks and red shoes('haha socks and haha shoes', 2)('haha socks and red shoes', 1)>>> 

17. python裡search()和match()的區別。

1)match()函數只檢測Re是不是在string的開始位置匹配,search()會掃描整個string尋找匹配,也就是說match()只有在0位置匹配成功的話才有返回,如果不是開始位置匹配成功的話,match()就返回None。

2)search()會掃描整個字串並返回第一個成功的匹配。

import reprint re.match('super', 'superstition').span()print re.match('super', 'superstition')print re.match('super', 'insuperable')print re.search('super', 'superstition').span()print re.search('super', 'superstition')print re.search('super', 'insuperable').span()print re.search('super', 'insuperable')>>> (0, 5)<_sre.SRE_Match object at 0x015E1D40>None(0, 5)<_sre.SRE_Match object at 0x015E1D40>(2, 7)<_sre.SRE_Match object at 0x015E1D40>>>> 

18. python匹配HTML Tag時,<.*>和<.*?>有什麼區別?

1)<.*>為貪心匹配

2)<.*?>為非貪心匹配

import res = 'abc'print re.match('.*', s).group()print re.match('.*?', s).group()print re.match('a.*', s).group()print re.match('a.*?', s).group()>>> abcabca>>> 

19. python中如何發送郵件?

可以使用smtplib標準庫。

編寫的代碼可在支援SMTP監聽器的伺服器上執行。

 

20. 有沒有一個工具可以協助尋找python的bug和進行靜態程式碼分析?

1)有,PyChecker是一個python代碼的靜態分析工具,它可以協助尋找python代碼的bug,會對代碼的複雜度和格式提出警告。

2)Pylint是另外一個工具,可以進行coding standard檢查。

 

21. python是如何進行記憶體管理的?

python的記憶體管理是由python的解譯器負責的,開發人員可以從記憶體管理器事務中解放出來,致力於應用程式的開發,這樣就使得開發的程式錯誤更少,程式更健壯,開發週期更短。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.