看到一段代碼,判讀輸入的數字,用的是eval(input()),查了一下,原來input()會把所有輸入值,包括數字,視為字符串,而eval()會去掉字符串最外層的引號,然后當做Python語句執行[mark:語句or表達式,應該是表達式!],直觀理解是:看起來像數字的字符串變成數字了。。。
>>> a = input() 123 >>> type(a) <class 'str'> >>> b = eval(input()) 456 >>> type(b) <class 'int'> >>>
一個反例
>>> a = eval("'pybook'") >>> a 'pybook'
所以本質上,eval是去一層引號,然后按語句執行,eval(input())本質是一個取輸入數字的技巧
如果不用eval,怎么取輸入的數字?
可以用int, float轉數據類型,但效果不如eval
一點補充說明
對於eval(input()),input隱含會在輸入最外層加一層引號,即把輸入視為一個字符串,eval隱含會去最外層引號,如果輸入的字符串帶了引號,則這個引號會保留,看下面的例子
>>> guess = input() 0x452//2 >>> guess '0x452//2' >>> guess = eval(input()) 0x452//2 >>> guess 553 >>> guess = eval(input()) '0x452//2' >>> guess '0x452//2' #保留輸入的引號 >>> guess = input() '0x452//2' >>> guess "'0x452//2'" #2層引號 >>>