在**維護的過程中,發現需要對某個變數進行保護,不允許呼叫修改,之前我一直使用的是_x或者__x的形式,這樣做只是避免展示,但是如果想要強行修改,還是可以變更的,為了保證高安全性,這邊可以參考@property的形式:
class test(object):
"""docstring for test"""
def __init__(self, arg):
self._arg = arg
@property
def arg(self):
return self._arg
@arg.setter
def set_arg(self,val):
self._arg=val
當想修改arg的值的時候,必須通過set_arg去修改,雖然仍然可以通過改_arg的方式,但是相對直接暴露多了一層保護;除此之外,它還可以實現一定的邏輯轉化:
in [10]: class test(object):
...: """docstring for test"""
...: def __init__(self, arg):
...: self._arg = arg
...: self._half_arg = arg/2
...:
...: @property
...: def arg(self):
...: return self._arg
...:
...: @property
...: def half_arg(self):
...: return self._half_arg
...:
...: @arg.setter
...: def set_arg(self,val):
...: self._arg=val
...: self._half_arg = val/2
...:
in [11]: t=test(10)
in [12]: t.arg
out[12]: 10
in [13]: t.half_arg
out[13]: 5.0
in [14]: t.set_arg=20
in [15]: t.arg
out[15]: 20
in [16]: t.half_arg
out[16]: 10.0
利用none!=none的性質可以進行快速去none,比如:
a = df[df.label_y==df.label_y]
可以快速的把label_y=none的列進行剔除,比dropna要快一些。
traceback可以很好的把錯誤資訊進行暴露,
try:
1/0except exception,e:
print e
如果這樣包起來錯誤的花,輸出結果是integer division or modulo by zero,只知道是報了這個錯,但是卻不知道在哪個檔案哪個函式哪一行報的錯
如果使用traceback:
try:
1/0except exception as e:
traceback.print_exc()
輸出結果是:
traceback (most recent call last):
file 「test_traceback.py」, line 3, in
1/0
zerodivisionerror: integer division or modulo by zero
這個還不是精髓的,如果說在乙個服務中,或者大型專案中,我們不會時時刻刻去盯著程序,還可以進行落日誌,方便後續檢視:
traceback.print_exc(file=open('tb.txt','w+'))
import time
try:
1/0except exception as e:
traceback.print_exc(file=open(str(time.time())+'.txt','w+'))
第三季複習
其實這個複習工作,在每一小節之後複習是最好的,現在搞得真是累,都要從頭看到尾,像是要重新複習一遍,搞得考試拖後很多,真是得不償失啊.所以這個要改變方法,每節之後需要認真複習一遍,把提綱寫下來,之後複習起來就容易很多了.2.列舉與類的靜態成員 首先建立乙個new 乙個enum,建立male和femal...
(第三季)210 事件
事件 事件 event 基於委託,為委託提供了乙個發布 訂閱機制,我們可以說事件是一種具有特殊簽名的委託。什麼是事件?事件 event 是類或物件向其他類或物件通知發生的事情的一種特殊簽名的委託.事件的宣告 public event 委託型別 事件名 通常事件的命名,以名字 event 作為他的名稱...
Python踩坑指南(第二季)
本期圍繞jieba講乙個我遇到的實際問題,在同乙個服務裡,存在兩個不同介面a和b,都用到了jieba分詞,區別在於兩者需要呼叫不同的詞庫,巧合中,存在以下情況 詞庫a 幹拌麵 詞庫b 乾拌 面 在服務啟動的時候,由於詞庫a優先被載入了,再去載入詞庫b的時候發現,並沒有載入成功 介面a中 jieba....