前のページ
最近、既存のツールの1つがPythonで開発されているグループ内のプロジェクトに取り組み、私の目標はこのツールのフローを最適化することでした。既存のプロセスを理解し、私の研究と組み合わせて最適化を提案し、最終的にTAに実装をコーディングさせる開発者を見つけることができますが。しかし、プログラマの心理学は、すべてを自分で理解したいので、探求のプロセスを開きます。
インターネットで情報を検索し、Py Charm開発ツールをダウンロードし、いくつかの環境設定を行ったので、ほぼ開始しました。Python言語に触れたことがないので、コードフォルダを開くと、.pyファイルがたくさんあり、どこから始めたらいいのかわかりません。私はC#生まれで、C/C++を少し書いたことがあるので、Main関数のようなものがプログラム全体の入り口になると思っていました。しかし、カタログ全体を調べても手がかりは見つからず、様々ないたずらが始まりました。
この記事はPython初心者の学習ノートであり、必ずしも正確または完全ではありませんが、あなたを歓迎します。 新しいツールや言語に触れるたびに、古い知識を試してみたいという不思議な喜びがあります。
シーケンシャル実行#シーケンシャル実行#
Pythonの世界では、すべての.pyファイルはモジュールであり、コンソールでファイル名を入力して呼び出すことができます。 モジュールはバッチファイル(.bat)に似ており、文は順番に実行されます。 C#のような言語と同じように、ファイルはクラスで構成されるべきだと思っていた私の最初の考えとは異なりました。
まず、DディスクのルートディレクトリにTest1.pyというファイルを作成します。以下の内容です。
print("Test1 First")
print("Test1 Second")
次に、コンソールに移動し、ディレクトリをDディスクに切り替え、Test1.pyモジュールを起動します。
D:\>python Test1.py
Test1 First
Test1 Second
まあ、期待通りです。モジュール間呼び出しをもう一度試してください。 DディスクにTest2.pyファイルを作成し、Test1.pyモジュールを呼び出します。
import Test1
print("Test2 First")
print("Test2 Second")
コンソールでTest2.pyを起動し、結果を出力します
D:\>python Test2.py
Test1 First
Test1 Second
Test2 First
Test2 Second
可以理解的是,在 Test2.py 文件中, import Test1 语句在前面,所以在导入 Test1 模块时便执行了其中的语句,因此 Test1 中的输出在前面。
import Test 1を後に置くと、Test 1の出力も後に表示されます:
print("Test2 First")
print("Test2 Second")
import Test1
D:\>python Test2.py
Test2 First
Test2 Second
Test1 First
Test1 Second
機能定義の定義
モジュール内のコードは柔軟にできますか?シーケンシャル実行に加えて、C#言語の関数のように、必要に応じて呼び出すこともできます。 上記のPrintは組み込み関数であり、データをチェックし、Pyhtonの関数定義を見つける必要があります:
def 函数名(参数列表):
函数体
Test1.pyでSayHello関数を定義してみてください:
print("Test1 First")
print("Test1 Second")
def SayHello():
print("Hello World")
SayHello()
print("Test1 Third")
輸出結果:
D:\>python Test1.py
Test1 First
Test1 Second
Hello World
Test1 Third
まあ、期待通り、問題なく、順番に実行します。
SayHello関数を定義するだけで、呼び出しを行わないと、Hello Worldという行が出力されません。
次に、モジュール間関数呼び出しを試してTest2.pyファイルを変更します。
import Test1
print("Test2 First")
print("Test2 Second")
Test1.SayHello()
出力は以下の通り。
D:\>python Test2.py
Test1 First
Test1 Second
Hello World
Test1 Third
Test2 First
Test2 Second
Hello World
哈哈,对的,对的,最后一行的 Hello World 即是Test2.py中的 Test1.SayHello()语句输出的。 最初の3行目のHello Worldは、Test 1をインポートしたときにTest 1モジュールが出力したものです。
__main__
了解了函数的定义及模块间的调用,随之而来的疑惑是,程序\模块 的入口在哪里。
搜索了一下资料,找到了 __name__ 属性。先来测试一段代码,修改 Test1.py 文件:
def SayHello():
print("Hello World")
def SayBye():
print("Bye World")
SayHello()
if(__name__=="__main__"):
print("Main")
SayBye()
コンソールから直接Test1.pyを起動するには:
D:\>python Test1.py
Hello World
Main
Bye World
嗯,还好理解,按顺序执行的,且满足了 if(__name__=="__main__") 条件,所以输出了 Main 。
別の方法では、Test2.pyTest1.pyを間接的に呼び出し、Test2.pyファイルを変更してみてください。
import Test1
print("Test2 First")
print("Test2 Second")
Test2.pyファイルを開き、結果を確認します。
D:\>python Test2.py
Hello World
Bye World
Test2 First
Test2 Second
纳尼,怎么没有输出 Main 呢?嗯,有点意思,找到 菜鸟教程 的解释:
每个模块都有一个
__name__属性,当其值是__main__时,表明该模块自身在运行,否则是被引入
这个 __name__ 属性还好理解,模块的保留字段(属性),但是怎么理解这个 __main__ 呢?
这里的 __main__ 可能可以理解为程序的入口函数,模块直接被入口函数调用,则其 __name__ 属性值为 main,否则为 模块文件名:
def SayHello():
print("Hello World")
def SayBye():
print("Bye World")
SayHello()
if(__name__=="__main__"):
print("Main")
else:
print(__name__)
SayBye()
D:\>python Test2.py
Hello World
Test1
Bye World
Test2 First
Test2 Second
まとめまとめまとめ
この記事では、Pythonモジュールの基本的な機能のいくつかを説明します。知識は非常に表面的で、個人的な学習プロセスを記録するだけです。
新しいツールや言語に触れるたびに、古い知識を試してみたいという不思議な喜びがあります。
最后,引用 菜鸟教程 关于 模块 的一些重要解释:
- モジュールにはメソッド定義に加えて実行可能コードも含めることができます。これらのコードはモジュールの初期化に使用されます。
- モジュールは、インポートを何度実行しても、一度だけインポートされます。これにより、インポートモジュールが何度も実行されないようになります。
- モジュールは他のモジュールをインポートできます。モジュールの先頭にimportを使用してモジュールをインポートしますが、これは必須ではなく慣習です。