2011-01-24 5 views
10

그 의미 나 정의에 대해 혼란 스럽습니다.파이썬에서 표현식이란 무엇입니까?

새로운 데이터 값을 생성하거나 계산하는 코드가 아닙니다. (자신의 저서에 Zelle이 말합니다)

그러면 문자열 데이터 형식이 표현식인지 궁금합니다.

그렇다면 인수가 문자열 일 때 eval()은 무엇을합니까?

Zelle의 책에서 eval(<string>)은 표현식으로 string을 평가한다고 말하면서 string이 이미 표현식 인 경우 정확히 무엇을 의미합니까?

string이 표현식이 아니면 print 이후에 어떻게 될까요?

+1

관련 (하지만 **하지 ** 정확한 중복) : 여기에 break 문이다 [표현식과 문 사이의 차이점은 무엇입니까? (http://stackoverflow.com/questions/4728073/ python-what-is-the-difference-of-expression-and-a-statement) –

답변

17

표현식 은 숫자, 문자열 또는 클래스의 인스턴스처럼을 나타냅니다. 어떤 값이든 표현식입니다!

무엇이든지 이 수행하는 것은입니다. 변수 또는 함수 호출에 대한 모든 지정은 명령문입니다. 표현식에서 해당 명령문에 포함 된 모든 값.

foo = "hello"은 표현식 "hello"값에 foo를 할당하는 명령문입니다. 코드 "hello"은 아무런 연산도 포함하지 않은 간단한 표현식이므로 실제로는 아무 것도 계산되지 않으므로 foo는 "hello "에 할당됩니다. 더 복잡한 표현식은 실제로 숫자를 추가하는 것과 같은 것을 평가합니다. 단어 표현식을 사용하면 표현식은 덧셈이나 뺄셈과 같은 연산을 할 수 있다는 것을 제외하고는 값일뿐입니다.

eval은 문자열을 파이썬 표현식처럼 평가합니다 .Eval은 표현식을 인수로 취합니다. 이것은 부터 모든 단일 값은 표현식입니다. "eval은 인수로 값을 취합니다"라고 말하면서 똑같은 말을하고 있지만 훨씬 간단 해 보입니다 : D

eval("2+2")은 문자열 "2+2"을 함수에 전달합니다. 문자열이 이미 표현 인 경우 함수는 4

Zelle에 의해이 책은 eval(<string>)는 표현으로 문자열을 평가 말했다에 나오는 문자열에 포함 된 표현을, 평가, 그게 정확히 무엇을 의미 하는가?

모든 문자열은 값을 나타내므로 표현식입니다. 그러나 문자열에 포함 된 내용은 표현식에 아무런 영향을 미치지 않습니다. 그것의 값이면 표현식입니다. 그것이 "eval에 의한 표현식으로 평가 될 때"문자열 안에있는 문자들은 마치 파이썬 표현식처럼 실행됩니다.

+2

'eval' 명령문을 사용할 수 없다는 점을 제외하면 좋은 설명입니다. Python 2.x에서'eval ("print hello")'를 사용해보십시오. –

+6

함수 호출은 Python의 표현식입니다. 모든 표현식은 "표현식 명령문"인 명령문이기도합니다. 위에 제공된 관련 질문에 대한 링크를 참조하십시오. –

+0

@Sven 간단하게 표현의 다른 정의를 사용하고 있습니다. 그 정보를 남겨 두는 것이 여분의 복잡성을 피할 수 있다고 생각했습니다. 특히 표현이 매우 널리 사용되지 않기 때문에. : D –

1

문자열은 표현식입니다. 표현은 "가치"를 가진 모든 것입니다. 3, 'Hello world', 1 + 1, math.sqrt (9) 등과 같습니다. 함수 이름도 표현식입니다.

eval()은 사용자가 지정한 표현식의 값을 문자열로 제공합니다. eval ('1 + 1')이라고 말하면 2를 반환합니다. 따라서 1 + 1을 쓰면 반환되는 것과 동일한 결과를 반환합니다.

+1

그 밖에도 : 값을 반환하는 모든 메서드/함수는 표현식으로도 계산됩니다. 따라서 eval 자체는 예를 들어 잘 표현됩니다. – poke

+0

@poke : 오해의 소지가 있습니다. _Every_ 메서드/함수는 값을 반환합니다. 명시 적으로 아무것도 반환하지 않으면 암시 적으로 '없음'을 반환합니다. (물론 실제적으로 특정 함수 호출은 반환하는 대신 'sys.exit'를 올리거나 반환하는 대신 무한 루프에서 영원히 돌릴 수 있습니다. 그러나이 함수 호출 식은 표현식이 아니며' 1/0'.) – abarnert

+0

@abarnert 지금 내가 말한 것을 말하기는 힘들지만, 나는 그 모든 것들이 표현식으로 간주된다는 것을 의미한다고 생각한다. – poke

2

"표현식"은 Python의 자체 스크립트 구문 분석기가 어떻게 작동하는지 생각하면 다소 혼란 스러울 수 있습니다. standard documentation은 표현식과 "원자 (atom)"를 구별하지만, 그 용어는 매우 제한적이라고 생각합니다. (5.11의 BNF 다이어그램은 이라는 표현을 의미합니다.은 람다 형식이거나 조건식입니다. 내 BNF는 녹슬 었어.)

원자는 @kynnysmatto가 '값'을 가진 모든 것을 말합니다. 어쩌면 "괄호 안에 넣을 수 있고, 괄호 밖에서도 해당 값과 구별 할 수없는 것은 원자의 더 나은 정의 일 수 있습니다.

젤 (Zelle)이 다음과 같은 상황에서 표현을 논할 때. 평가 (푸), 나는 그가 의미 생각 :

  • 푸 식별자, 원자
  • 의 유형이 있지만, 푸 뭔가
  • 이 "뭔가"의 식별자 입니다 문자열 같은입니다 , 아마도 실제 문자열
  • eval()의 내부에있는이 문자열 은 Python "표현식"을 구성합니다. 즉, Python이 구문 분석하고 이해할 수있는 것입니다.

tl; dr : "구문"용어는 코드 구문 분석의 관점에서 가장 잘 이해 될 수 있습니다. 자신을 프로그램 할 때, "원자"에 대해 생각하는 것이 더 낳을 수도 있습니다.

2

TL : 표현식은 값과 연산자의 조합이며 항상 단일 값으로 평가합니다. 성명서는 모든 다른 지시문입니다. 일부 명령문에는 표현식이 들어 있습니다.

항상 단일 값까지 평가 값 연산자를 결합한 것을 지시한다.

>>> 2 + 2 

는 2S 정수 값이며, +는 수학적 연산자이다

는 예를 들어,이 표현된다. 이 표현은 하나의 정수 값 4.

기술적으로까지 평가,이 또한 표현 : 표현으로

>>> 4 

, 그것은 하나의 값 내가 말할 4.

아래로 평가 값 연산자, 이는 수학 문제에 한정되는 것은 아니다 :

>>> 'You will be ' + str(int(myAge) + 1) + ' next year.' 

myAge 변수가 내부 값으로 평가한다. 함수 호출 int('5')은 함수의 반환 값인 5을 계산합니다. 이 모든 문자열 값은 + 연산자와 결합됩니다 (이 경우 문자열 연결 연산자).아무리 표현이 얼마나 큰지, 그것은 단일 값 아래로 평가하지 :이 경우, 문자열 값이 아래로 평가하지 않습니다 파이썬 명령을하는 'You will be 6 next year.'

명암이 값. 파이썬 문장은 표현식이 아닌 다른 모든 것입니다.

다음
>>> spam = 2 + 2 

는 if 문의 : 여기

>>> if spam == 4: 

무한 루프에 대한 while 문이야 : 두 문장 모두가 식을 포함하는 것을

>>> while True: 

참고 여기 할당 문입니다 (심지어 True, 단일 값 True까지 평가됨). 그러나 모든 문장이 표현을 사용하는 것은 아닙니다.

>>> break 
관련 문제