2013-05-05 3 views
3

내가이 작업을 수행하려고하는 경우의 조건으로 사용하여 문자열 :파이썬 - 문

a = "1 or 0" 
if (a): Print "true" 

그래서 내가 if 문의 조건으로 문자열을 사용할 수 있습니다. 이것이 가능한가?

+3

예.하지만 사용하지 않는 것이 좋습니다. 이를 피하려면 코드를 변경하는 것이 좋습니다. – Volatility

+0

@Volatility 누구에게 낙담하나요? "시퀀스 (문자열,리스트, 튜플)의 경우, 빈 시퀀스가 ​​거짓이라는 사실을 사용하십시오."라고 말하는 PEP-8이 아닙니다. –

+0

@Anonymous :이 문자열은 유효한 Python 코드입니다. (의도적이라고 생각합니다.) 그래서 OP는 기본적으로 "이 문자열을 코드로 처리하고 평가할 수 있습니까?"라고 묻습니다. 이것은'eval'을위한 것입니다. – Blender

답변

2

문자열은 ifif it is not empty에 대해 항상 True이되므로 if 문에 사용하는 것은 유용하지 않습니다.

In [12]: my_str = 'a=a' 

In [13]: if my_str: 
    ....:  print True 
    ....: else: 
    ....:  print False 
    ....:  
True 

In [14]: new_str = '' 

In [15]: if new_str: 
    ....:  print True 
    ....: else: 
    ....:  print False 
    ....:  
False 

In [16]: 

따라서 실제 조건 중 일부는 부울로 계산됩니다.

3

"a =="문자열을 입력 문자열과 결합하여 eval() 문자열을 결합 할 수 있습니다. 임의 코드가 실행되도록 허용하기 때문에이 작업을주의 깊게 수행해야합니다.

9

이 가능하지만 그것을하지 않습니다

a = '1 or 0' 

if eval(a): 
    print 'a is True' 

eval()는, 디버그 어렵다 여기에 어떤 혜택을 제공하지 않으며 당신이 임의의 사용자 입력 (예를 들어, a = "__import__('os').system('rm -Rf /')")을 허용하는 경우 쉽게 악용 될 수 있습니다.

+2

[필수 링크] (http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html) – Volatility

+0

"if a = 1 or 0"으로 질문을 읽었으며 비교를 잊었다 고 가정했습니다. 하지만 당신의 대답은 더 이해가됩니다. –