- N +

eval函數(shù)的常用方式,eval方法

pythoninput和eval怎么用

1.指定類型轉(zhuǎn)換

1>>>y=int(input())2103>>>type(y)4<class'int'>

2.自動轉(zhuǎn)換

函數(shù)eval()用來執(zhí)行一個字符串表達(dá)式,并返回表達(dá)式的值

eval(expression,globals[],locals[])

global和locals分別相當(dāng)于全局和局部變量,eval函數(shù)會優(yōu)先在局部變量存儲空間中檢索

1>>>y=eval(input())24.53>>>type(y)4<class'float'>

3.切割轉(zhuǎn)換

利用函數(shù)split()通過指定分隔符對字符串進行切片。

str.split(str="",num=string.count(str))

str為分割符,包括空格、\n,\t等,num是分割次數(shù)。

什么情況下用eval

任何時候都不要用eval,必須用的話也是用ast.literal_eval()。

幾乎用不到input(),因為人的輸入是不可靠的,要n個邏輯判斷輸入的是否是正確。

int用到的地方也不多,用的話,也要先判斷str.isdigit()是否是True。

eval,expression,globals=None,locals=None。

expression:該參數(shù)是一個字符串,python會使用globals字典和locals字典作為全局和局部的命名空間,將expression當(dāng)做一個python表達(dá)式進行解析和計算。

php eval函數(shù)用法總結(jié)

eval定義和用法

eval()函數(shù)把字符串按照PHP代碼來計算。

該字符串必須是合法的PHP代碼,且必須以分號結(jié)尾。

如果沒有在代碼字符串中調(diào)用return語句,則返回NULL。如果代碼中存在解析錯誤,則eval()函數(shù)返回false。

語法

eval(phpcode)

參數(shù)描述

phpcode必需。規(guī)定要計算的PHP代碼。

提示和注釋

注釋:返回語句會立即終止對字符串的計算。

注釋:該函數(shù)對于在數(shù)據(jù)庫文本字段中供日后計算而進行的代碼存儲很有用。

例子

$string

$time

$str

echo$str

eval$str$str

echo$str

輸出:

Thisisa$string$timemorning!

Thisisabeautifulwintermorning!

eval()函數(shù)在CodeIgniter框架里也有用到。在/system/database/DB.php文件中,根據(jù)系統(tǒng)的配置動態(tài)的定義了一個類CI_DB,具體代碼片段如下:

if(!isset($active_record)OR$active_record==TRUE)

{

require_once(BASEPATH.'database/DB_active_rec.php');

if(!class_exists('CI_DB'))

{//www.jbxue.com

eval('classCI_DBextendsCI_DB_active_record{}');

}

}

else

{

if(!class_exists('CI_DB'))

{

eval('classCI_DBextendsCI_DB_driver{}');

}

}

require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php');

//InstantiatetheDBadapter

$driver='CI_DB_'.$params['dbdriver'].'_driver';

$DB=new$driver($params);

本函式可將字符串之中的變量值代入,通常用在處理數(shù)據(jù)庫的數(shù)據(jù)上。參數(shù)code_str為欲處理的字符串。值得注意的是待處理的字符串要符合PHP的字符串格式,同時在結(jié)尾處要有分號。使用本函式處理后的字符串會沿續(xù)到PHP程序結(jié)束。

eval函數(shù)為什么會出現(xiàn)無效語法

一般都有以下兩個原因:

1.函數(shù)位于需要調(diào)用該函數(shù)的函數(shù)之后;

2.函數(shù)的傳參有問題。

函數(shù)調(diào)用無效解決方法:

若報錯:某個函數(shù)沒有聲明

這種情況一般都是因為該被調(diào)用的函數(shù)位于需要調(diào)用的函數(shù)之后,這種錯誤的原因是,程序在運行的過程中;

由于在調(diào)用函數(shù)的時候我們在調(diào)用之前沒有聲明/定義該函數(shù),編譯就會認(rèn)為該函數(shù)不存在。

這種錯誤有兩種解決辦法:

將被調(diào)用函數(shù)放在想要調(diào)用該函數(shù)的函數(shù)之前。

但這種方式實現(xiàn)的方式很麻煩,所以就有了第二種一勞永逸的方式。

在頭文件之后增加函數(shù)聲明。

函數(shù)聲明的格式:

函數(shù)返回值類型函數(shù)名(傳入該函數(shù)的參數(shù))。

eval和input的區(qū)別

input()函數(shù)接受一個標(biāo)準(zhǔn)輸入數(shù)據(jù),返回為string類型,接收一個prompt參數(shù),表示要輸入的提示信息;eval()函數(shù)把輸入的字符串表達(dá)式當(dāng)Python語句來執(zhí)行,并返回該語句執(zhí)行結(jié)果,該方法還能使字符串本身的引號去掉,保留字符的原本屬性,可接收以下3個參數(shù):expression–表達(dá)式,globals–變量作用域,全局命名空間,如果被提供,則必須是一個字典對象,locals–變量作用域,局部命名空間,如果被提供,可以是任何映射對象。

eval和exec函數(shù)的區(qū)別

在python中可以使用import語句來導(dǎo)入一個模塊,當(dāng)導(dǎo)入一個不存在的模塊時會拋出一個ImportError異常,所以可以使用try-catch語句來捕獲這個異常,相應(yīng)的代碼如下:

當(dāng)然,題主的意思可能模塊名需要用戶輸入,而不是像這樣寫死在代碼里的,這就需要使用python的一個內(nèi)置函數(shù)exec(注意是exec而不是eval,eval只能執(zhí)行表達(dá)式),exec函數(shù)接收一個字符串參數(shù)并把這個字符串當(dāng)做一條python語句執(zhí)行,改進后的代碼如下:

當(dāng)然還有另一種思路,可以通過piplist或pipfreeze命令來獲取全部已經(jīng)安裝的模塊,并判斷該模塊是否在其中,可以通過字符串匹配或正則表達(dá)式來判斷模塊是否在列表中,而為了獲取piplist命令的返回結(jié)果,需要使用os模塊的popen函數(shù)(不能使用system函數(shù)因為這個函數(shù)無法得到命令的輸出結(jié)果),相應(yīng)的代碼如下:

返回列表
上一篇:
下一篇: