Apa perbedaan antara ekspresi dan pernyataan dengan Python?

319

Dengan Python, apa perbedaan antara ekspresi dan pernyataan?

wassimans
sumber

Jawaban:

242

Ekspresi hanya mengandung pengidentifikasi , literal dan operator , di mana operator termasuk operator aritmatika dan boolean, fungsi operator call () yang Operator berlangganan [] dan serupa, dan dapat dikurangi untuk beberapa jenis "value", yang dapat berupa objek Python. Contoh:

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

Pernyataan (lihat 1 ,2 ), di sisi lain, adalah segala sesuatu yang dapat membuat garis (atau beberapa baris) dari kode Python. Perhatikan bahwa ekspresi juga pernyataan. Contoh:

# all the above expressions
print 42
if x: do_y()
return
a = 7
Sven Marnach
sumber
17
ekspresi adalah bagian dari pernyataan
bismigalis
59
@bismigalis: Setiap ekspresi Python yang valid dapat digunakan sebagai pernyataan (disebut "pernyataan ekspresi" ). Dalam pengertian ini, ekspresi adalah pernyataan.
Sven Marnach
2
Ekspresi juga dapat mencakup panggilan fungsi (termasuk kelas panggilan untuk instantiasi objek). Secara teknis ini adalah "pengidentifikasi" persis seperti nama yang terikat pada nilai dalam pernyataan = ... meskipun pengikatannya melalui kata kunci 'def' atau 'class'. Namun, untuk jawaban ini saya akan menguraikan panggilan fungsi secara terpisah untuk memperjelasnya.
Jim Dennis
2
@ George Cukup adil. :) Pernyataan ekspresi cukup berguna bahkan di luar REPL - cukup umum untuk menggunakan ekspresi panggilan fungsi sebagai pernyataan ekspresi, misalnyaprint("Hello world!") atau my_list.append(42).
Sven Marnach
3
@WillTaylor Segala sesuatu yang menghasilkan nilai adalah ekspresi, yaitu segala sesuatu yang Anda bisa tulis di sisi penulisan tugas. Karena a = yield 7valid, yield 7adalah ekspresi. Dahulu kala, yielddiperkenalkan sebagai pernyataan, tetapi digeneralisasikan ke ekspresi dalam PEP 342 .
Sven Marnach
120

Ekspresi - dari New Oxford American Dictionary :

ekspresi: Matematika kumpulan simbol yang secara bersama-sama mengekspresikan suatu kuantitas: ekspresi untuk keliling lingkaran adalah 2πr.

Dalam istilah umum kotor: Ekspresi menghasilkan setidaknya satu nilai.

Dalam Python, ekspresi tercakup secara luas dalam Referensi Bahasa Python Secara umum, ekspresi dalam Python terdiri dari kombinasi hukum yang sintaksis antara Atom , Primer , dan Operator .

Ekspresi python dari Wikipedia

Contoh ungkapan:

Kombinasi literal dan sintaksis benar dengan Operator dan fungsi bawaan atau panggilan fungsi yang ditulis pengguna:

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

Pernyataan dari Wikipedia:

Dalam pemrograman komputer, pernyataan dapat dianggap sebagai elemen mandiri terkecil dari bahasa pemrograman imperatif. Suatu program dibentuk oleh urutan satu atau lebih pernyataan. Pernyataan akan memiliki komponen internal (misalnya, ekspresi).

Pernyataan python dari Wikipedia

Dalam istilah umum kasar: Pernyataan Melakukan Sesuatu dan sering kali terdiri dari ekspresi (atau pernyataan lain)

Referensi Bahasa Python mencakup Pernyataan Sederhana dan Pernyataan Kompon secara luas.

Perbedaan "Pernyataan melakukan sesuatu" dan "ekspresi menghasilkan nilai" perbedaan dapat menjadi buram:

  • Daftar Pemahaman dianggap "Ekspresi" tetapi mereka memiliki konstruksi perulangan dan karenanya juga Melakukan Sesuatu.
  • The ifbiasanya sebuah pernyataan, seperti if x<0: x=0tetapi Anda juga dapat memiliki ekspresi kondisional sepertix=0 if x<0 else 1 yang ekspresi. Dalam bahasa lain, seperti C, formulir ini disebut operator seperti inix=x<0?0:1;
  • Anda dapat menulis Anda memiliki Ekspresi dengan menulis suatu fungsi. def func(a): return a*aadalah ekspresi ketika digunakan tetapi terdiri dari pernyataan ketika didefinisikan.
  • Ekspresi yang kembali Noneadalah prosedur dalam Python: def proc(): passSecara sintaksis, Anda dapat menggunakan proc()sebagai ekspresi, tapi itu mungkin bug ...
  • Python sedikit lebih ketat daripada mengatakan C pada perbedaan antara Ekspresi dan Pernyataan. Dalam C, ekspresi apa pun adalah pernyataan hukum. Anda dapat memiliki func(x=2);Apakah itu Ekspresi atau Pernyataan? ( Jawab: Ekspresi yang digunakan sebagai Pernyataan dengan efek samping. ) Pernyataan penugasan x=2di dalam pemanggilan fungsi func(x=2)di Python menetapkan argumen yang dinamai amenjadi 2 hanya dalam pemanggilan ke funcdan lebih terbatas daripada contoh C.
dawg
sumber
"Dari Kamus Saya" yang berarti pendapat pribadi Anda atau kamus yang Anda miliki seperti kamus oxford? Terima kasih
Talespin_Kit
1
@Talespin_Kit: ... pendapat pribadi Anda atau kamus yang Anda miliki seperti kamus Oxford? Pertanyaan bagus. Saya menggunakan aplikasi Kamus Apple di Mac yang didasarkan pada Kamus New American Oxford.
dawg
80

Meskipun ini tidak terkait dengan Python:

Suatu expressionmengevaluasi suatu nilai. A statementmelakukan sesuatu.

>>> x + 2         # an expression
>>> x = 1         # a statement 
>>> y = x + 1     # a statement
>>> print y       # a statement (in 2.x)
2
pengguna225312
sumber
3
Tetapi perhatikan bahwa dalam semua bahasa kecuali yang benar-benar "murni", ekspresi dapat "melakukan sesuatu" (lebih formal: memiliki efek samping) juga.
@delnan: Bisakah Anda memberi contoh (penasaran)? Saya tidak sadar.
user225312
4
Demikian juga somelist.append(123),. Sebagian besar panggilan fungsi, sungguh.
Thomas K
13
y = x + 1 bukan ekspresi tetapi pernyataan. Coba eval ("y = x +1") dan Anda akan memiliki kesalahan.
Arglanir
3
y = x +1 adalah pernyataan ekspresi
Emmanuel Osimosu
13

Pernyataan mewakili suatu tindakan atau perintah misalnya pernyataan cetak, pernyataan penugasan.

print 'hello', x = 1

Ekspresi adalah kombinasi dari variabel, operasi, dan nilai yang menghasilkan nilai hasil.

5 * 5 # yields 25

Terakhir, pernyataan ekspresi

print 5*5
Emmanuel Osimosu
sumber
8

Ekspresi adalah sesuatu yang dapat direduksi menjadi nilai, misalnya "1+3"atau "foo = 1+3".

Sangat mudah untuk memeriksa:

print foo = 1+3

Jika tidak berhasil, itu adalah pernyataan, jika tidak, itu adalah ekspresi.

Pernyataan lain bisa berupa:

class Foo(Bar): pass

karena tidak dapat direduksi menjadi suatu nilai.

Flavius
sumber
1
Seperti mengeksekusi contoh pertama Anda akan menunjukkan, tugas bukan ekspresi (tidak benar-benar, yaitu - a = b = exprdiperbolehkan, sebagai kasus khusus) dengan Python. Dalam bahasa menggambar lebih banyak inspirasi dari C, itu.
class Foo(bar):adalah awal dari sebuah pernyataan, bukan pernyataan yang lengkap.
Sven Marnach
1
foo = 1+3BUKAN sebuah ekspresi. Ini adalah pernyataan (tugas tepatnya). Bagiannya 1+3adalah ekspresi.
Pithikos
2
Formulasi saya sangat, sangat tepat: "Jika tidak berhasil, itu adalah pernyataan, jika itu benar, itu adalah ekspresi.". Jalankan, dan Anda akan mendapatkan jawabannya.
Flavius
8
  1. Ekspresi adalah pernyataan yang mengembalikan nilai. Jadi jika itu bisa muncul di sisi kanan penugasan, atau sebagai parameter untuk pemanggilan metode, itu adalah ekspresi.
  2. Beberapa kode dapat berupa ekspresi atau pernyataan, tergantung pada konteksnya. Bahasa mungkin memiliki sarana untuk membedakan antara keduanya ketika mereka ambigu.
Steven Spungin
sumber
5

Ekspresi adalah sesuatu, sementara pernyataan melakukan sesuatu.
Ekspresi adalah pernyataan juga, tetapi harus memiliki pengembalian.

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

PS: Penerjemah selalu mencetak nilai semua ekspresi.

donald jiang
sumber
menurut pendapat saya, pernyataan adalah ekspresi dengan nilai nol
Adalcar
3

PERNYATAAN:

Pernyataan adalah tindakan atau perintah yang melakukan sesuatu. Mis: Jika Lain, Loops..etc

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

EKSPRESI:

Ekspresi adalah kombinasi dari nilai, operator, dan literal yang menghasilkan sesuatu.

val a: Int = 5 + 5 #yields 10
Raja Shekar
sumber
Ini adalah duplikat dari jawaban yang ada ini: stackoverflow.com/questions/4728073/… .
karel
1
Mungkin itu duplikat tetapi berbagi pandangan saya untuk pertanyaan di atas. Jangan tersinggung
Raja Shekar
1

Pernyataan berisi kata kunci.

Ekspresi tidak mengandung kata kunci.

print "hello"adalah pernyataan, karena printmerupakan kata kunci.

"hello" adalah ekspresi, tetapi kompresi daftar menentang ini.

Berikut ini adalah pernyataan ekspresi, dan itu benar tanpa pemahaman daftar:

(x*2 for x in range(10))
abifromkerala
sumber
4
Itu sangat tergantung pada definisi Anda tentang 'kata kunci'. x = 1adalah pernyataan yang sangat bagus, tetapi tidak mengandung kata kunci.
Joost
Tidak, mis. isAdalah kata kunci tetapi x is ytidak harus berupa pernyataan (secara umum itu hanya ekspresi).
benjimin
1

Ekspresi:

  • Ekspresi dibentuk dengan menggabungkan objectsdan operators.
  • Ekspresi memiliki nilai, yang memiliki tipe.
  • Sintaks untuk ekspresi sederhana:<object><operator><object>

2.0 + 3adalah ekspresi yang mengevaluasi 5.0dan memiliki tipe yang floatterkait dengannya.

Pernyataan

Pernyataan terdiri dari ekspresi. Ini dapat menjangkau beberapa baris.

ssokhey
sumber
1

Ada beberapa pernyataan yang dapat mengubah status program Python kami: membuat atau memperbarui variabel, mendefinisikan fungsi, dll.

Dan ekspresi hanya mengembalikan beberapa nilai yang tidak dapat mengubah keadaan global atau keadaan lokal dalam suatu fungsi.

Tapi sekarang sudah :=, itu alien!

roachsinai
sumber
-1

Python menyebut ekspresi "pernyataan ekspresi", jadi pertanyaannya mungkin tidak sepenuhnya terbentuk.

Pernyataan terdiri dari hampir semua hal yang dapat Anda lakukan dengan Python: menghitung nilai, menetapkan nilai, menghapus variabel, mencetak nilai, kembali dari suatu fungsi, menaikkan pengecualian, dll. Daftar lengkapnya ada di sini: http: // docs.python.org/reference/simple_stmts.html#

Pernyataan ekspresi terbatas pada fungsi panggilan (misalnya, math.cos (theta) "), operator (misalnya," 2 + 3 "), dll. Untuk menghasilkan nilai.

Walter Nissen
sumber
10
Tidak, Python tidak menyebut ekspresi "pernyataan ekspresi". Python menyebut pernyataan hanya terdiri dari satu ekspresi "pernyataan ekspresi".
Sven Marnach
... dan tidak sendirian melakukannya.
-1

Saya pikir ekspresi berisi operator + operan dan objek yang menampung hasil operasi ... misalnya

var sum = a + b;

tetapi pernyataan hanyalah sebaris kode (mungkin berupa ekspresi) atau blok kode ... misalnya

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

}

Rashid Iqbal
sumber