Python:hashable協議
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: hashable協議.py @time: 2018/11/6 13:48 """ """ 1、一個物件能被稱為hashable(可雜湊運算的),它必須有個hash值(雜湊值),這個值在整個執行時刻均不會變化, 而且必須可以進行相等比較。具體來說,一個物件能被稱為hashable,它必須實現__hash__()與__eq__()方法。 2、可以對一個物件使用hash()獲取hash值 3、對於python內建類,建立之後狀態就無法變動的型別,它的例項都是hashable,而可變動型別的例項都是 unhashable型別 4、一個自定義的類建立的例項預設也是hashable的,其__hash__()的實現基本上根據id()計算而來,而__eq__() 的實現預設使用is來比較,因此兩個分別建立的例項hash()值必然不同,而且相等性對比一定不成立。 5、很多時候自定義類預設hashable並不合適,比如自定義座標例項p1=(1,2,3)和p2=(1,2,3),預設情況下這兩個實 例不相等,實際上代表同一個座標。所以需要自定義__hash__()與__eq__()方法。 6、當集合判斷新加入的物件與已經包含的某個物件hash值相同,而且相等性比較也成立時,就會丟棄已包含的物件, 並將新的物件加入。 7、集合判斷是否重複是在物件加入時,當物件已經在集合中了,我們又用其他方式改變了物件狀態,就會造成集合 資料重複,所以hashable要求物件建議狀態不可變動,必要時,加一些存取限制。 8、兩個物件若相等性比較成立,那麼也必須有相同的hash值,然而hash值相同,兩個物件的相等性比較不一定是成 立的。 """ class Point: def __init__(self,x,y,z): self.x = x self.y = y self.z = z def __hash__(self): return 100 * self.z + 10 * self.y + self.x def __eq__(self, other): if hasattr(other,"x") and hasattr(other,"y") and hasattr(other,"z"): return self.x == other.x and self.y == other.y and self.z == other.z return False def __str__(self): return "Point({x},{y},{z})".format(**vars(self)) def __repr__(self): return self.__str__() if __name__ == "__main__": p1 = Point(1,2,3) p2 = Point(3,3,3) p3 = Point(1,2,3) pset = {p1,p2,p3} print(pset) #列印{Point(1,2,3), Point(3,3,3)} p2.x = 1 p2.y = 2 print(pset) #列印{Point(1,2,3), Point(1,2,3)}
相關推薦
Python:hashable協議
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: hash
Python:orderable協議
#!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: [email protected] @software: PyCharm @file: orde
Python爬蟲:HTTP協議、Requests庫
.org clas python爬蟲 print 通用 娛樂 信息 傳輸協議 介紹 HTTP協議: HTTP(Hypertext Transfer Protocol):即超文本傳輸協議。URL是通過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源。
python接口自動化測試一:http協議
連接 -- lencod 本機 新的 ext 種類 默認 nec 1、 http簡介:http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議 2、 url詳解:百度搜索的一個url地址:https://www.baidu.com/s?wd=%E4
python :通過udp協議實現客戶端與服務端的互動
(1)服務端 建立socket 繫結目的ip和埠號、 資料互動 import socket udpSer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #這裡的SOCK_DGRAM 為udp流 udpSe
python應用系列教程——python使用smtp協議傳送郵件:html文字郵件、圖片郵件、檔案附件郵件
全棧工程師開發手冊 (作者:欒鵬) python使用smtp協議傳送電子郵件。包含傳送html文字郵件、包含圖片附件的郵件,包含其他檔案附件的郵件。可設定郵件的收發人,主題,內容。並以163郵件為例,分別在python2.7和python3.6下進行試驗。
python:使用udp協議傳送飛秋訊息
#coding:utf-8 import socket for i in range(200): sock =socket.socket(socket.AF_INET,socket.SOCK_DG
產品經理學Python:參數傳遞方式
暫時 ace 微信公眾 聯網 替代 strong 變參 lose 創建刪除 這是關於Python的第5篇文章,主要介紹下參數傳遞方式和如何設計自己的函數。 (一) 本篇主要介紹2種參數傳遞方式。 位置參數 調用函數時,根據函數定義的參數位置來傳遞參數。 1 def rig
python:類2——有關類和對象的BIF內置函數
subclass 提前 變量 類和對象 ins peer 設置 clas 需要 1、檢查、判斷 issubclass(class, classinfo)如果第一個參數是第二個參數的子類,返回true,註意: 非嚴格(自己可以認為是自己的子類); 第二個參數可以是由多個cl
python:爬蟲0
電驢 cati body nbsp 爬蟲 esp 域名 對象 通過 什麽是網頁爬蟲,也叫網頁蜘蛛。把互聯網比作一個蜘蛛網,有好多節點,這個蜘蛛在網上爬來爬去,對對網頁中的每個關鍵字進行建立索引,然後建立索引數據庫,經過復雜的排序算法後,這些算法的結果將按照相關度的高低展現出
python:正則1
itl .com fis 使用 pos clas nbsp com 正則表達式 魚c(擴展閱讀): Python3 如何優雅地使用正則表達式(詳解一) Python3 如何優雅地使用正則表達式(詳解二) Python3 如何優雅地使用正則表達式(詳解三) Python3 如
python:將numpy數組寫入csv文件
port tor cto imp span bsp pan logs txt 1 import numpy as np 2 np.savetxt(‘E:\\forpython\\featvector.csv‘,data_to_save,delimiter=‘,‘) p
python:類5——Python 的類的下劃線命名有什麽不同?
以及 mod 導入 類成員 部分 span 子類 內部函數 默認 首先是單下劃線開頭,這個被常用於模塊中,在一個模塊中以單下劃線開頭的變量和函數被默認當作內部函數,如果使用 from a_module import * 導入時,這部分變量和函數不會被導入。不過值得註意的
python:網絡爬蟲的學習筆記
估計 mage codec 課程 不能 nic str utf mas 如果要爬取的內容嵌在網頁源代碼中的話,直接下載網頁源代碼再利用正則表達式來尋找就ok了。下面是個簡單的例子: 1 import urllib.request 2 3 html = urllib.re
Python:集合、函數、三元運算符
filename pri other mod 接收參數 系統 != lee 多個參數 集合: #一種數據類型,有去重的功能,無序的(不能根據下標取值) 兩種定義集合方法: 1:先定義一個列表,然後通過強制類型轉換成集合 a=[1,2,3,4,4,5] #set(a) 強制
Python: Pandas的DataFrame如何按指定list排序
不同 需求 per log title 表示 anr lac 使用 本文首發於微信公眾號“Python數據之道”(ID:PyDataRoad) 前言 寫這篇文章的起由是有一天微信上一位朋友問到一個問題,問題大體意思概述如下: 現
分針網——每日分享:HTTP協議理解與應用總結
http 應用總結 領取免費IT資料 加群:272292492 更多文章:www.f-z.cn Request & Response Re
Python:Anaconda安裝虛擬環境到指定路徑
rdquo oat otto 環境 wim uri blog target images 1 曾經的困擾 有段時間,想使用基於不同python版本的anaconda,就直接從官網下載了兩個不同的anaconda版本進行安裝。剛開始的時候,還覺得也沒啥問題。用了一小
python:print含有中文的list
replace imp itl print ins 中文 lis base git Python 的 List 如果有中文的話, 會印出 \xe4\xb8... 等等的編碼(如下所示), 要如何印出中文呢? >>> a = [‘中文‘, ‘ab‘]&g
NS3網絡仿真(12): ICMPv4協議
normal fun rac sequence icmp veh abcde all protoc 快樂蝦http://blog.csdn.net/lights_joy/歡迎轉載,但請保留作者信息ICMP的全稱是 Internet ControlMessage Prot