欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解python eval函數(shù)的妙用

 更新時(shí)間:2017年11月16日 17:14:55   投稿:zx  
這篇文章主要介紹了詳解python eval函數(shù)的妙用,詳細(xì)介紹了python eval函數(shù)的具體用法和實(shí)例,有興趣的可以了解一下

python eval函數(shù)功能:將字符串str當(dāng)成有效的表達(dá)式來求值并返回計(jì)算結(jié)果。

函數(shù)定義:

eval(expression, globals=None, locals=None)

將字符串str當(dāng)成有效的表達(dá)式來求值并返回計(jì)算結(jié)果。globals和locals參數(shù)是可選的,如果提供了globals參數(shù),那么它必須是dictionary類型;如果提供了locals參數(shù),那么它可以是任意的map對象。

python的全局名字空間存儲在一個(gè)叫g(shù)lobals()的dict對象中;局部名字空間存儲在一個(gè)叫l(wèi)ocals()的dict對象中。我們可以用print (locals())來查看該函數(shù)體內(nèi)的所有變量名和變量值。

Python版本兼容:

  1. Python2.7
  2. Python3.x

eval()主要作用:

1)在編譯語言里要?jiǎng)討B(tài)地產(chǎn)生代碼,基本上是不可能的,但動(dòng)態(tài)語言是可以,意味著軟件已經(jīng)部署到服務(wù)器上了,但只要作很少的更改,只好直接修改這部分的代碼,就可立即實(shí)現(xiàn)變化,不用整個(gè)軟件重新加載。
2)在machin learning里根據(jù)用戶使用這個(gè)軟件頻率,以及方式,可動(dòng)態(tài)地修改代碼,適應(yīng)用戶的變化。

英文解釋:

The arguments are a string and optional globals and locals. If provided, globals must be a dictionary. If provided, locals can be any mapping object.

The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local namespace. If the globals dictionary is present and lacks ‘__builtins__', the current globals are copied into globals before expression is parsed. This means that expression normally has full access to the standard builtins module and restricted environments are propagated. If the locals dictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment where eval() is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example:

例子:

a=1
g={'a':20}
eval("a+1",g)

結(jié)果:
1

例子2, 測試globals, locals

x = 1
y = 1
num1 = eval("x+y")
print (num1)
def g(): 
 x = 2 
 y = 2 
 num3 = eval("x+y") 
 print (num3)  
 num2 = eval("x+y",globals()) 
 #num2 = eval("x+y",globals(),locals()) 
 print (num2)
  
g()

num1的值是2;num3的值也很好理解,是4;num2的值呢?由于提供了globals()參數(shù),那么首先應(yīng)當(dāng)找全局的x和y值,也就是都為1,那么顯而易見,num2的值也是2。如果注釋掉該句,執(zhí)行下面一句呢?根據(jù)第3)點(diǎn)可知,結(jié)果為4

實(shí)例展示:

可以把list,tuple,dict和string相互轉(zhuǎn)化。

#################################################
字符串轉(zhuǎn)換成列表
>>>a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>>type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> type(b)
<type 'list'>
#################################################
字符串轉(zhuǎn)換成字典
>>> a = "{1: 'a', 2: 'b'}"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
{1: 'a', 2: 'b'}
>>> type(b)
<type 'dict'>
#################################################
字符串轉(zhuǎn)換成元組
>>> a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
>>> type(a)
<type 'str'>
>>> b = eval(a)
>>> print b
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
>>> type(b)
<type 'tuple'>

安全問題:

因?yàn)閑val的特型, 很可能被黑客利用,造成安全問題。

怎么避免安全問題?

1、自行寫檢查函數(shù);

2、使用ast.literal_eval代替

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python的virtualenv虛擬環(huán)境常見問題和命令

    python的virtualenv虛擬環(huán)境常見問題和命令

    在Python中,venv是一個(gè)用于創(chuàng)建和管理虛擬環(huán)境的模塊,虛擬環(huán)境可以幫助你在項(xiàng)目之間隔離不同的Python包和依賴關(guān)系,這篇文章主要介紹了python的virtualenv虛擬環(huán)境常見問題和命令,需要的朋友可以參考下
    2024-07-07
  • PyCharm第一次安裝及使用教程

    PyCharm第一次安裝及使用教程

    本文通過圖文并茂的形式給大家介紹PyCharm第一次安裝及使用教程,分步驟通過實(shí)際案例給大家操作演示,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python中pygame的mouse鼠標(biāo)事件用法實(shí)例

    Python中pygame的mouse鼠標(biāo)事件用法實(shí)例

    這篇文章主要介紹了Python中pygame的mouse鼠標(biāo)事件用法,以完整實(shí)例形式詳細(xì)分析了pygame響應(yīng)鼠標(biāo)事件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • 關(guān)于Pycharm安裝第三方庫超時(shí) Read time-out的問題

    關(guān)于Pycharm安裝第三方庫超時(shí) Read time-out的問題

    這篇文章主要介紹了關(guān)于Pycharm安裝第三方庫超時(shí) Read time-out的問題, 找了幾個(gè)命令都不是很好用,最后找到解決的步驟,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • Python如何實(shí)現(xiàn)機(jī)器人聊天

    Python如何實(shí)現(xiàn)機(jī)器人聊天

    這篇文章主要介紹了Python如何實(shí)現(xiàn)機(jī)器人聊天,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • Python try except異常捕獲機(jī)制原理解析

    Python try except異常捕獲機(jī)制原理解析

    這篇文章主要介紹了Python try except異常捕獲機(jī)制原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python常用排序算法的實(shí)現(xiàn)代碼

    python常用排序算法的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python常用排序算法的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Jupyter notebook之如何快速打開ipynb文件

    Jupyter notebook之如何快速打開ipynb文件

    這篇文章主要介紹了Jupyter notebook之如何快速打開ipynb文件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python運(yùn)維自動(dòng)化之nginx配置文件對比操作示例

    Python運(yùn)維自動(dòng)化之nginx配置文件對比操作示例

    這篇文章主要介紹了Python運(yùn)維自動(dòng)化之nginx配置文件對比操作,涉及Python針對文件的讀取、遍歷、比較進(jìn)而達(dá)到差異對比的相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • 利用python計(jì)算均值、方差和標(biāo)準(zhǔn)差(Numpy和Pandas)

    利用python計(jì)算均值、方差和標(biāo)準(zhǔn)差(Numpy和Pandas)

    這篇文章主要給大家介紹了關(guān)于利用python計(jì)算均值、方差和標(biāo)準(zhǔn)差的相關(guān)資料,Numpy在Python中是一個(gè)通用的數(shù)組處理包,它提供了一個(gè)高性能的多維數(shù)組對象和用于處理這些數(shù)組的工具,它是使用Python進(jìn)行科學(xué)計(jì)算的基礎(chǔ)包,需要的朋友可以參考下
    2023-11-11

最新評論