TIL_17 : Module


🙄 モジュールvsスクリプト


モジュール

  • プログラムに必要な変数または関数を定義するファイル
  • ・
    area.py (모듈)
    
    PI = 3.14
    
    def circle(radius):
    	return PI * radius ** 2
    
    def square(length):
    	return length * length

    スクリプト#スクリプト#

  • プログラムコードを実行する実行可能ファイル
  • モジュールの機能の活用

    🙄 importの様々な方法


    モジュールの完全な導入

  • importお呼び
  • 
    import area
    
    print(area.circle(2))
    print(area.square(3))
    print(area.PI)
    
    # 12.56
    # 9
    # 3.14

    一部の関数のみが必要な場合import

  • 모듈.함수()お呼び
  • from area import circle, square
    
    print(circle(2))
    print(square(3))
    
    # 12.56
    # 9

    すべての関数が必要な場合import

  • 함수()お呼び
  • import areaは同じですが、関数呼び出し時にモジュール名は不要
  • どのモジュールからの関数の欠点を特定できない、推奨しない方式
  • from area import *
    
    print(circle(2))
    print(square(3))
    print(PI)
    
    # 12.56
    # 9
    # 3.4

    🙄 import名の変更


    モジュール名の変更

    
    import area as ar
    
    print(ar.circle(2))
    print(ar.square(3))
    print(ar.PI)
    
    # 12.56
    # 9
    # 3.14

    名前変更関数

    from area import circle as cr, square as sq
    
    print(cr(2))
    print(sq(3))
    
    # 12.56
    # 9

    🙄 現在のファイルで提供されている機能


    ➡ dir()

  • あるファイルで定義されているすべての名前の関数
  • プログラムで使う名前の方が管理しやすい.
  • 
    import area 
    
    print(dir())
    print(dir(area))
    
    # 현재 스크립트, 실행파일에 정의된 이름들 출력
    # 모듈 area속 정의된 이름들 출력

    🙄 モジュール検索パス


    モジュールシステム

  • 出力されたパス順にモジュールを検索し、最初は常にファイルを含むパス
  • 検索パスも結局함수()従ってlist追加必要な検索パスを使用可能
  • 
    import sys
    
    print(sys.path)
    
    # ['D:\\PyCharm Community Edition 2021.1.1\\11111111', 'D:\\PyCharm Community Edition 2021.1.1', 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip', 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python39\\DLLs', 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python39\\lib', 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python39', 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages']
    

    🙄 特殊変数:name


    ➡ __name__

  • エンクロージャ名の変数
  • ファイルを直接実行する場合、nameをmainに設定
  • ファイルappend名前をモジュール名に設定
  • area.py
    print(__name__)
    
    # __main__
    run.py
    import area
    
    print(__name__)
    
    # area

    モジュールファイルの実行中の問題

  • モジュールゾーン.py以下の場合
  • PI = 3.14
    
    def circle(radius):
        return PI * radius ** 2
    
    def square(length):
        return length * length
    
    print(circle(2) == 12.56)
    print(square(3) == 9)
    
    # True
    # True
  • run.pyを実行すると
  • import area
    
    print(area.circle(2))
    print(area.square(3))
    
    # True
    # True
    # 12.56
    # 9
  • importモジュールに対してすべてのコードを実行し、意図とは異なる出力値を得ることができる.

  • ファイルが直接実行される場合にのみ実行するコード
    if name==mainを条件文に置けばよい
  • area.py
    PI = 3.14
    
    def circle(radius):
        return PI * radius ** 2
    
    def square(length):
        return length * length
    
    if __name__ == '__main__':
        print(circle(2) == 12.56)
        print(square(3) == 9)
    
    # True
    # True
    run.py
    import area
    
    print(area.circle(2))
    print(area.square(3))
    
    # 12.56
    # 9