2017-09-15 1 views
0

는 사실 내 비디오를 재생 kivy.uix.videoplayer MOULE을 사용하고 내가 만든 내가 비디오를 재생하기 위해 코드를 작성하는 기능은혼란 파이썬 "반환"문에

def hi(self): 
    return VideoPlayer(source='it.mp4', state='play') 

혼란은 때입니다 그것이 내가 아래와 같이 "반환"위해 VideoPlayer()를 사용하지 않는 경우지만 아주 잘 비디오를 재생 return를 사용

def hi(self): 
    VideoPlayer(source='it.mp4', state='play') 

만의 사운드 재생, 비디오가 표시 및 오류가이 제공되지 않으며,

[ERROR ] [Image  ] Error loading texture it.mp4 

나는 조금 (나는 언제나) return를 사용하여 여기 혼란 스러워요 그래서 나에게 대한 return 문을 취소하십시오.

+1

'VideoPlayer'로 생성 된 객체는 당신이 참조를 저장하지 않았기 때문에 호출이 완료되자 마자 가비지 콜렉션의 대상이됩니다. 어떤 이름에도'hi'의 반환 값을 할당하지 않으면'return' 문과 같은 결과를 얻을 수 있습니다. – chepner

+0

@chepner 감사합니다 –

답변

5

파이썬 개체는 더 이상 참조하지 않을 때 으로 자동 삭제됩니다. 객체를 반환하지 않으면 기본적으로 VideoPlayer 객체를 참조하는 것이 없으며 함수가 반환 될 때 Python 객체가 삭제됩니다.

당신이 return를 사용

, 아마도 어떤 전화 hi() 살아 유지, 반환 VideoPlayer() 인스턴스에 대한 참조를 저장에있어서, 상기 return None없이

video_player = someinstance.hi() 

대신 반환됩니다. return 문을 닫은 상태에서 반환 값을 어디에도 저장하지 않고 someinstance.hi()을 직접 호출하면 동일한 동작을 얻을 수 있습니다. 참조가 없으므로 VideoPlayer() 개체가 삭제됩니다.

키비는 이 아닙니다. 파이썬; 파이썬 객체는 네이티브 데이터 구조와 코드를위한 프록시 일뿐입니다. 사운드 핸들러는 VideoPlayer()이 생성되면서 시작되었지만 삭제되는 객체로 거의 즉시 정리되지 않았습니다.

+0

Thanx @MartijinPieters –