파이썬에서 표현식과 문장의 차이점은 무엇입니까?


답변:


242

표현식 에는 식별자 , 리터럴연산자 만 포함 됩니다 . 연산자에는 산술 및 부울 연산자, 함수 호출 연산자 () 에는 구독 연산자 [] 등이 포함되어 있으며 어떤 종류의 "값"(모든 Python 객체 일 수 있음)으로 줄일 수 있습니다. 예 :

3 + 5
map(lambda x: x*x, range(10))
[a.x for a in some_iterable]
yield 7

성명서 (참조 1 ,반면에 2 )는 한 줄 (또는 여러 줄)의 파이썬 코드를 구성 할 수있는 모든 것입니다. 표현식도 문장입니다. 예 :

# all the above expressions
print 42
if x: do_y()
return
a = 7

17
표현은 진술의 일부 입니다
bismigalis

59
@bismigalis : 유효한 모든 Python 표현식을 명령문 ( "expression statement" ) 으로 사용할 수 있습니다 . 이런 의미에서 표현 진술입니다.
Sven Marnach

2
표현식에는 함수 호출 (객체 인스턴스화를위한 호출 클래스 포함)도 포함될 수 있습니다. 기술적으로 이들은 바인딩이 'def'또는 'class'키워드를 통해서도 = 문에서 값에 바인드 된 이름과 정확히 같은 "식별자"입니다. 그러나이 답변에 대해서는 함수 호출을 별도로 작성하여 명확하게 설명합니다.
Jim Dennis

2
@George Fair 충분히. :) 표현식 문은 REPL 외부에서도 매우 유용합니다. 함수 호출 표현식을 표현식 문으로 사용하는 것이 일반적입니다 (예 : print("Hello world!")또는) my_list.append(42).
Sven Marnach '

3
@WillTaylor 값을 산출하는 모든 것은 표현입니다. 즉 할당의 쓰기쪽에 쓸 수있는 모든 것입니다. a = yield 7유효 하므로 yield 7식입니다. 오래 전에 yield성명서로 소개되었지만 PEP 342 의 표현으로 일반화되었습니다 .
Sven Marnach

120

표현 -로부터 뉴 옥스퍼드 아메리칸 사전 :

표현 : 수학 양을 함께 표현하는 기호 모음 : 원의 둘레 표현은 2πr입니다.

총체적인 용어로 표현하면 하나 이상의 값이 생성됩니다.

파이썬에서, 표현식은 파이썬 언어 레퍼런스 에서 광범위하게 다루어집니다 . 일반적으로, 파이썬에서의 표현식은 문법적으로 합법적으로 Atom , PrimariesOperators 조합으로 구성 됩니다.

위키 백과의 파이썬 표현

표현의 예 :

연산자내장 함수 또는 사용자 작성 함수 호출과의 리터럴 및 구문 상 올바른 조합 :

>>> 23
23
>>> 23l
23L
>>> range(4)
[0, 1, 2, 3] 
>>> 2L*bin(2)
'0b100b10'
>>> def func(a):      # Statement, just part of the example...
...    return a*a     # Statement...
... 
>>> func(3)*4
36    
>>> func(5) is func(a=5)
True

Wikipedia의 진술 :

컴퓨터 프로그래밍에서 문장은 명령형 프로그래밍 언어의 가장 작은 독립형 요소로 생각할 수 있습니다. 프로그램은 하나 이상의 명령문으로 구성됩니다. 명령문에는 내부 구성 요소 (예 : 표현식)가 있습니다.

Wikipedia의 파이썬 문장

총체적인 용어로 : 진술은 무언가를 하고 종종 표현 (또는 다른 진술)으로 구성됩니다

파이썬 언어 레퍼런스는 간단한 문장복합 문장을 광범위하게 다루고 있습니다.

"표현은 무언가를한다"와 "표현은 가치를 만들어 낸다"는 구별은 모호해질 수있다.

  • List Comprehension 은 "Expression"으로 간주되지만 루핑 구조가 있으므로 무언가를 수행합니다.
  • if일반적으로 같은 문장이다 if x<0: x=0그러나 당신은 또한 수 있습니다 조건식 같은 x=0 if x<0 else 1표현식이 있습니다. C와 같은 다른 언어에서는이 형식을 이와 같은 연산자라고합니다.x=x<0?0:1;
  • 함수를 작성하여 자신 만의 식을 작성할 수 있습니다. def func(a): return a*a사용시 표현식이지만 정의시 명령문으로 구성됩니다.
  • 반환하는 표현식 None은 Python의 프로 시저입니다. def proc(): pass문법적 proc()으로, 표현식으로 사용할 수 있지만 아마도 버그 일 것입니다.
  • 파이썬은 C가 Expression과 Statement의 차이점에 있다고 말하는 것보다 조금 더 엄격합니다. C에서 모든 표현은 법적 진술입니다. 당신 func(x=2);은 그 표현이나 진술인가? ( 답변 : 부작용이있는 명령문으로 사용되는 표현식 ) 파이썬에서 x=2함수 호출 내부의 할당 문은 호출시 에만 func(x=2)명명 된 인수 a를 2로 설정 func하고 C 예제보다 제한됩니다.

"내 사전에서"는 당신의 개인적인 의견이나 옥스포드 사전과 같은 사전을 의미합니까? 감사합니다
Talespin_Kit

1
@Talespin_Kit : ... 개인 의견이나 옥스포드 사전처럼 소유 한 사전? 좋은 질문. New Oxford American Dictionary를 기반으로하는 Mac에서 Apple Dictionary 앱을 사용했습니다.
dawg

80

이것은 파이썬과 관련이 없지만 :

expression값으로 평가한다. A statement는 무언가를한다.

>>> x + 2         # an expression
>>> x = 1         # a statement 
>>> y = x + 1     # a statement
>>> print y       # a statement (in 2.x)
2

3
그러나 실제로 "순수한"언어를 제외한 모든 언어에서 표현은 "무엇을 할 수 있습니다"(보다 공식적으로는 부작용이있을 수 있음)에 유의하십시오.

@delnan : 예를 들어 주시겠습니까? 잘 모르겠습니다.
user225312

4
마찬가지로 somelist.append(123). 실제로 대부분의 함수 호출.
Thomas K

13
y = x + 1은 표현식이 아니라 명령문입니다. eval ( "y = x + 1")을 시도하면 오류가 발생합니다.
Arglanir

3
Y = X + 1은 식 문이다
엠마뉴엘 Osimosu

13

명령문은 조치 또는 명령을 나타냅니다 (예 : 인쇄 문, 지정 문).

print 'hello', x = 1

식은 결과 값을 산출하는 변수, 연산 및 값의 조합입니다.

5 * 5 # yields 25

마지막으로 표현 문

print 5*5

8

식은 예를 들어 "1+3"또는 과 같이 값으로 줄일 수있는 것입니다 "foo = 1+3".

확인하기 쉽습니다.

print foo = 1+3

그것이 작동하지 않으면, 그것은 진술입니다. 만약 그렇다면, 그것은 표현입니다.

또 다른 진술은 다음과 같습니다.

class Foo(Bar): pass

값으로 줄일 수 없습니다.


1
첫 번째 예제를 실행하는 것처럼 파이썬에서 할당은 표현식 이 아닙니다 (실제로 a = b = expr특별한 경우로 허용 되지 는 않습니다). C에서 더 많은 영감을 얻는 언어에서는 그렇습니다.

class Foo(bar):완전한 진술이 아니라 진술의 시작입니다.
Sven Marnach

1
foo = 1+3식이 아닙니다. 성명서 (정확한 과제)입니다. 그 부분 1+3은 표현입니다.
Pithikos

2
제 공식은 매우 정확합니다. "만약 그것이 효과가 없다면, 그것은 진술이고, 그것이 있다면 표현입니다." 그것을 실행하면 답을 얻을 수 있습니다.
Flavius

8
  1. 표현식은 값을 리턴하는 명령문입니다. 따라서 할당의 오른쪽이나 메서드 호출에 대한 매개 변수로 나타날 수 있으면 식입니다.
  2. 상황에 따라 일부 코드는 표현식이거나 명령문 일 수 있습니다. 언어는 모호 할 때 두 언어를 구별 할 수있는 수단을 가지고있을 수 있습니다.

5

표현은 무언가이고, 진술은 무언가를합니다.
표현식도 명령문이지만 리턴 값이 있어야합니다.

>>> 2 * 2          #expression
>>> print(2 * 2)     #statement

PS : 인터프리터는 항상 모든 표현식의 값을 인쇄합니다.


내 의견으로는, 진술은 null 값을 가진 표현이다
Adalcar

3

성명서:

명령문은 작업을 수행하는 작업 또는 명령입니다. 예 : If-Else, Loops..etc

val a: Int = 5
If(a>5) print("Hey!") else print("Hi!")

표현:

Expression은 값, 연산자 및 리터럴의 조합으로 무언가를 산출합니다.

val a: Int = 5 + 5 #yields 10

: 이것은이 기존 응답의 중복 stackoverflow.com/questions/4728073/... .
karel

1
아마도 중복되었지만 위의 질문에 대한 내 견해를 공유합니다. 위반 없음
Raja Shekar

1

명령문에는 키워드가 포함됩니다.

표현식에 키워드가 없습니다.

print "hello"print키워드 이므로 문 입니다.

"hello" 식이지만 목록 압축은 이에 반대됩니다.

다음은 표현 문이며 목록 이해없이 적용됩니다.

(x*2 for x in range(10))

4
그것은 당신의 '키워드'의 정의에 크게 의존합니다. x = 1완벽하게 좋은 말이지 만 키워드를 포함하지 않습니다.
Joost

아닙니다. 예를 들어 is키워드이지만 x is y반드시 진술 일 필요는 없습니다 (일반적으로 표현식 일뿐입니다).
벤 지민

1

표현 :

  • 식을 조합하여 형성 objects하고 operators.
  • 표현식에는 유형이있는 값이 있습니다.
  • 간단한 표현을위한 문법 :<object><operator><object>

2.0 + 3는 평가하고 이에 연관된 5.0유형 을 갖는 표현식입니다 float.

진술

문장은 표현으로 구성됩니다. 여러 줄에 걸쳐있을 수 있습니다.


1

파이썬 프로그램의 상태를 바꿀 수있는 몇 가지 문장이 있습니다 : 변수 생성 또는 업데이트, 함수 정의 등

그리고 표현식은 일부 값을 반환하므로 함수에서 전역 상태 또는 로컬 상태를 변경할 수 없습니다.

하지만 이제 우리는 :=외계인입니다.


-1

파이썬은 표현식을 "표현 문 (expression statement)"이라고 부릅니다.

명령문은 파이썬에서 할 수있는 모든 것, 즉 값 계산, 값 할당, 변수 삭제, 값 인쇄, 함수에서 반환, 예외 발생 등으로 구성됩니다. 전체 목록은 다음과 같습니다. http : // docs.python.org/reference/simple_stmts.html#

표현 문은 값을 생성하기 위해 함수 (예 : math.cos (theta) "), 연산자 (예 :"2 + 3 ") 등을 호출하는 것으로 제한됩니다.


10
아니요, 파이썬은 표현식을 "표현 문"이라고 부르지 않습니다. 파이썬은 오직 하나의 표현 "표현 문"으로 구성된 문장을 호출합니다.
Sven Marnach

... 그리고 그렇게 혼자가 아닙니다.

-1

표현식에 연산자 + 피연산자와 연산 결과를 보유하는 객체가 포함되어 있다고 생각합니다.

var sum = a + b;

그러나 명령문은 단순히 코드 라인 (표현식 일 수 있음) 또는 코드 블록입니다. 예 :

fun printHello(name: String?): Unit {
if (name != null)
    println("Hello ${name}")
else
    println("Hi there!")
// `return Unit` or `return` is optional

}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.