2016-08-01 3 views
0

선택적 출력 매개 변수를 사용하여 함수를 작성하는 방법은 무엇입니까? i가 첫 번째 예파이썬에서 선택적 출력 매개 변수를 사용하여 함수를 작성하는 방법

의 "매트"의 튜플이

1) mat = ReadBinFile(filename) 또는
2) [mat,titles] = ReadBinFile(filename)

제가

return mat,titles 

와 "ReadBinFile"기능을 마친 경우에는

감사합니다.

+0

이 용도는 무엇입니까? 두 번째 튜플 요소를 원하지 않으면 그냥 무시하십시오. – mhawke

+0

이 작업을 수행 할 수 없습니다. 어쨌든 정말 좋은 아이디어는 아닙니다. 결과의 포장을 풀고 원하지 않는 요소를 버리십시오. – BrenBarn

+0

튜플을 통해 생성기를 사용하면 잠재적으로 시간을 절약 할 수 있다는 이점이 있습니다 (각 요소가 가져 오는 데 시간이 오래 걸리는 경우) –

답변

-1

이 작업에는 두 가지 방법이 있습니다. 하나는 리턴 값을 결정하는 인수를 승인하는 것입니다. 두 번째, 더 흥미로운 것은 생성기를 반환하는 것입니다.

def ReadBinFile(filename): 
    yield mat 
    yield titles 

mat,titles = ReadBinFile(filename) 

이렇게하면 첫 번째 반환 값을 얻을 수 있습니다.

+1

이것은 실제로 작동하지 않습니다. 'mat = ReadBinFile (filename)'을 실행하면,'mat'은 처음 생성 된 값이 아니라 생성자 자체를 가져옵니다. – BrenBarn

+0

나는 당신이하고 싶은 것을 정확히 할 수있는 방법이 없다고 생각합니다. 파이썬에서는 구문을 변경할 수 없지만 기능적 결과를 얻을 수 있습니다. 나는 이것이 당신이 찾고있는 모든 기능을 제공한다는 것을 확신한다. –

0

리턴 유형이 필요한지 또는 함수 이름을 마스킹하는지를 함수에 표시하지 않으면이 작업을 수행 할 수 없습니다 (내 의견 참조).

이유를 설명해 드리겠습니다.

Perl에서 호출을 테스트하여이 작업을 수행 할 수 있습니다. 첫 번째 (단일 반환 값)는 스칼라 컨텍스트이고 두 번째는 목록 컨텍스트입니다. wantarray (Google "python wantarray"- 다른 검색 엔진을 사용할 수 있음)이라는 함수를 사용하여 테스트 할 수 있습니다. Perl은 이러한 이유와 다른 많은 이유 때문에 독특하지는 않다.

파이썬은 다른 언어에 비해 인트로 스펙 션을 극단적으로 취할 수 있지만, 그렇게 작동하지 않습니다. 과제의 형식은 다음과 같습니다.

name = object 

name은 형식이없는 참조입니다. 그래서 : 어떤 비열한 수단으로, 우리는 바이트 코드를 검사하더라도

mat = ReadBinFile(filename) 

, 우리는 참조하도록되어 객체 mat 어떤 클래스를 알 방법이 없습니다. A list, tuple, int, bird, plane?

이 구문은 당신이 보여

[mat,titles] = ReadBinFile(filename) 

퍼즐입니다. 유효하지만 실제로는 차이가 없습니다 :

mat,titles = ReadBinFile(filename) 

당연히 튜플입니다.

mat = ReadBinFile(filename) 

tuple하는 list, 또는 개체 mat의 어떤 클래스가 참조하도록되어 있어야한다 : 경우에 따라서, 우리는 어떻게 알 수 있습니다.

결국, 내 생각에 다른 클래스의 객체를 반환하는 것은 Perl 에서조차 모호한 습관입니다.예를 들어, 일부 상황에서 None을 반환하는 몇 가지 예외가 있습니다. 왜 모호한가? 코드를 읽고 수정하고 지원하기가 어려워지기 때문입니다.

관련 문제