2013-08-29 2 views
1

코드를 이렇게 쓰고, 일치하는 값을 'm'에 할당하고 싶습니다. 하지만 lst [1]은 원하는 팻치를 포함하지 않을 수 있습니다. 가 않는 경우, 그래서 나는 'm'에 대해 무언가를하겠습니다 예 : m.group (2) .split() ....파이썬에서 조건 일 경우 변수에 값을 할당 할 수 있습니까?

if re.match(pat, lst[1]): 
     m=re.match(pat, lst[1]) 

하지만 다시 반복하고 싶지 않아 .match (pat, lst [1])를 두 번 사용하십시오.

나는 그런 식으로

if m = re.match(pat, lst[i]) 

에서 달성하고자하지만 그것은 나를 "잘못된 구문 오류가 표시 어떤 아이디어가 아무도 없다면

+0

실제로, 나는 너 자신을 DRY (반복하지 않음)하고 싶다라고 생각한다.) – ThePhysicist

+5

파이썬에서 들여 쓰기 대신 중괄호를 사용하도록 요청하는 것. – perreal

+1

@ThePhysicist는 내가 읽었을 때 정확하게 생각했다. 현재 OP가 주장하는 바에 따르면, OP는 자신을 반복하지 않겠다는 뜻이며, 동일하게 반복하기를 원한다고 말하고 있습니다. – AJMansfield

답변

4

그냥 사전에 값을 할당하고 확인합니다.?

m = re.match(pat,lst[1]) 
if not m: 
    del m 
+0

고맙습니다 ~ 당신의 해결책을 잊었습니다 – newBike

+0

당신을 진심으로 환영합니다! 루비에서 오는 때로는 슬프게도 (또는 운좋게도 !?) 파이썬에서 작동하지 않는 'unless (a = ...) do' 구문을 사용하지 않으려 고하는 경우가 있습니다 ... – ThePhysicist

+0

ha Ruby를 좋아하지만 친숙하지 않습니다. 충분히 – newBike

0

for 남용하여 작업 할 수 있습니다.

def for_if(expression): 
    if expression: 
     yield expression 

for m in for_if(re.match(pat, lst[1])): 
    # work with m 

또는 단지

for m in (i for i in (re.match(pat, lst[1]),) if i): 
    # do the same 

이 읽기 ​​쉽 정말 도움이되지 않습니다 만, 과제 및 시험을 결합 할 수있는 유일한 방법입니다.

관련 문제