為什麼python代碼有時候在命令行下和Python Shell中執行的結果不一樣呢 ?
12-29
比如上例,同樣是使用ctypes類庫調用C語言中的printf功能,前者輸出的是需要輸出的對象,而後者卻輸出了字元串的長度。。。
這個例子非常有意思,無人邀請,我來答一下吧。
使用不熟悉的函數和library是危險的。
使用不熟悉的函數和library是危險的。
使用不熟悉的函數和library是危險的。重要的話說三遍。首先,先看這個例子,只是把helloworld.cpp 略加改動,題主覺得這個代碼應當輸出什麼結果?#include &
#include &
using namespace std;
int main() 答案是這樣:
{
cout&<&
這告訴我們一個基本的事實,叫做C中的 printf 函數,實際上返回一個值,這個值代表了它輸出的字元的數目,注意是輸出的字元數目,而非參數的長度。
因此,當你使用script來運行代碼的時候,一切當然都是正常的,這是我的結果:
你其實看到的輸出並不是stdout,而是Python向stdout中輸出的內容,因為idle中的顯示就是修改stdout來實現的。
為了再次說明這個道理,我把我的 Anaconda Python 的REPL的結果截圖放在這裡,來告訴你,code的結果,在cmd里是可以看到的。
========================== 2015-12-7 ===============================
感謝 @bhuztez@柯豪 @壯壯,之前的答案有錯誤,謝謝指出,我已經改正了。首先,如上面 @柯豪 的答案所說,Shell的行為並不完全和Python代碼一致
&>&>&> for i in range(5):
... i
...
0
1
2
3
4
主要是因為這東西變了.
而c庫中的標準的輸出沒改變.具體可以看這個文章 http://eli.thegreenplace.net/2015/redirecting-all-kinds-of-stdout-in-python/推薦閱讀:
※Python 曾經開發過哪些了不起的程序或遊戲?
※Python分析中文文字有哪些方法,那些庫?
※會了django還有必要學flask嗎?
※學習python有什麼好的視頻?
※請問有哪些優秀Python課程推薦?