毎日pythonを勉強します.(4)
10919 ワード
==============================================================================================================================
==============================================================================================================================
1.import【转】(http://www.cnblogs.com/dajianshi/archive/2012/12/28/2837270.html)
pythonは、パッケージを導入しても良いし、モジュールを導入しても良いし、packageは一般的には複数のファイルのモジュールとして理解されています.このように定義されています.もし一つのディレクトリの下に存在するならば、「u__」init_.py"このファイルは、pythonがこのディレクトリのすべてのファイルが同じpackageに属していると考えています(これはjavaのnamespaceと似ていますが、javaはこのような特殊なファイルが必要ではありません).しかし、サブディレクトリの中では、このようにしてはいけません.init_.py」では、このカタログのプログラムはただで書いてあります.引用する方法がありません.もちろん、絶対的ではありません.大きな回り道をしない限り、現在のディレクトリを設定してインポートし、現在のディレクトリをリセットします.例えば、プログラムはtestディレクトリのモジュールを使う必要がありますが、testディレクトリはpackageではなく、このようにするしかありません.
図中のSrcディレクトリはプログラムのトップディレクトリであり、パッケージ導入のトップクラスのpackageであり、pubディレクトリとそのサブディレクトリはパブリックプログラムである.この場合、最も良い方法は、メインプログラム(一般的にアプリケーションのソースプログラムのルートディレクトリ、図中のstart.pyのような)に、すべての下位ディレクトリを納めたsys.pathの中に、サブディレクトリのモジュールにおいて、完全に限定されたパケット名を使用して他のサブディレクトリのモジュールやクラスに組み込むだけでよい.しかし、現実的な状況は、例えば、パブリックパッケージのために書いたテストプログラムをpb/testディレクトリの下に置く必要があります.テスト目標はpub/dataディレクトリの下で、アプリケーションのメインプログラムと希望を送ることができなくなります.この場合、起動プログラムと参照されているパッケージは同じ親ディレクトリのサブディレクトリにあります.この時はどうすればいいですか?それとも古い方法ですか?父のカタログ(src/pub)と(src/pb/data、src/pb/test)のディレクトリを全部sys.pathに入れてから使います.
絶対的な方式で導入します.必要なモジュールは全部このようにします.ですから、わざわざ関数を書いて、自動的に処理します.
docを表示
windows:
==============================================================================================================================
1.import【转】(http://www.cnblogs.com/dajianshi/archive/2012/12/28/2837270.html)
pythonは、パッケージを導入しても良いし、モジュールを導入しても良いし、packageは一般的には複数のファイルのモジュールとして理解されています.このように定義されています.もし一つのディレクトリの下に存在するならば、「u__」init_.py"このファイルは、pythonがこのディレクトリのすべてのファイルが同じpackageに属していると考えています(これはjavaのnamespaceと似ていますが、javaはこのような特殊なファイルが必要ではありません).しかし、サブディレクトリの中では、このようにしてはいけません.init_.py」では、このカタログのプログラムはただで書いてあります.引用する方法がありません.もちろん、絶対的ではありません.大きな回り道をしない限り、現在のディレクトリを設定してインポートし、現在のディレクトリをリセットします.例えば、プログラムはtestディレクトリのモジュールを使う必要がありますが、testディレクトリはpackageではなく、このようにするしかありません.
os.chdir("test")
import testfuncs
os.chdir("..")
一番便利な導入はもちろん、同じディレクトリのモジュールです.(簡単なプログラム以外に、このフラットなディレクトリ構造を使う人は少ないです.)どうやって導入したいですか?例えばメインプログラムで他のファイルモジュールの関数を使いたい場合は、直接導入すればいいです.import testfuncs # ( )
testfuncs.nousefunc() #
from testfuncs import nousefunc #
nousefunc() #
上は一番簡単な場合です.ファイルの中で定義されているのがクラスならどうですか?実際に使うのも同じですが、もう一回でclassの実例の呼び出しを作ります.import testclass # ( )
obj=testclass.TestClass(); #
obj.func1() # class, ,
from testclass import TestClass #
obj=TestClass(); #
obj.func1() #
このようにプログラムから同じディレクトリやサブディレクトリのカバンを導入すると簡単ですが、同じサブディレクトリのモジュールであれば、兄弟ディレクトリのモジュールやクラスを導入したいですが、どうすればいいですか?例えば、以下のディレクトリ構造:図中のSrcディレクトリはプログラムのトップディレクトリであり、パッケージ導入のトップクラスのpackageであり、pubディレクトリとそのサブディレクトリはパブリックプログラムである.この場合、最も良い方法は、メインプログラム(一般的にアプリケーションのソースプログラムのルートディレクトリ、図中のstart.pyのような)に、すべての下位ディレクトリを納めたsys.pathの中に、サブディレクトリのモジュールにおいて、完全に限定されたパケット名を使用して他のサブディレクトリのモジュールやクラスに組み込むだけでよい.しかし、現実的な状況は、例えば、パブリックパッケージのために書いたテストプログラムをpb/testディレクトリの下に置く必要があります.テスト目標はpub/dataディレクトリの下で、アプリケーションのメインプログラムと希望を送ることができなくなります.この場合、起動プログラムと参照されているパッケージは同じ親ディレクトリのサブディレクトリにあります.この時はどうすればいいですか?それとも古い方法ですか?父のカタログ(src/pub)と(src/pb/data、src/pb/test)のディレクトリを全部sys.pathに入れてから使います.
絶対的な方式で導入します.必要なモジュールは全部このようにします.ですから、わざわざ関数を書いて、自動的に処理します.
import os,sys
import TestClass
import testfuncs;
from TestClass import TestClass;
def _prepareRelativeImport(layer=2):
""" , , [ ] [ ] [ ] 。
layer, 。 2-> ;3-> 、 。
"""
import sys,os;
curP=os.path.abspath(os.path.dirname(__file__)); oriP=curP;__package__=curP.rpartition(os.path.sep)[2];
print('\r
curdir=',curP);
while layer>=0:
layer-=1;
if not curP in sys.path:sys.path.append(curP);
pa=curP.rpartition(os.path.sep);curN=pa[2];pp=pa[0];os.chdir(pp);
#if '__init__' in ''.join(os.listdir(curP)):__import__(curN);
curP=pp;
os.chdir(oriP);
if __name__=='__main__':
if not '__file__' in dir():__file__=os.path.abspath('.')+os.path.sep+"1.py";
_prepareRelativeImport(2)
from TestClass import TestClass;
from pub.test.TestClass import TestClass;
from pub.data.CompareOperator import CompareOperators
print('\r
Test of RelativeImport done!')
2.入力age = raw_input("How old are you? ")
height = raw_input("How tall are you? ")
weight = raw_input("How much do you weigh? ")
print "So, you're %r old, %r tall and %r heavy." % (age, height, weight)
from sys import argv
script, first, second, third = argv
print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third
スクリプトの実行、出力$ python ex13.py first 2nd 3rd
The script is called: ex13.py
Your first variable is: first
Your second variable is: 2nd
Your third variable is: 3rd
docを表示
windows:
python -m pydoc raw_input
linux:pydoc raw_input
同じく入力です>>>input("the meaning of life:")
the meaning of life:25
25
3.print "helloworld!"
raw_input("Press <enter>")
上のコードを最後の行に追加して、これをダブルクリックします.pyファイルは出力結果を表示できます.