Python 一些值得注意的地方

2021-07-03 22:40:48 字數 1344 閱讀 8323

>>> 

if' ':

...

print

'not false'

...

not false

>>>

if'':

...

print

'not false'

...

def

get(*agrs):

return

"global func abc"

defi

():pass

class

a(object):

__getattr__ = get

bound_func = i

deff1(self):

pass

a = a()

print a.bound_func

# >

a.i = i

print a.i

#

a.i = i僅僅是將全域性函式i作為例項a的屬性。

而在類中定義類屬性bound_func = i,類生成例項後會成為bound function

class

mainclass

(object):

# func = abc #: error name '***' is not defined

def__init__

(self):

self.func = abc

self.message = message

defabc

():pass

message = "this is a message"

a = mainclass()

print a.func

print a.message

是可以執行成功的,即使函式和變數定義在類下面,但是類還是能成功生成例項,並且把它們作為例項屬性。

不過如果不是放在例項的初始化特殊方法__init__中,而是作為類變數,那麼會報熟悉的name '***' is not defined。必須把函式和變數的定義放在類上面。

懶得深究!個人猜測,python是動態語言,執行時會自上而下掃瞄整個檔案。探測到類屬性的定義,變數的定義在類之下,便會找不到變數。但是__init__為例項的構造方法,例項化類時才會呼叫,所以例項化的時候,python已經掃瞄過了整個檔案,故不會找不到變數。

SQL指令中一些特別值得注意的地方

sql基本指令要頻繁使用,要是理解錯了,將來工作一定會出現很大的麻煩。今天再重新梳理一下基本的sql語法 in 這個指令,我曾經發生過把它和python中的in搞混的錯誤。python中的in和sql中的between對應。in可以讓我們依照數個不連續的值的限制從資料 中抓取元素。between 在...

一些值得注意的演算法題 樹

遞迴方法 先遍歷當前節點,然後左子樹,然後右子樹 class solution 迭代方法 因為棧的出入會逆序,所以先遍歷當前節點,然後插入右子樹,然後插入左子樹 遞迴方法 先遍歷左子樹,然後當前節點,然後右子樹 class solution 迭代方法 先找到最左的節點,期間不斷將經過的節點壓入棧,出...

防範sql注入值得注意地方

sql注入是大家基本都清楚,一般來說用引數化就能解決注入的問題,也是最好的解決方式。有次技術群裡問到乙個問題,如下圖 很顯然tablename是外部傳遞過來的,暫時不考慮具體的業務環境,但如果以select from table 把錶名稱當引數肯定是不能執行的,如果是拼接sql會有注入的危險。那麼此...