2012-09-13 6 views
26

여러 파일로 분리하려는 코드가 있습니다. matlab에서 하나는 .m 파일을 호출 할 수 있으며, 특별히 정의되지 않은 한 호출 된 코드의 일부로 실행됩니다. 예 (편집) :파이썬 소스 코드를 여러 파일로 분할 하시겠습니까?

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

test를 호출
test.m (MATLAB)

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

test2.m (MATLAB)는 테스트 코드뿐만 아니라 코드를 실행 test2.

... some more code ...을 파이썬과 비슷한 방식으로 외부 파일에 저장하면 파이썬이 호출 된 파일에있는 것처럼 간단히 읽을 수 있습니까?

+1

예, 있습니다. 다른 모듈에서 파일을 분리하고 필요한 것을 가져올 수 있습니다. http://docs.python.org/tutorial/modules.html – Borgleader

+2

좋아하는 파이썬 자습서를 읽고 모듈에 대해 알아보십시오 –

답변

17

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

  1. 변수/기능,
  2. 클래스 속성/메소드
  3. 여기

내가 마르쿠스에 대한 변수 재사용을 보여 주 프로그램 f1.py을 다시 할 방법은 다음과 같습니다

,224,923 : 여기

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를 다시 것입니다 방법입니다 f1.py 여기에서 실행되는3210

출력은 다음과 같은 형태가 될 것이다

%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 

내가 마르쿠스에 포인트가 될 것이라고 생각 :

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

파이썬에는 가져 오기와 네임 스페이스가 있습니다. 네임 스페이스와

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

을 또는 : 파이썬에서 당신처럼, 현재의 네임 스페이스로 가져올 수 있습니다

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

"좋다"+1 아주 좋은 삼가면서 말하는 것입니다. – mgilson

34

물론을!

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

이제이 파일 ("test.py")은 파이썬 용어로 "모듈"입니다. 우리는 (그것이 우리 PYTHONPATH에서 찾을 수만큼)를 가져 test.py의 삶, 당신은 모든 준비 같은 디렉토리에서 실행되고 use_test 그래서 만약 현재 디렉토리, PYTHONPATH 항상합니다 수 있습니다

#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 

여러 개의 파일을 하나의 모듈로 취급 할 수있는 __init__.py 개의 파일을 사용하면 훨씬 더 많은 것을 할 수 있습니다.하지만이 질문에 대한 답변은 다른 시간에 남겨 둘 것입니다. .

+0

글쎄, 아마도 내 예제가 좋지 않을 수 있습니다. 내 모든 변수와 함께 추가 코드를 호출 할 수 있기를 바랍니다. 변수를 전송해야하므로 모듈 가져 오기가 도움이되지 않습니다. – Markus

+1

매우 일반적이지는 않지만 일반적으로 변수를 가져올 수는 있지만 (내 업데이트 참조) – mgilson

2

파이썬에서 두 번째 파일을 가져 오기 만하면 동일한 작업을 수행 할 수 있습니다. 최상위 레벨의 코드는 가져올 때 실행됩니다. 나는 이것이 지저분하고, 좋은 프로그래밍 습관이 아니라고 제안 할 것이다. 실행하면

print "World!" 

:

F1.py :

print "Hello, " 
import f2 

F2.py 당신은 modules

예에 코드를 구성하는 더 나을 것

python ./f1.py 
Hello, 
World! 

명확하게 편집하십시오 : 제가 제안한 부분은 "지저분한"부분은 출력을 생성하는 부작용에 대해서만 import 문을 사용하고 별도의 소스 파일을 생성하는 것이 아닙니다.

+0

루프에서 '가져 오기 f2'를 붙이면'World! 한 번. 어떻게 든 변경할 수 있습니까? – Markus

+0

함수에'print' 문을 넣고 (f2.py에서), 파일을 한 번만 가져오고 루프에서 새 함수를 호출하십시오. –

+0

하지만 여기에서는 주 코드에서 필요한 변수가있는 실제 코드를 호출하는 데 문제가 있습니다. "하위 코드" – Markus

관련 문제