亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python中關(guān)于eval函數(shù)的使用及說明

 更新時(shí)間:2023年05月29日 17:14:48   作者:滌生大數(shù)據(jù)  
這篇文章主要介紹了python中關(guān)于eval函數(shù)的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

eval是Python的一個(gè)內(nèi)置函數(shù),功能十分強(qiáng)大,這個(gè)函數(shù)的作用是,返回傳入字符串的表達(dá)式的結(jié)果。

就是說:將字符串當(dāng)成有效的表達(dá)式 來求值 并 返回計(jì)算結(jié)果。

eval函數(shù)就是實(shí)現(xiàn)list、dict、tuple與str之間的轉(zhuǎn)化,同樣str函數(shù)把list,dict,tuple轉(zhuǎn)為為字符串

1.eval的語法

eval(expression[, globals[, locals]])
  • expression : 表達(dá)式。
  • globals : (可選參數(shù))變量作用域,全局命名空間,如果被提供,則必須是一個(gè)字典對(duì)象。
  • locals : (可選參數(shù))變量作用域,局部命名空間,如果被提供,可以是任何映射對(duì)象。

既然eval有兩個(gè)可選參數(shù)是命名空間,那么先搞清楚啥是命名空間吧?

2.命名空間

定義

名稱到對(duì)象的映射。python是用命名空間來記錄變量的軌跡的,命名空間是一個(gè)dictionary,鍵是變量名,值是變量值。各個(gè)命名空間是獨(dú)立沒有關(guān)系的,一個(gè)命名空間中不能有重名,但是不同的命名空間可以重名而沒有任何影響。

分類

python程序執(zhí)行期間會(huì)有2個(gè)或3個(gè)活動(dòng)的命名空間(函數(shù)調(diào)用時(shí)有3個(gè),函數(shù)調(diào)用結(jié)束后2個(gè))。按照變量定義的位置,可以劃分為以下3類:

  • Local,局部命名空間,每個(gè)函數(shù)所擁有的命名空間,記錄了函數(shù)中定義的所有變量,包括函數(shù)的入?yún)ⅰ?nèi)部定義的局部變量。
  • Global,全局命名空間,每個(gè)模塊加載執(zhí)行時(shí)創(chuàng)建的,記錄了模塊中定義的變量,包括模塊中定義的函數(shù)、類、其他導(dǎo)入的模塊、模塊級(jí)的變量與常量。
  • Built-in,python自帶的內(nèi)建命名空間,任何模塊均可以訪問,放著內(nèi)置的函數(shù)和異常。

生命周期

  • Local(局部命名空間)在函數(shù)被調(diào)用時(shí)才被創(chuàng)建,但函數(shù)返回結(jié)果或拋出異常時(shí)被刪除。(每一個(gè)遞歸函數(shù)都擁有自己的命名空間)。
  • Global(全局命名空間)在模塊被加載時(shí)創(chuàng)建,通常一直保留直到python解釋器退出。
  • Built-in(內(nèi)建命名空間)在python解釋器啟動(dòng)時(shí)創(chuàng)建,一直保留直到解釋器退出。

各命名空間創(chuàng)建順序:

python解釋器啟動(dòng) ->創(chuàng)建內(nèi)建命名空間 -> 加載模塊 -> 創(chuàng)建全局命名空間 ->函數(shù)被調(diào)用 ->創(chuàng)建局部命名空間

各命名空間銷毀順序:

函數(shù)調(diào)用結(jié)束 -> 銷毀函數(shù)對(duì)應(yīng)的局部命名空間 -> python虛擬機(jī)(解釋器)退出 ->銷毀全局命名空間 ->銷毀內(nèi)建命名空間

python解釋器加載階段會(huì)創(chuàng)建出內(nèi)建命名空間、模塊的全局命名空間,局部命名空間是在運(yùn)行階段函數(shù)被調(diào)用時(shí)動(dòng)態(tài)創(chuàng)建出來的,函數(shù)調(diào)用結(jié)束動(dòng)態(tài)的銷毀的。

python的全局命名空間存儲(chǔ)在一個(gè)叫g(shù)lobals()的dict對(duì)象中;局部命名空間存儲(chǔ)在一個(gè)叫l(wèi)ocals()的dict對(duì)象中。

可以用print (locals())來查看該函數(shù)體內(nèi)的所有變量名和變量值。

print(locals()) ?#打印顯示所有的局部變量
'''
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001B22E13B128>,
'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/pythoyworkspace/file_demo/Class_Demo/pachong/urllib_Request1.py',
'__cached__': None, 's': '1+2+3*5-2', 'x': 1, 'age': 18}
Process finished with exit code 0

3.參數(shù)查找

當(dāng)后兩個(gè)參數(shù)都為空時(shí),很好理解,就是一個(gè)string類型的算術(shù)表達(dá)式,計(jì)算出結(jié)果即可。等價(jià)于eval(expression)。

當(dāng)locals參數(shù)為空,globals參數(shù)不為空時(shí),先查找globals參數(shù)中是否存在變量,并計(jì)算。

當(dāng)兩個(gè)參數(shù)都不為空時(shí),先查找locals參數(shù),再查找globals參數(shù)。

4.eval的使用演示

#1.eval無參實(shí)現(xiàn)字符串轉(zhuǎn)化
s = '1+2+3*5-2'
print(eval(s)) ?#16
#2.字符串中有變量也可以
x = 1
print(eval('x+2')) ?#3
#3.字符串轉(zhuǎn)字典
print(eval("{'name':'linux','age':18}"))
#輸出結(jié)果:{'name':'linux','age':18}
#4.eval傳遞全局變量參數(shù),注意字典里的:age中的age沒有帶引號(hào),說明它是個(gè)變量,而不是字符串。
#這里兩個(gè)參數(shù)都是全局的
print(eval("{'name':'linux','age':age}",{"age":1822}))
#輸出結(jié)果:{'name': 'linux', 'age': 1822}
print(eval("{'name':'linux','age':age}",{"age":1822},{"age":1823}))
#輸出結(jié)果:{'name': 'linux', 'age': 1823}
#eval傳遞本地變量,既有g(shù)lobal和local時(shí),變量值先從local中查找。
age=18
print(eval("{'name':'linux','age':age}",{"age":1822},locals()))
#輸出結(jié)果:{'name': 'linux', 'age': 18}
print("-----------------")
print(eval("{'name':'linux','age':age}"))

5.eval的使用與風(fēng)險(xiǎn)

python3中input將接受的結(jié)果存為字符串,一般來說,可以使用eval實(shí)現(xiàn)表達(dá)式的還原,并且實(shí)現(xiàn)表達(dá)式的計(jì)算

比如下面使用eval直接完成了表達(dá)式的還原與計(jì)算:

>>> s = input("輸入一個(gè)表達(dá)式")
輸入一個(gè)表達(dá)式:1+3+4+4*3
>>> print(eval(s))
20
>>>

eval雖然方便,但是要注意安全性,可以將字符串轉(zhuǎn)成表達(dá)式并執(zhí)行,就可以利用執(zhí)行系統(tǒng)命令,刪除文件等操作。

比如用戶惡意輸入就會(huì)獲得當(dāng)前目錄文件

>>>eval("__import__('os').system('dir')")
 驅(qū)動(dòng)器 C 中的卷是 OS
 卷的序列號(hào)是 B234-8A38
 
 C:\Users\Robot_TENG 的目錄
 
2019-07-01  09:11    <DIR>          .
2019-07-01  09:11    <DIR>          ..
2017-11-23  16:15    <DIR>          .android
2018-12-23  00:02    <DIR>          .conda
2018-12-06  19:08                20 .dbshell
2017-12-01  19:28    <DIR>          .eclipse
2018-01-22  22:46    <DIR>          .idea-build
2017-12-31  14:49    <DIR>          .IdeaIC2017.1
2018-01-22  21:21    <DIR>          .IdeaIC2017.2
2019-07-01  09:11    <DIR>          .ipynb_checkpoints
2018-12-19  20:04    <DIR>          .ipython
2019-07-01  09:30    <DIR>          .jupyter
2017-12-01  16:11    <DIR>          .m2
2017-12-31  23:14                 0 .mongorc.js
2019-02-03  22:52    <DIR>          .p2
2018-07-16  22:04    <DIR>          .PyCharm2016.1
2018-12-06  19:49    <DIR>          .rdm
2018-01-22  22:09               580 .scala_history
2018-12-06  19:19    <DIR>          .vscode
2019-06-21  16:37    <DIR>          3D Objects
2019-06-21  16:37    <DIR>          Contacts
2019-07-01  16:21    <DIR>          Desktop
2019-06-28  16:34    <DIR>          Documents
2019-06-28  10:26    <DIR>          Downloads
2018-09-11  22:24    <DIR>          Evernote
2019-06-21  16:37    <DIR>          Favorites
2018-08-02  23:58    <DIR>          HBuilder
2018-08-03  00:00    <DIR>          HBuilder settings
2018-08-03  00:02    <DIR>          HBuilderProjects
2019-06-21  16:37    <DIR>          Links
2019-06-21  16:37    <DIR>          Music
2018-03-18  00:22    <DIR>          Oracle
2019-06-21  16:37    <DIR>          Pictures
2019-06-21  16:37    <DIR>          Saved Games
2019-06-21  16:37    <DIR>          Searches
2018-12-23  00:47               690 Untitled.ipynb
2019-07-01  09:11                72 Untitled1.ipynb
2019-06-30  18:43    <DIR>          Videos
2019-01-13  18:20    <DIR>          Yinxiang Biji
               5 個(gè)文件          1,362 字節(jié)
              34 個(gè)目錄 72,365,862,912 可用字節(jié)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 最小公倍數(shù)Python實(shí)現(xiàn)的方法例子

    最小公倍數(shù)Python實(shí)現(xiàn)的方法例子

    這篇文章介紹了兩種計(jì)算最小公倍數(shù)的方法:輾轉(zhuǎn)相除法(歐幾里德法)和相減法(更相減損法),這兩種方法分別基于求最大公約數(shù)的不同原理,需要的朋友可以參考下
    2024-11-11
  • 超簡單的Matplotlib安裝與配置教程

    超簡單的Matplotlib安裝與配置教程

    Matplotlib是Python的第三方繪圖庫,它非常類似于MATLAB,在使用Matplotlib軟件包之前需要對(duì)其進(jìn)行安裝,這篇文章主要給大家介紹了關(guān)于Matplotlib安裝與配置的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • python構(gòu)建指數(shù)平滑預(yù)測模型示例

    python構(gòu)建指數(shù)平滑預(yù)測模型示例

    今天小編就為大家分享一篇python構(gòu)建指數(shù)平滑預(yù)測模型示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python?3.x踩坑實(shí)戰(zhàn)匯總

    Python?3.x踩坑實(shí)戰(zhàn)匯總

    因項(xiàng)目需要最近接手維護(hù)后續(xù)python程序并做后續(xù)開發(fā),下面這篇文章主要給大家介紹了關(guān)于Python?3.x踩坑的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • Pandas標(biāo)記刪除重復(fù)記錄的方法

    Pandas標(biāo)記刪除重復(fù)記錄的方法

    下面小編就為大家分享一篇Pandas標(biāo)記刪除重復(fù)記錄的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • DataFrame 數(shù)據(jù)合并實(shí)現(xiàn)(merge,join,concat)

    DataFrame 數(shù)據(jù)合并實(shí)現(xiàn)(merge,join,concat)

    這篇文章主要介紹了DataFrame 數(shù)據(jù)合并實(shí)現(xiàn)(merge,join,concat),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Python+radar實(shí)現(xiàn)隨機(jī)日期時(shí)間的生成

    Python+radar實(shí)現(xiàn)隨機(jī)日期時(shí)間的生成

    Python有廣泛豐富的第三方庫,在沒有特殊定制下,避免了重復(fù)造輪子。本文將利用radar庫實(shí)現(xiàn)生成隨機(jī)的日期或時(shí)間,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • Python使用TextRank算法提取關(guān)鍵詞

    Python使用TextRank算法提取關(guān)鍵詞

    textrank是在pagerank的基礎(chǔ)上提出來的。PageRank對(duì)于每個(gè)網(wǎng)頁頁面都給出一個(gè)正實(shí)數(shù),表示網(wǎng)頁的重要程度,PageRank值越高,表示網(wǎng)頁越重要,在互聯(lián)網(wǎng)搜索的排序中越可能被排在前面
    2022-12-12
  • Python實(shí)現(xiàn)雙軸組合圖表柱狀圖和折線圖的具體流程

    Python實(shí)現(xiàn)雙軸組合圖表柱狀圖和折線圖的具體流程

    這篇文章主要介紹了Python雙軸組合圖表柱狀圖+折線圖,Python繪制雙軸組合的關(guān)鍵在plt庫的twinx()函數(shù),具體實(shí)例代碼跟隨小編一起看看吧
    2021-08-08
  • python之DataFrame實(shí)現(xiàn)excel合并單元格

    python之DataFrame實(shí)現(xiàn)excel合并單元格

    這篇文章主要為大家詳細(xì)介紹了python之DataFrame實(shí)現(xiàn)excel合并單元格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04

最新評(píng)論