Sự khác biệt giữa biểu thức và câu lệnh trong Python là gì?


Câu trả lời:


242

Expressions chỉ chứa định danh , chữcác nhà khai thác , nơi các nhà khai thác bao gồm toán tử số học và boolean, chức năng điều hành cuộc gọi () các nhà khai thác thuê bao [] và tương tự, và có thể được giảm xuống còn một số loại "giá trị", mà có thể là bất kỳ đối tượng Python. Ví dụ:

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

Tuyên bố (xem 1 ,2 ), mặt khác, là tất cả mọi thứ có thể tạo thành một dòng (hoặc một vài dòng) mã Python. Lưu ý rằng các biểu thức là báo cáo là tốt. Ví dụ:

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

17
biểu thức là một phần của các tuyên bố
bismigalis

59
@bismigalis: Mỗi biểu thức Python hợp lệ có thể được sử dụng làm câu lệnh (được gọi là "câu lệnh biểu thức" ). Theo nghĩa này, biểu thức tuyên bố.
Sven Marnach

2
Biểu thức cũng có thể bao gồm các lệnh gọi hàm (bao gồm các lớp gọi để khởi tạo đối tượng). Về mặt kỹ thuật, đây là những "định danh" chính xác giống như tên được liên kết với các giá trị trong câu lệnh = ... mặc dù ràng buộc là thông qua các từ khóa 'def' hoặc 'class'. Tuy nhiên, đối với câu trả lời này, tôi sẽ đánh vần riêng các lệnh gọi hàm để làm rõ điều đó.
Jim Dennis

2
@George Hội chợ đủ rồi. :) Các câu lệnh biểu thức khá hữu ích ngay cả bên ngoài REPL - khá phổ biến để sử dụng các biểu thức gọi hàm làm câu lệnh biểu thức, ví dụ print("Hello world!")hoặc my_list.append(42).
Sven Marnach

3
@WillTaylor Mọi thứ mang lại giá trị là một biểu thức, tức là mọi thứ bạn có thể viết ở phía viết tay của bài tập. Vì a = yield 7là hợp lệ, yield 7là một biểu thức. Một thời gian dài trước đây, yieldđã được giới thiệu như một tuyên bố, nhưng nó đã được khái quát thành một biểu thức trong PEP 342 .
Sven Marnach

120

Biểu hiện - từ Từ điển Oxford Mỹ mới :

biểu thức: Toán học một tập hợp các ký hiệu cùng biểu thị một đại lượng: biểu thức cho chu vi của một vòng tròn là 2πr.

Trong tổng điều khoản chung: Biểu thức tạo ra ít nhất một giá trị.

Trong Python, biểu thức được bao phủ rộng rãi trong Python Language Reference Nói chung, biểu hiện bằng Python được tạo thành từ sự kết hợp cú pháp hợp pháp của nguyên tử , cử sơ bộnhà khai thác .

Biểu thức Python từ Wikipedia

Ví dụ về biểu thức:

Nghĩa đen và kết hợp chính xác về mặt cú pháp với Toán tửcác hàm dựng sẵn hoặc lệnh gọi của các hàm do người dùng viết:

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

Tuyên bố từ Wikipedia:

Trong lập trình máy tính, một câu lệnh có thể được coi là phần tử độc lập nhỏ nhất của ngôn ngữ lập trình mệnh lệnh. Một chương trình được hình thành bởi một chuỗi gồm một hoặc nhiều câu lệnh. Một câu lệnh sẽ có các thành phần bên trong (ví dụ: biểu thức).

Báo cáo Python từ Wikipedia

Nói một cách tổng quát: Các câu lệnh Làm gì đó và thường bao gồm các biểu thức (hoặc các câu khác)

Tài liệu tham khảo ngôn ngữ Python bao gồm các câu lệnh đơn giảncâu lệnh ghép .

Sự khác biệt của "Tuyên bố làm một cái gì đó" và "biểu thức tạo ra một giá trị" tuy nhiên có thể trở nên mờ nhạt:

  • Danh sách hiểu được coi là "Biểu thức" nhưng chúng có cấu trúc lặp và do đó cũng làm một cái gì đó.
  • Đây ifthường là một câu lệnh, chẳng hạn như if x<0: x=0nhưng bạn cũng có thể có một biểu thức điều kiện giống như x=0 if x<0 else 1các biểu thức. Trong các ngôn ngữ khác, như C, hình thức này được gọi là toán tử như thế nàyx=x<0?0:1;
  • Bạn có thể viết Biểu thức của riêng bạn bằng cách viết một hàm. def func(a): return a*alà một biểu thức khi được sử dụng nhưng được tạo thành từ các câu lệnh khi được định nghĩa.
  • Một biểu thức trả về Nonelà một thủ tục trong Python: def proc(): passVề mặt cú pháp, bạn có thể sử dụng proc()như một biểu thức, nhưng đó có thể là một lỗi ...
  • Python nghiêm ngặt hơn một chút so với nói C về sự khác biệt giữa Biểu thức và Tuyên bố. Trong C, bất kỳ biểu thức là một tuyên bố pháp lý. Bạn có thể có func(x=2);Đó là một biểu thức hoặc tuyên bố? ( Trả lời: Biểu thức được sử dụng như một Tuyên bố có tác dụng phụ. ) Câu lệnh gán x=2bên trong lệnh gọi hàm func(x=2)trong Python đặt đối số được đặt tên athành 2 chỉ trong lệnh gọi funcvà bị giới hạn hơn so với ví dụ C.

"Từ điển của tôi" có nghĩa là ý kiến ​​cá nhân của bạn hoặc từ điển bạn sở hữu như từ điển oxford? Cảm ơn
Talespin_Kit

1
@Talespin_Kit: ... ý kiến ​​cá nhân của bạn hoặc từ điển bạn sở hữu như từ điển Oxford? Câu hỏi hay. Tôi đã sử dụng ứng dụng Apple Dictionary trên máy Mac dựa trên New Oxford American Dictionary.
dawg

80

Mặc dù điều này không liên quan đến Python:

Một expressionđánh giá cho một giá trị. A statementlàm một cái gì đó.

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

3
Nhưng lưu ý rằng trong tất cả các ngôn ngữ ngoại trừ những ngôn ngữ thực sự "thuần túy", các biểu thức có thể "làm một cái gì đó" (chính thức hơn: có tác dụng phụ) là tốt.

@delnan: Bạn có thể cho một ví dụ (tò mò) không? Tôi không nhận thức được.
dùng225312

4
Tương tự như vậy , somelist.append(123). Hầu hết các cuộc gọi chức năng, thực sự.
Thomas K

13
y = x + 1 không phải là biểu thức mà là câu lệnh. Hãy thử eval ("y = x + 1") và bạn sẽ gặp lỗi.
Arglanir

3
y = x +1 là một tuyên bố biểu thức
Emmanuel Osimosu

13

Các câu lệnh thể hiện một hành động hoặc lệnh, ví dụ như các câu lệnh in, câu lệnh gán.

print 'hello', x = 1

Biểu thức là sự kết hợp của các biến, hoạt động và giá trị mang lại giá trị kết quả.

5 * 5 # yields 25

Cuối cùng, tuyên bố biểu thức

print 5*5

8

Một biểu thức là một cái gì đó có thể được giảm đến một giá trị, ví dụ "1+3"hoặc "foo = 1+3".

Thật dễ dàng để kiểm tra:

print foo = 1+3

Nếu nó không hoạt động, đó là một tuyên bố, nếu có, đó là một biểu thức.

Một tuyên bố khác có thể là:

class Foo(Bar): pass

vì nó không thể được giảm đến một giá trị.


1
Khi thực hiện ví dụ đầu tiên của bạn sẽ hiển thị, gán không phải là một biểu thức (không thực sự, nghĩa là - a = b = exprđược cho phép, như một trường hợp đặc biệt) trong Python. Trong các ngôn ngữ lấy thêm cảm hứng từ C, nó là.

class Foo(bar):là sự khởi đầu của một tuyên bố, không phải là một tuyên bố hoàn chỉnh.
Sven Marnach

1
foo = 1+3KHÔNG phải là một biểu thức. Đó là một tuyên bố (một nhiệm vụ phải chính xác). Một phần 1+3là một biểu thức mặc dù.
Pithikos

2
Công thức của tôi rất, rất chính xác: "Nếu nó không hoạt động, đó là một tuyên bố, nếu có, đó là một biểu thức." Thực hiện nó, và bạn sẽ có câu trả lời của bạn.
Flavius

8
  1. Một biểu thức là một câu lệnh trả về một giá trị. Vì vậy, nếu nó có thể xuất hiện ở bên phải của một bài tập, hoặc như một tham số cho một cuộc gọi phương thức, thì đó là một biểu thức.
  2. Một số mã có thể là cả biểu thức hoặc câu lệnh, tùy thuộc vào ngữ cảnh. Ngôn ngữ có thể có một phương tiện để phân biệt giữa hai khi chúng mơ hồ.

5

Một biểu thức là một cái gì đó, trong khi một tuyên bố làm một cái gì đó.
Một biểu thức là một tuyên bố là tốt, nhưng nó phải có một sự trở lại.

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

PS: Trình thông dịch luôn in ra các giá trị của tất cả các biểu thức.


theo tôi, một tuyên bố là một biểu thức có giá trị null
Adalcar

3

TUYÊN BỐ:

Tuyên bố là một hành động hoặc một lệnh làm một cái gì đó. Vd: If-Else, Loops..vv

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

BIỂU HIỆN:

Biểu thức là sự kết hợp của các giá trị, toán tử và nghĩa đen mang lại một cái gì đó.

val a: Int = 5 + 5 #yields 10

Đây là bản sao của câu trả lời hiện có này: stackoverflow.com/questions/4728073/ ,.
karel

1
Có thể nó trùng lặp nhưng nó chia sẻ quan điểm của tôi cho câu hỏi trên. Không xúc phạm
Raja Shekar

1

Một tuyên bố có chứa một từ khóa.

Một biểu thức không chứa từ khóa.

print "hello"là tuyên bố, bởi vì printlà một từ khóa.

"hello" là một biểu thức, nhưng nén danh sách là chống lại điều này.

Sau đây là một tuyên bố biểu thức và nó là đúng mà không cần hiểu danh sách:

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

4
Điều đó phụ thuộc rất nhiều vào định nghĩa của bạn về một 'từ khóa'. x = 1là một tuyên bố hoàn toàn tốt, nhưng không chứa từ khóa.
Joost

Không, ví dụ như ismột từ khóa nhưng x is ykhông nhất thiết là một tuyên bố (nói chung nó chỉ là một biểu thức).
benjimin

1

Biểu thức:

  • Biểu thức được hình thành bằng cách kết hợp objectsoperators.
  • Một biểu thức có một giá trị, trong đó có một loại.
  • Cú pháp cho một biểu thức đơn giản:<object><operator><object>

2.0 + 3là một biểu thức đánh giá 5.0và có một loại floatliên quan đến nó.

Các câu lệnh

Báo cáo bao gồm các biểu thức. Nó có thể trải dài trên nhiều dòng.


1

Có một số câu lệnh có thể thay đổi trạng thái của chương trình Python của chúng tôi: tạo hoặc cập nhật biến, xác định hàm, v.v.

Và các biểu thức chỉ trả về một số giá trị không thể thay đổi trạng thái toàn cục hoặc trạng thái cục bộ trong một hàm.

Nhưng bây giờ chúng ta đã có :=, đó là một người ngoài hành tinh!


-1

Python gọi biểu thức là "câu lệnh biểu thức", vì vậy câu hỏi có lẽ chưa được hình thành đầy đủ.

Một câu lệnh bao gồm khá nhiều thứ bạn có thể làm trong Python: tính toán một giá trị, gán một giá trị, xóa một biến, in một giá trị, trả về từ một hàm, đưa ra một ngoại lệ, v.v. Danh sách đầy đủ có ở đây: http: // docs.python.org/reference/simple_stmts.html#

Một câu lệnh biểu thức được giới hạn trong các hàm gọi (ví dụ: math.cos (theta) "), toán tử (ví dụ:" 2 + 3 "), v.v. để tạo ra một giá trị.


10
Không, Python không gọi biểu thức là "câu lệnh biểu thức". Python gọi các câu lệnh chỉ bao gồm một biểu thức "câu lệnh biểu thức".
Sven Marnach

... và nó không đơn độc làm như vậy.

-1

Tôi nghĩ rằng một biểu thức chứa toán tử + toán hạng và đối tượng chứa kết quả của hoạt động ... ví dụ:

var sum = a + b;

nhưng một câu lệnh chỉ đơn giản là một dòng mã (nó có thể là một biểu thức) hoặc khối mã ... ví dụ

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

}

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.