2013-05-04 6 views
-2

a_reader 함수를 사용하여 파일을 열고 싶습니다. 그런 다음 두 번째 함수를 사용하여 파일을 인쇄하고 싶습니다. 나중에 인쇄하지 않고 열린 파일 기능을 호출 할 수 있기를 원하기 때문에이 작업을 수행하려고합니다. 이 작업을 수행하는 가장 좋은 방법에 대한 아이디어가 있습니까? 당신이 인쇄로 함수 이름을 수없는이 기능이 이미 파이썬에서 기존의 것 그대로 - 여기에 내가 알고있는 샘플 코드가 작동하지 않습니다하지만 내가다른 함수 내에서 두 번째 함수 호출

def main():   
     a_reader = open ('C:\Users\filexxx.csv','r')  
     fileName = a_reader.read() 
     a_reader.close() 

    def print(): 
     print fileName 



main() 
print() 
+1

음, 두 함수를 정의하고 호출합니다. 그것만큼 쉽습니다. main() 함수 내에서 print() 함수 *를 정의하려고하십니까? 아니면 그냥 들여 쓰기 오류입니까? –

답변

2

이 날 오래된 스레드를 참조하십시오 : 저와 당신이 돈 '다른 사람에 의해 모두 adviced으로 해당 게시물의 사용자가 동일한 문제를 가지고 What is the Pythonic way to avoid reference before assignment errors in enclosing scopes?
, 그는 (귀하의 경우 main에) 다른 함수 내에서 함수를 정의하고 싶었다 기능을 중첩합니다!

파이썬에서 중첩 된 함수를 사용할 필요가 없으며 실제적인 실질적인 이점을 제공하지 않는 쓸모없는 복잡성을 추가합니다.

내가 할 것이다 :

def main(): 
    a_reader = open ('C:\\Users\\filexxx.csv','r')  

    fileName = a_reader.read() 

    a_reader.close() 
    return fileName 

print(main()) 

또는

class main(): 
    def __init__(self): 
     a_reader = open ('C:\\Users\\filexxx.csv','r') 
     self.fileName = a_reader.read() 
     a_reader.close() 
    def _print(self): 
     print(self.fileName) 

a = main() 
a._print() 

그것은 결코 기본 파이썬 함수/클래스와 같은 귀하의 기능 -/클래스 이름을 정의하는 것이 좋습니다. print 중 하나입니다.

def main(): 
    a_reader = open ('C:\\Users\\filexxx.csv','r') 
    fileName = a_reader.read() 
    a_reader.close() 

    def _print(): 
     print fileName 

    _print() 

main() 

아, 그리고 BTW .. 백 슬래시와 문자열을 탈출해야하거나 r'..' :

를 사용해야합니다 : 당신이 정말로 싶어 원래 설정으로 가면


그러나 여기 해결책이다

+0

hance 왜 내가 내 철회 - 그리고 당신이 비열한 업데 이터 덧글. –

+0

죄송합니다 (나는 연기가났다); P – Torxed

+0

+1은 특히 2 개의 예를 좋아한다 :'print (main())'와'class'버전. –

0

먼저 수행 할 작업을 설명하는 데 도움이 될 수있다 오류를 리턴하십시오. 그리고 그것은 class is what you are looking for이 main()이 아닌 함수로 보입니다.

0

나는 여기서 보트 타기를 원하지 않는다. 나는 실제로 위의 두 답변에 동의한다. 아마도 클래스가 올바른 방법 일 것이고, 거의 확실하게 네이티브 print() 함수를 오버라이드하는 것이 현명하지 않을 것이다.

파이썬의 강점 중 하나는 모든 프로그래밍 패러다임을 포괄한다는 것입니다. 당신은 직접적이고 절차적인 구현을 원합니다 - 파이썬! 코드를 재사용하고 일반적이고 재사용 가능한 클래스 인 OOP와 Python을 만들고 싶습니다! 파이썬은 또한 함수형 프로그래밍을 허용합니다. 파이썬의 내장 함수 인 mapzip은 함수형 프로그래밍의 전형적인 예입니다.

는이 문제의 요청을 받고 있었는지이라고 말을하지,하지만 당신은 기능적으로이 작업을 수행 할 수 있습니다 :

def my_name_function(n): 
    return ' '.join(['This is my Name:', n]) 

def say_hello(x): 
    print('Hello, world!', x) 

say_hello(my_name_function('Nick')) 
--> Hello, world! This is my Name: Nick 

가 다시, 나는이 질문이 정말 요구하고 무엇을 생각하지 않습니다. 이 경우, 최상의 구현은 OOP의 의미에서 클래스가 될 것이라고 나는 동의한다. (아마 심지어 더 평행 이동하는 Python의 방법 :

그러나 파이썬에서 중첩 된 함수가 필요 없다고 말할 때, 파이썬은이 옵션을 우리에게 열어 둘 때? 파이썬이 최근에 (지난 몇 년 동안) 함수형 프로그래밍 개념의 문을 열었을 때 ???유익한 독재자 인 귀도 (Guido)가이 상자를 열어 놓은 방법이 없다면 장점과 단점이 있습니다.

0

a_reader을 '기능'으로 지정하려면 해당 기능을 함수로 사용하고 변수로 사용하지 않아야합니다. 에는 a_reader()을 사용합니다.

다음은 클래스 Reader 중 인스턴스 a_reader을 함수로 호출 할 수있는 클래스를 구현합니다. 호출 시점에서만 파일이 열립니다. 이미 언급 된 다른 것들처럼 문자열 리터럴 ("..\\..")에서 백 슬래시를 이스케이프하거나 원시 문자열 (r"..\..")을 사용해야합니다. Python 파일에 일반 코드를 if __name__ == '__main__': 문 아래에 두는 것도 좋은 습관입니다. 그러면 (테스트) 코드를 호출하지 않고 파일에서 함수/클래스를 가져올 수 있습니다.