python學習筆記(十二),python學習筆記

來源:互聯網
上載者:User

python學習筆記(十二),python學習筆記

一.collections

1. namedtuple

namedtuple是一個函數,它用來建立一個自訂的tuple對象,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素。

from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])p = Point(1, 2)print p.xprint p.y

2.deque

deque是為了實現高效插入和高效刪除操作的雙向列表,適合用於隊列和棧

from collections import dequeq = deque(['a', 'b', 'c'])q.append('x') # 往尾部添加q.appendleft('y') # 往頭部添加print q  # deque(['y', 'a', 'b', 'c', 'x'])q.pop() # 彈出元素q.popleft()print q  # deque(['a', 'b', 'c'])

3.defaultdict

使用dict時,如果引用的key不存在,就會拋出KeyError。如果希望Key不存在時,返回一個預設值,就可以使用defaultdict。

注意:OrderedDict的Key會按照插入的順序排序,不是Key本身排序。

from collections import defaultdictdd = defaultdict(lambda: 'N/A')dd['key1'] = 'abc'print dd['key1'] # key1存在,返回‘abc’print dd['key2'] # key2不存在,返回預設值 ‘N/A’
4.OrderedDict

使用dict時,Key是無序的,在對dict做迭代時,我們無法確定Key的順序。如果要保持Key的順序,可以用OrderedDict:

from collections import OrderedDictd = dict([('a', 1), ('b', 2), ('c', 3)])print d # dict的Key是無序的 {'a': 1, 'c': 3, 'b': 2}od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])print od # OrderedDict的Key是有序的 OrderedDict([('a', 1), ('b', 2), ('c', 3)])

5.Counter

Counter是一個簡單的計數器,實際上它也是dict的一個子類:

from collections import Counterc = Counter()for ch in 'programming':    c[ch] = c[ch] + 1    print c# Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})

二.base64

base64是一種任意二進位到文本字串的編碼方式,常用於在URL、Cookie、網頁中傳輸少量位元據

import base64print base64.b64encode('binary string')# 'YmluYXJ5AHN0cmluZw=='print base64.b64decode('YmluYXJ5IHN0cmluZw==')# 'binary string'

三.struct

使用struct可以解決str和其他位元據類型的轉換。

import structprint struct.pack('>I', 10240099)  # '\x00\x9c@c'print struct.unpack('>IH', '\xf0\xf0\xf0\xf0\x80\x80') # (4042322160, 32896)

四.hashlib

hashlib提供了常見的摘要演算法:MD5,SHA1等

摘要演算法又稱雜湊演算法、散列演算法。它通過一個函數,把任意長度的資料轉換為一個長度固定的資料串。

import hashlibmd5 = hashlib.md5()md5.update('how to use md5 in python hashlib?')print md5.hexdigest()sha1 = hashlib.sha1()sha1.update('how to use sha1 in python hashlib?')print sha1.hexdigest()
MD5通常用於儲存使用者口令的摘要,當使用者登入時,首先計算使用者輸入的明文口令的MD5,然後和資料庫儲存的MD5對比,如果一致,說明口令輸入正確;如果不一致,口令肯定錯誤。

五.itertools

1. itertools提供了幾個無限迭代器:

import itertoolsnatuals = itertools.count(1)for n in natuals:    print n # 無限列印出自然數import itertoolscs = itertools.cycle('ABC') # 注意字串也是序列的一種for c in cs:    print c # 無限列印出 A, B, Cns = itertools.repeat('A', 10)for n in ns:    print n # 列印10次A
無限序列雖然可以無限迭代下去,但是我們通常會通過takewhile函數根據條件判斷來截取出一個有限的序列:
import itertoolsnatuals = itertools.count(1)ns = itertools.takewhile(lambda x: x <= 10, natuals)for n in ns:    print n

2. chain可以把一組迭代對象串聯起來,形成一個更大的迭代器:

import itertoolsfor c in chain('ABC', 'XYZ'):    print c# 迭代效果:'A' 'B' 'C' 'X' 'Y' 'Z'
3. groupby把迭代器中相鄰的重複元素挑出來放在一起:
import itertoolsfor key, group in itertools.groupby('AAABBBCCAAA'):    print key, list(group) ###################### A ['A', 'A', 'A']# B ['B', 'B', 'B']# C ['C', 'C']# A ['A', 'A', 'A']###################### 傳入一個匿名函數,忽略大小寫分組for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):    print key, list(group)##################### # A ['A', 'a', 'a']# B ['B', 'B', 'b']# C ['c', 'C']# A ['A', 'A', 'a']#####################

4. imap和map的區別是:imap可以作用於無窮序列

注意:imap返回一個迭代對象,而map返回list

import itertoolsfor x in itertools.imap(lambda x, y: x * y, [10, 20, 30], itertools.count(1)):    print x   # 10 40 90# 匿名函數傳入兩個值相乘:10*1, 20*2, 30*3
5. ifilter是filter的惰性實現。

六.XML

使用sax解析xml:

from xml.parsers.expat import ParserCreateclass DefaultSaxHandler(object):    def start_element(self, name, attrs):        print('sax:start_element: %s, attrs: %s' % (name, str(attrs)))    def end_element(self, name):        print('sax:end_element: %s' % name)    def char_data(self, text):        print('sax:char_data: %s' % text)xml = r'''<?xml version="1.0"?><ol>    <li><a href="/python">Python</a></li>    <li><a href="/ruby">Ruby</a></li></ol>'''        handler = DefaultSaxHandler()parser = ParserCreate()parser.returns_unicode = Trueparser.StartElementHandler = handler.start_elementparser.EndElementHandler = handler.end_elementparser.CharacterDataHandler = handler.char_dataparser.Parse(xml)

七.HTMLParser

使用python解析xml:

from HTMLParser import HTMLParserfrom htmlentitydefs import name2codepointclass MyHTMLParser(HTMLParser):    def handle_starttag(self, tag, attrs):        print('<%s>' % tag)    def handle_endtag(self, tag):        print('</%s>' % tag)    def handle_startendtag(self, tag, attrs):        print('<%s/>' % tag)    def handle_data(self, data):        print('data')    def handle_comment(self, data):        print('<!-- -->')    def handle_entityref(self, name):        print('&%s;' % name)    def handle_charref(self, name):        print('&#%s;' % name)parser = MyHTMLParser()parser.feed('<html><head></head><body><p>Some <a href=\"#\">html</a> tutorial...<br>END</p></body></html>')

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.