Python eval 函式說明

2022-07-29 10:27:13 字數 1295 閱讀 3790

ev

al(str [,globals [,locals ]]) -- 函式將字串str當成有效python表示式來求值,並返回計算結果。

例 :  eval('3+4')         ==>  7

>>> a = 1

>>> b = eval("a"

)>>>id(a)

505910960

>>>id(b)

505910960

>>> b = 1000

>>>id(b)

16834704

>>>a

1

這裡牽涉到乙個概念:python的賦值是只是把變數的記憶體位址賦值給另乙個變數,這一點可以使用python的內建方法id()來進行測試

我們假設'qh'這個字串在記憶體中的位址是a,'ljq'在記憶體中的位址是b

you='qh' #讓you變數指向a位址

me=you #讓me變數和you變數一樣指向a位址

you='ljq' #修改you變數,讓它指向到b位址

print you #可想而知you指向的是b位址,所以它的值為'ljq'

print me #me指向的是a位址,所以它的值為'qh'

輸出:ljq

qh

class

foo:

val = 1foo =foo()

print

(foo.val)

==> 1

print

(foo)

==> <__main__.foo object at 0x010153d0>eval_foo = eval("

foo"

)print

(eval_foo)

==> <__main__.foo object at 0x010153d0>eval_foo.val = 1000

print

(foo.val)

==> 1000

eval_foo = eval("foo") 將foo物件的位址傳遞給eval_foo

相當於獲得了乙個引用,所以foo和eval_foo指向的是同乙個物件,當然屬性是一樣的,乙個改變另乙個也會改變.

若新增 eval_foo = foo() 將建立乙個實體物件,記憶體的位址將與foo的記憶體位址不同

ps:如果不想獲得乙個引用 那麼我們就要用到拷貝,包括淺拷貝(copy模組的copy函式)和深拷貝(copy模組中的deepcopy函式)

函式說明python函式巢狀筆記 函式說明

ps 今天上午,非常鬱悶,有很多簡單基礎的問題搞得我有些迷茫,哎,幾天不寫就忘。目前又不當coo,還是得用心記 哦!關於函式內嵌函式作用域的條記 def test i 0defa print locals a printi test 這段,locals 的值為空,說明內嵌的a函式沒有認默引入i de...

CFile Open函式說明

1 nopenflags cfile modecreate 建立乙個新的檔案,如果檔案存在將檔案擷取成長度為0。cfile modenotruncate 此標誌總是與modecreate 配合使用,如果檔案存在,不將檔案擷取成長度為0 如果檔案不存在即建立新檔案。這個功能往往很好用,比如說,當你需要...

signal函式說明

c traps and pitfalls 對signal函式解釋得非常詳細。中void signal int sig,void handler int int int p 這是乙個函式指標,p所指向的函式是乙個不帶任何引數,並且返回值為int的乙個函式.int fun 這個式子與上面式子的區別在於用...