Python踩坑指南(第三季)

2021-09-26 21:35:49 字數 2164 閱讀 6718

在**維護的過程中,發現需要對某個變數進行保護,不允許呼叫修改,之前我一直使用的是_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....