2012-02-18 4 views
2
numbers = [1,2,3,4,5,6,7,8,9] 
number = 1 

다음 코드는 한 줄로 쓸 수 있습니까? 루비의 스타일을 사용파이썬 하나의 라이너? x가 y 인 경우 x

if number in numbers: 
    print number 

: 나는 시도

puts number if numbers.include?(number) 

:

print number if number in numbers 

그러나 구문이 유효하지 않습니다.

+0

FWIW, 루비에서 할 수있는 또 다른 방법은 배열 교차로입니다' 숫자 & [번호]'를 넣습니다. 나는 파이썬에서 간단한 것에 상응하는 것이 있는지 모른다. –

+0

아래의 답변 외에도 [this] (http://stackoverflow.com/q/9345250/988071) 스레드가 있습니다. – mau5padd

+0

@ 마크 토마스 나는 그것을 몰랐다. 니스;) – beoliver

답변

11

파이썬은 파이썬이며 루비는 루비입니다. 나의 조언은 다른 하나를 쓰려고하지 말아야한다는 것이다.

파이썬에는 Ruby/Perl의 "postfix if"가 없으며이를 작성하는 Python 방식은 이미 가지고있는 것입니다.

하지만 당신은 정말이 작동해야하는 경우 :하지만 그것은 공식적인 스타일 가이드, PEP8 반대

if number in numbers: print number 

: 동일한에

  • 복합 문 (여러 개의 문을 라인) 일반적으로 권장하지 않습니다.

    예 :

    if foo == 'blah': 
        do_blah_thing() 
    do_one() 
    do_two() 
    do_three() 
    

    오히려하지 : 파이썬 3 사용하는 경우,

    if number in numbers: print number 
    

    또는이 트릭을 할해야

    if foo == 'blah': do_blah_thing() 
    do_one(); do_two(); do_three() 
    
+0

고마움, 나는 단지 내가 놓치고 있었던 작은 트릭이 없었다는 것을 확인하고 있었다. 그것은 당신의 대답이주는 방식으로 그것을 쓰는 '나쁜 형태'로 간주됩니까? – beoliver

+2

예. 내 편집을 참조하십시오. – Thomas

+0

Postfix if? 당신은 [PEP 308] (http://www.python.org/dev/peps/pep-0308/)을 의미합니다 :-) – Irfy

1

:

if number in numbers: print(number) 

IMHO 덜이기 때문에 두 라이너를 사용합니다.

5

파이썬 구문은 yes_value if test else no_value입니다. 명확성을 위해 선택 괄호로, 당신은 이런 말을 할 수

동의
print "Searching...", ("Found it" if n in numbers else "Not found") 

이 구문은 매우 직관적이다. C 조 조건식조차도 읽기가 쉽습니다. 당신이 당신의 원본 코드의 끝 부분에 다른 "" 추가하는 경우

+0

귀하의 사실은 괜찮지 만 나는 당신의 의견을 소름 끼치게합니다. –

+3

뭐가 그리 좋지? – pythondjango

2

당신은 작업 파이썬 2.7에 구축 얻을 것이다 :

print number if number in numbers else "" 

을 수는 다음을 인쇄 할 수있는 경우. 그렇지 않으면 빈 문자열이 인쇄됩니다.다른 사람이 언급 한 것처럼 당신이 정말로 전혀 실행 인쇄 문을 원하지 않는 경우

는하지만, 당신이 가야 :

if number in numbers: print number 
관련 문제