Kernighan と Ritchie の C プログラミングの本にある C プログラムのいくつかを模倣しようとしていますが、getchar() で問題が発生しました。初期プログラムは動作していますが、 getchar() を独自のファイル stdio.py に移動すると、 import stdioを宣言した後のstdio.getchar()などの呼び出しでのみ機能し、宣言タイプが : from stdio importの呼び出しでは機能しません* **getchar() の形式で呼び出しを使用します。
FileCopy.py の作業コード
import stdio
import StringIO
def FileCopy():
c = stdio.getchar()
while (c!=stdio.EOF):
stdio.putchar(c)
c = stdio.getchar()
if __name__ == "__main__":
SRC = raw_input(">>")
print "Echoe: ",
stdio.FP = StringIO.StringIO(SRC)
FileCopy()
私の stdio.py のコード
"""
Python implementation of getchar
"""
EOF =""
# python specific
import StringIO
FP = None
def getchar():
if FP:
return FP.read(1)
def ungetc(c=''):
if FP:
FP.seek(-1, os.SEEK_CUR)
def putchar(c):
print c,
ここまではOK。ただし、stdio.getchar() の呼び出しは見苦しく見えるので、フォーム stdio import *を使用してそれらを削除しました。主なアイデアは、読みやすさのためにすべてのプレフィックスを削除することでした。stdio.py に変更は加えられていません。
"""
File Copy
Kernighan Ritchie page 16
stdio has been created in Python file stdio.py
and defines standard output functions putchar,getchar and EOF
"""
from stdio import *
import StringIO
def FileCopy():
c = getchar()
while (c!=EOF):
putchar(c)
c = getchar()
if __name__ == "__main__":
SRC = raw_input(">>")
print "Echoe: ",
FP = StringIO.StringIO(SRC)
FileCopy()
出力;
FP 変数は常に NONE を返すため、getchar() を無限に呼び出します。したがって、出力シェルで無限の NONE を取得します。
質問。最初の例では stdio.py の FP 変数が初期化され、2 番目の例では初期化されないのはなぜですか? 簡単な修正はありますか?