国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解python eval函數的妙用

2020-02-16 10:45:14
字體:
來源:轉載
供稿:網友

python eval函數功能:將字符串str當成有效的表達式來求值并返回計算結果。

函數定義:

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

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

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

Python版本兼容:

    Python2.7 Python3.x

eval()主要作用:

1)在編譯語言里要動態地產生代碼,基本上是不可能的,但動態語言是可以,意味著軟件已經部署到服務器上了,但只要作很少的更改,只好直接修改這部分的代碼,就可立即實現變化,不用整個軟件重新加載。
2)在machin learning里根據用戶使用這個軟件頻率,以及方式,可動態地修改代碼,適應用戶的變化。

英文解釋:

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=1g={'a':20}eval("a+1",g)

結果:
1

例子2, 測試globals, locals

x = 1y = 1num1 = 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()參數,那么首先應當找全局的x和y值,也就是都為1,那么顯而易見,num2的值也是2。如果注釋掉該句,執行下面一句呢?根據第3)點可知,結果為4

實例展示:

可以把list,tuple,dict和string相互轉化。

#################################################字符串轉換成列表>>>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'>#################################################字符串轉換成字典>>> a = "{1: 'a', 2: 'b'}">>> type(a)<type 'str'>>>> b = eval(a)>>> print b{1: 'a', 2: 'b'}>>> type(b)<type 'dict'>#################################################字符串轉換成元組>>> 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'>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 定陶县| 东兰县| 新民市| 景泰县| 荆门市| 昌图县| 义马市| 常熟市| 芜湖县| 安岳县| 遂宁市| 九寨沟县| 浑源县| 义马市| 长乐市| 云和县| 正定县| 玉树县| 南川市| 叶城县| 河池市| 湄潭县| 合阳县| 北票市| 阿鲁科尔沁旗| 辽源市| 高陵县| 大悟县| 秦安县| 疏附县| 昭通市| 当雄县| 华池县| 天水市| 渝中区| 女性| 蓬溪县| 镇康县| 军事| 柳河县| 综艺|