Pythonの式とステートメントの違いは何ですか?


回答:


242

式には、識別子リテラル演算子のみが含まます。演算子には算術演算子とブール演算子、関数呼び出し演算子 ()サブスクリプション演算子 []などが含まれ、何らかの「値」に縮小できます。これは、任意のPythonオブジェクトにすることができます。例:

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

ステートメント(参照 1一方、2)は、Pythonコードの1行(または数行)を構成できるすべてのものです。式もステートメントであることに注意してください。例:

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

17
式はステートメントの一部です
bismigalis 2013年

59
@bismigalis:すべての有効なPython式をステートメントとして使用できます(「式ステートメント」と呼ばれます)。この意味で、式ステートメントです。
Sven Marnach 2013年

2
式には、関数呼び出し(オブジェクトのインスタンス化のための呼び出しクラスを含む)を含めることもできます。技術的には、これらは「識別子」であり、=ステートメントの値にバインドされた名前とまったく同じです...バインディングが「def」または「class」キーワードを介して行われている場合でも。ただし、この回答では、それを明確にするために関数呼び出しを個別に説明します。
ジム・デニス

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です。

大まかに言うと、式は少なくとも1つの値を生成します。

Pythonでは、式はで広く覆われているのPython言語リファレンスで一般的な、Pythonでの表現は、の構文的に法的な組み合わせで構成されている原子原色演算子

ウィキペディアのPython式

式の例:

リテラルおよび演算子組み込み関数の構文的に正しい組み合わせ、またはユーザー作成関数の呼び出し:

>>> 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

ウィキペディアからの声明

コンピュータプログラミングでは、ステートメントは命令型プログラミング言語の最小のスタンドアロン要素と考えることができます。プログラムは、1つ以上のステートメントのシーケンスによって形成されます。ステートメントには内部コンポーネント(式など)があります。

ウィキペディアのPythonステートメント

総一般的には:ステートメントは、何かをし、多くの場合、式(またはその他の文)で構成されています

Python言語リファレンスでは、単純なステートメント複合ステートメントを幅広くカバーしています。

ただし、「ステートメントは何かを行う」と「式は値を生成する」の区別がぼやけることがあります。

  • リスト内包表記は「式」と見なされますが、ループ構造を持っているため、何かを行います。
  • 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()、式として使用できますが、おそらくバグです...
  • Pythonは、Cが式とステートメントの違いについて述べているよりも少し厳密です。Cでは、式はすべて正当な声明です。あなたfunc(x=2);はそれを式またはステートメントにすることができますか?(回答:副作用のあるステートメントとして使用される式。)Pythonののx=2関数呼び出し内の代入ステートメントはfunc(x=2)、名前付き引数aを2に設定しfunc、Cの例よりも制限されています。

「私の辞書から」は、あなたの個人的な意見、またはオックスフォード辞書のようなあなたが所有する辞書を意味しますか?ありがとう
Talespin_Kit

1
@Talespin_Kit:...あなたの個人的な意見ですか、それともオックスフォード辞書のようにあなたが所有する辞書ですか?良い質問。New Oxford American Dictionaryに基づいたMacでApple Dictionaryアプリを使用しました。
1

80

これはPythonとは関係ありませんが:

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)。ほとんどの関数呼び出しは、本当に。
トーマスK

13
y = x + 1は式ではなくステートメントです。eval( "y = x + 1")を実行すると、エラーが発生します。
Arglanir 2013

3
y = x +1は式ステートメントです
Emmanuel 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
最初の例を実行するとわかるように、Python では割り当ては式ではありません(実際には、つまりa = b = expr、特殊なケースとして許可されています)。Cからさらにインスピレーションを得ている言語では、そうです。

class Foo(bar):完全なステートメントではなく、ステートメントの始まりです。
Sven Marnach、2011年

1
foo = 1+3式ではありません。これはステートメント(正確には割り当て)です。一部1+3は式ですが。
ピティコ2015

2
私の定式化は非常に正確です。「機能しない場合はステートメントであり、機能する場合は式です。」それを実行すると、あなたの答えがあります。
Flavius 2017年

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!")

式:

式は、値、演算子、およびリテラルの組み合わせであり、何かを生成します。

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、2014年

いいえ、たとえばisキーワードですx is yが、必ずしもステートメントである必要はありません(一般的には単なる式です)。
ベンジミン

1

式:

  • 式を組み合わせることによって形成されているobjectsoperators
  • 式には、タイプを持つ値があります。
  • 単純な式の構文:<object><operator><object>

2.0 + 3評価され5.0float関連付けられた型を持つ式です。

ステートメント

ステートメントは式で構成されます。複数行にまたがることができます。


1

Pythonプログラムの状態を変更する可能性のあるステートメントがいくつかあります:変数の作成または更新、関数の定義など。

そして、式はある値を返すだけで、関数のグローバル状態またはローカル状態を変更できません。

しかし、今、私たちは:=エイリアンです!


-1

Pythonは式を「式ステートメント」と呼んでいるため、問題はおそらく完全に形づくられていません。

ステートメントは、Pythonで実行できるほとんどすべてのことで構成されています。値の計算、値の割り当て、変数の削除、値の出力、関数からの戻り、例外の発生などです。完全なリストは次のとおりです:http:// docs.python.org/reference/simple_stmts.html#

式ステートメントは、値を生成するための呼び出し関数(たとえば、math.cos(theta) ")、演算子(たとえば、" 2 + 3 ")などに制限されています。


10
いいえ、Pythonは式を「式ステートメント」とは呼びません。Pythonは、単一の式「式ステートメント」のみで構成されるステートメントを呼び出します。
Sven Marnach、2011年

...そしてそうするのは一人だけではありません。

-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.