python tips(5)
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]不可能為假,至少有一個元素
>>>
first
second
second
>>>
另外一個例子。collapse = True # False
processFunc = collapse and (lambda s:" ".join(s.split())) or (lambda s:s)
此處無問題,因為一個lambda函式在一個布林環境下總為真。(這並不意味著lambda函式不能返回假值,函式本身總是為真,它的返回值可以為任何值)。
test = lambda x, y, z = 2:x*y*z
print test(2, 3, 4)
print test(2, 3)
>>>
24
12
>>>
注意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 seq
print del_Redundant([1, 2, 3, 4, 1, 5, 2, 6, 1])
>>>
[3, 4, 5, 2, 6, 1]
>>>
7. python裡面如何拷貝一個物件:
在python中,無論把物件作為引數傳遞,作為函式返回值,都是引用傳遞的。
標準庫中的copy模組提供了兩個方法來實現拷貝,一個方法是copy,它返回和引數包含內容一樣的物件。
import copy
new_list = copy.copy(existing_list)
以上為淺拷貝,若希望物件中的屬性也被複制,可以使用deepcopy方法。
import copy
new_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 t
True
>>>
注意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 b
False
>>> a == b
True
>>> id(a)
27047920
>>> id(b)
27080240
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a == b
True
>>> id(a)
27047920
>>> id(b)
27047920
>>> #dictionary
>>> a = {'m':1, 'n':2}
>>> b = dict(a)
>>> a is b
False
>>> a == b
True
>>> #list
>>> a = [1, 2, 3]
>>> b = list(a)
>>> a is b
False
>>> a == b
True
>>> #tuple
>>> a = (1, 2, 3)
>>> b = tuple(a)
>>> a is b
True
>>> a == b
True
>>>
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 = str
try:
raise myException("error...")
except myException, e:
print e.value
finally:
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) >= 1
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
assert len(my_list) >= 1
AssertionError
>>>
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 x
def b():
global x
x = 4
print x
x = 3
print x
a()
print x
b()
print x
>>>
3
2
3
4
4
>>>
1)global variable全域性變數:
在程式檔案中任何地方都可以引用,包括函式和類的內部,但是如果在函式和類中對全域性變數賦值,必須在該函式或者類中宣告該變數為全域性變數,否則經過賦值操作後,變數為本地變數。
2)local variable本地變數:
通常是在函式或者類的方法中直接使用,在該函式或者類方法之外,不能引用該變數。
14. python中生成隨機數:
import random
random.random() #[0.0, 1.0)中一個浮點數
random.randint(start, stop) #[start, stop]中一個整數
random.randrange(start, stop) #[start, stop)中一個整數
15. 正規表示式通常用於在文字中查詢匹配的字串。
使用正規表示式進行匹配的流程:
首先由正規表示式引擎編譯正規表示式文字,生成正規表示式物件(包含應如何進行匹配的資訊),然後將正規表示式物件與需要匹配的文字進行匹配得到匹配結果(包含了這次成功匹配的資訊,如匹配到的字串、分組以及在文字中的索引)。
16. 用python來查詢和替換一個文字字串。
import re
pattern = 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 shoes
haha 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 re
print 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 re
s = 'abc'
print re.match('.*', s).group()
print re.match('.*?', s).group()
print re.match('a.*', s).group()
print re.match('a.*?', s).group()
>>>
abc
abc
a
>>>
19. python中如何傳送郵件?
可以使用smtplib標準庫。
編寫的程式碼可在支援SMTP監聽器的伺服器上執行。
20. 有沒有一個工具可以幫助查詢python的bug和進行靜態的程式碼分析?
1)有,PyChecker是一個python程式碼的靜態分析工具,它可以幫助查詢python程式碼的bug,會對程式碼的複雜度和格式提出警告。
2)Pylint是另外一個工具,可以進行coding standard檢查。
21. python是如何進行記憶體管理的?
python的記憶體管理是由python的直譯器負責的,開發人員可以從記憶體管理器事務中解放出來,致力於應用程式的開發,這樣就使得開發的程式錯誤更少,程式更健壯,開發週期更短。
相關文章
- Python常用TipsPython
- python tips(4)Python
- python tips(3)Python
- python tips(2)Python
- UE5筆記-NavMesh的小Tips筆記
- Tips
- NPM TipsNPM
- AutoLayout Tips
- Tips HTMLHTML
- 前端 - tips前端
- Swift TipsSwift
- NumPy Tips
- Git TipsGit
- note tips
- hector tips
- PB Tips
- Tips for SD
- interview tipsView
- Mysql tipsMySql
- SAP Tips
- English Tips
- Docker TipsDocker
- ISPF tips
- Python Tips 01 : 判斷兩個檔案是否相同Python
- 雜項 tips
- Tips: EloquentModel
- Linux TipsLinux
- typescript + amd tipsTypeScript
- jQuery tips and tricksjQuery
- 《iOS Tips 一》iOS
- GoldenGate TipsGo
- SELinux tipsLinux
- gulp some tips
- Some tips of Barcelona
- backup and restore tipsREST
- installation tips
- Sed Tips and Tricks
- layer小tips