2013-05-16 1 views
-1

제목은 파이썬 스크립트에서 전달하고자하는 perl 관용구를 보여줍니다. 나는 이것이 나쁜 연습으로 해석 될 수 있음을 깨닫는다. 잠재적으로 예외 처리의 결핍 때문이다. 그럼에도 불구하고 (일회용/개인용) 유틸리티에서 이러한 작업을 수행함에있어서 가치를 발견합니다.

+1

파이썬은 엄격하게 입력됩니다. 'obj.method (args)'가 순차 (-) 값을 반환하면 그냥 시퀀스로 사용하십시오. 매핑 (-) 값을 반환하면 매핑으로 사용하십시오. –

+1

관용적 인 Perl이 익숙하지 않은 Pythonist에게 대답하기를 희망하는 사람들은 실제로 관용어가 수행해야하는 것을 설명하고 예제를 제공 할 수 있습니까? 그 자체로 질문 자체는 실제로 내용을 가지고 있지 않습니다. – millimoose

+0

-1 :이 질문은이 관용구가 무엇을하는지 설명하지 않음으로써 미래의 많은 잠재적 인 독자들과 파이썬 중독자들을 멀어지게 만듭니다. –

답변

1

파이썬에는 Perl과 같은 다양한 종류의 변수 개념이 없습니다. 스칼라, 목록 및 사전은 모두 동일한 종류의 변수에 저장됩니다. 따라서이 "관용구"는 적용 할 수 없습니다. 반환 된 값을 직접 사용하십시오.

몇 가지 예를 펄 코드 :

sub foo { 
    return [ qw(a b c) ]; 
} 

@list = @{foo()}; 
say $list[0]; 
say $list[1]; 
say $list[2]; 

동등한 파이썬 코드 :

def foo(): 
     return ("a", "b", "c") 

list = foo() 
print list[0] 
print list[1] 
print list[2] 

난 당신이 예외 처리의 부족을 참조 할 때 의미 할 수 무엇인지 전혀 모른다.

+0

제 질문은 저조한 표현일지도 모릅니다. 아주 간단합니다. 이것을 달성 할 수있는 방법이 있습니까? obj.method() [ 'key']! = 0 – user2390378

+0

@ user2390378 물론입니다. 예제 코드에 따라'print foo() [0]'는'a'를 출력합니다. – Oktalist

+0

죄송합니다. 침몰하는 데 시간이 걸렸습니다. 지난 밤에 스타 트렉의 자정을 보여 줬음에 틀림 없습니다 :) – user2390378

0

이 질문에 대한 세 글자의 대답은 다음과 같습니다.

더 긴 대답 : 파이썬에는 참조가 없습니다. tuplerefs 나 dictrefs가 없으며 이들을 반환하는 함수가 없으며 호출자가 tupleref 나 dictrefs를 터플이나 사전으로 변환 할 수있는 방법이 없습니다. 동등한 것은 없습니다.

이 펄 :

sub foo { 
    qw/a b c/ 
} 
my @array = foo; 
print $array[0]; 
print $array[1]; 
print $array[2]; 

은 다른 대답은 파이썬에 다른 대답 펄보다는 '덜 해당하는'되지 않습니다.

Perl의 다른 비트와는 다르다.

my @array = (this_foo(), this_foo(), this_foo()); 
# @array is now: ('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'), and one-dimensional. 

my @array = (that_foo(), that_foo(), that_foo()); 
# @array is now: (['a', 'b', 'c'], ['a', 'b', 'c'], ['a', 'b', 'c']), and two-dimensional. 

그러나이 점이 파이썬에게는 전혀 도움이되지 않습니다.