programing

파이썬 소스 코드를 여러 파일로 분할 하시겠습니까?

copyandpastes 2021. 1. 18. 22:15
반응형

파이썬 소스 코드를 여러 파일로 분할 하시겠습니까?


여러 파일로 분리하려는 코드가 있습니다. MATLAB에서는 단순히 .m파일을 호출 할 수 있으며 , 특별히 정의되지 않은 한 호출 된 코드의 일부인 것처럼 실행됩니다. 예제 (편집 됨) :
test.m (matlab)

function [] = test()
    ... some code using variables ...
    test2

test2.m (matlab)

... some more code using same variables ...

호출 test은 test2의 코드와 함께 테스트 코드를 실행합니다.

파이썬 ... some more code ...이 외부 파일 에을 넣는 비슷한 방법 이 있습니까?


저는 지금 파이썬에서 모듈 사용법을 연구하고 있으며 두 가지 관점에서 Markus가 위의 주석 ( "모듈에 포함 된 변수를 가져 오는 방법")에서 묻는 질문에 대답 할 것이라고 생각했습니다.

  1. 변수 / 함수 및
  2. 클래스 속성 / 메서드.

다음은 Markus에 대한 변수 재사용을 보여주기 위해 기본 프로그램 f1.py를 다시 작성하는 방법입니다.

import f2
myStorage = f2.useMyVars(0) # initialze class and properties
for i in range(0,10):
    print "Hello, "
    f2.print_world()
    myStorage.setMyVar(i)
    f2.inc_gMyVar()
print "Display class property myVar:", myStorage.getMyVar()
print "Display global variable gMyVar:", f2.get_gMyVar()

재사용 가능한 모듈 f2.py를 다시 작성하는 방법은 다음과 같습니다.

# Module: f2.py
# Example 1: functions to store and retrieve global variables
gMyVar = 0
def print_world():
    print "World!"
def get_gMyVar():
    return gMyVar # no need for global statement 
def inc_gMyVar():
    global gMyVar
    gMyVar += 1  

# Example 2: class methods to store and retrieve properties
class useMyVars(object):
    def __init__(self, myVar):
        self.myVar = myVar
    def getMyVar(self):
        return self.myVar
    def setMyVar(self, myVar):
        self.myVar = myVar
    def print_helloWorld(self):
        print "Hello, World!"

f1.py가 실행될 때 출력은 다음과 같습니다.

%run "f1.py"
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Hello, 
World!
Display class property myVar: 9
Display global variable gMyVar: 10

Markus의 요점은 다음과 같습니다.

  • 모듈의 코드를 두 번 이상 재사용하려면 모듈의 코드를 함수 나 클래스에 넣습니다.
  • 모듈에 속성으로 저장된 변수를 재사용하려면 클래스 내에서 속성을 초기화하고 "getter"및 "setter"메서드를 추가하여 변수를 주 프로그램에 복사 할 필요가 없도록합니다.
  • 모듈에 저장된 변수를 재사용하려면 변수를 초기화하고 getter 및 setter 함수를 사용하십시오. setter 함수는 변수를 전역으로 선언합니다.

확실한!

#file  -- test.py --
myvar = 42
def test_func():
    print("Hello!")

Now, this file ("test.py") is in python terminology a "module". We can import it (as long as it can be found in our PYTHONPATH) Note that the current directory is always in PYTHONPATH, so if use_test is being run from the same directory where test.py lives, you're all set:

#file -- use_test.py --
import test
test.test_func()  #prints "Hello!"
print (test.myvar)  #prints 42

from test import test_func #Only import the function directly into current namespace
test_func() #prints "Hello"
print (myvar)     #Exception (NameError)

from test import *
test_func() #prints "Hello"
print(myvar)      #prints 42

There's a lot more you can do than just that through the use of special __init__.py files which allow you to treat multiple files as a single module), but this answers your question and I suppose we'll leave the rest for another time.


Python has importing and namespacing, which are good. In Python you can import into the current namespace, like:

>>> from test import disp
>>> disp('World!')

Or with a namespace:

>>> import test
>>> test.disp('World!')

You can do the same in python by simply importing the second file, code at the top level will run when imported. I'd suggest this is messy at best, and not a good programming practice. You would be better off organizing your code into modules

Example:

F1.py:

print "Hello, "
import f2

F2.py:

print "World!"

When run:

python ./f1.py
Hello, 
World!

Edit to clarify: The part I was suggesting was "messy" is using the import statement only for the side effect of generating output, not the creation of separate source files.

ReferenceURL : https://stackoverflow.com/questions/12412595/split-python-source-code-into-multiple-files

반응형