นิพจน์และคำสั่งใน Python แตกต่างกันอย่างไร


คำตอบ:


242

การแสดงออกเพียง แต่มีตัวบ่งชี้ , ตัวอักษรและผู้ประกอบการที่ผู้ประกอบการรวมถึงการดำเนินการทางคณิตศาสตร์และบูลฟังก์ชั่นผู้ประกอบการโทร ผู้ประกอบการสมัครสมาชิกและที่คล้ายกันและสามารถลดลงได้บางชนิดของ "ค่า" ซึ่งอาจจะเป็นวัตถุใด ๆ หลาม ตัวอย่าง:() []

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

งบ (ดู 1 ,2 ) ในทางกลับกันคือทุกสิ่งที่สามารถสร้างโค้ด Python (หรือหลายบรรทัด) โปรดทราบว่าการแสดงออกเป็นงบเช่นกัน ตัวอย่าง:

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

17
การแสดงออกเป็นส่วนหนึ่งของงบ
bismigalis

59
@bismigalis: ทุกการแสดงออก Python ที่ถูกต้องสามารถใช้เป็นคำสั่ง (เรียกว่า"คำสั่งการแสดงออก" ) ในแง่นี้การแสดงออกเป็นงบ
Sven Marnach

2
นิพจน์ยังสามารถรวมการเรียกใช้ฟังก์ชัน (รวมถึงการเรียกคลาสสำหรับการสร้างอินสแตนซ์ของวัตถุ) ในทางเทคนิคแล้วสิ่งเหล่านี้คือ "ตัวระบุ" เหมือนกับชื่อที่ถูกผูกไว้กับค่าในคำสั่ง = ... แม้ว่าการเชื่อมโยงจะผ่านคำหลัก 'def' หรือ 'คลาส' อย่างไรก็ตามสำหรับคำตอบนี้ฉันจะแยกการเรียกฟังก์ชั่นออกมาเพื่อให้ชัดเจน
จิมเดนนิส

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

Expression - จากพจนานุกรม New Oxford American :

expression: คณิตศาสตร์เป็นชุดของสัญลักษณ์ที่แสดงปริมาณร่วมกัน: นิพจน์สำหรับเส้นรอบวงของวงกลมคือ2πr

ในแง่ทั่วไปทั้งหมด: นิพจน์สร้างค่าอย่างน้อยหนึ่งค่า

ในหลามการแสดงออกจะครอบคลุมกว้างขวางในหลามภาษาอ้างอิงโดยทั่วไปการแสดงออกในหลามที่มีองค์ประกอบของการรวมกันทางกฎหมาย syntactically ของอะตอม , สรรหาและผู้ประกอบการ

Python นิพจน์จาก Wikipedia

ตัวอย่างของการแสดงออก:

ตัวอักษรและการรวมกันที่ถูกต้องทางไวยากรณ์กับผู้ประกอบการและฟังก์ชั่นในตัวหรือการเรียกใช้ฟังก์ชั่นที่ผู้ใช้เขียน:

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

ในการเขียนโปรแกรมคอมพิวเตอร์คำสั่งสามารถถือได้ว่าเป็นองค์ประกอบแบบสแตนด์อโลนที่เล็กที่สุดของภาษาการเขียนโปรแกรมที่จำเป็น โปรแกรมประกอบด้วยรูปแบบของคำสั่งอย่างน้อยหนึ่งประโยค คำสั่งจะมีส่วนประกอบภายใน (เช่นนิพจน์)

งบ Python จาก Wikipedia

ในแง่ทั่วไปทั่วไป: ประโยคทำบางสิ่งบางอย่างและมักจะประกอบด้วยนิพจน์ (หรือข้อความอื่น ๆ )

การอ้างอิงภาษา 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(): passSyntactically คุณสามารถใช้proc()เป็นนิพจน์ แต่นั่นอาจเป็นข้อผิดพลาด ...
  • Python ค่อนข้างเข้มงวดกว่าพูดว่า C อยู่บนความแตกต่างระหว่าง Expression และ Statement ใน C นิพจน์ใด ๆ เป็นข้อความทางกฎหมาย คุณสามารถมีได้func(x=2);นั่นคือการแสดงออกหรือคำสั่ง? ( คำตอบ: การแสดงออกที่ใช้เป็นคำสั่งที่มีผลข้างเคียง ) คำสั่งการมอบหมายx=2ภายในของการเรียกใช้ฟังก์ชั่นfunc(x=2)ใน Python ตั้งค่าอาร์กิวเมนต์ที่ตั้งชื่อaเป็น 2 เฉพาะในการเรียกfuncและมีข้อ จำกัด มากกว่าตัวอย่าง C

"จากพจนานุกรมของฉัน" หมายถึงความคิดเห็นส่วนตัวของคุณหรือพจนานุกรมที่คุณเป็นเจ้าของเช่นพจนานุกรมฟอร์ด ขอบคุณ
Talespin_Kit

1
@Talespin_Kit: ... ความเห็นส่วนตัวของคุณหรือพจนานุกรมที่คุณเป็นเจ้าของเช่นพจนานุกรม Oxford? คำถามที่ดี. ฉันใช้แอป Apple Dictionary ใน Mac ซึ่งใช้พจนานุกรม New Oxford American Dictionary
dawg

80

แม้ว่าสิ่งนี้จะไม่เกี่ยวข้องกับ Python:

expressionประเมินค่า 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

3
y = x +1 เป็นคำแถลงเกี่ยวกับการแสดงออก
Emmanuel Osimosu

13

งบแสดงถึงการกระทำหรือคำสั่งเช่นพิมพ์คำสั่งงบกำหนด

print 'hello', x = 1

Expression คือการรวมกันของตัวแปรการดำเนินการและค่าที่ให้ค่าผลลัพธ์

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ได้รับอนุญาตเป็นกรณีพิเศษ) ใน Python ในภาษาที่วาดแรงบันดาลใจมากขึ้นจาก 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

คำให้การ:

คำสั่งคือการกระทำหรือคำสั่งที่ทำบางสิ่งบางอย่าง เช่นถ้าอื่นลูป .. เป็นต้น

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" คือการแสดงออก แต่การบีบอัดรายการผิดพลาด

ต่อไปนี้เป็นคำสั่ง expression และเป็นจริงโดยที่ไม่มีความเข้าใจในรายการ:

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

4
ขึ้นอยู่กับคำจำกัดความของคำว่า 'คำหลัก' เป็นอย่างยิ่ง x = 1เป็นคำสั่งที่ดีอย่างสมบูรณ์ แต่ไม่มีคำหลัก
Joost

ไม่เช่นisเป็นคำหลัก แต่x is yไม่จำเป็นต้องมีคำสั่ง (โดยทั่วไปเป็นเพียงการแสดงออก)
benjimin

1

นิพจน์:

  • สำนวนที่จะเกิดขึ้นจากการรวมและobjectsoperators
  • นิพจน์มีค่าซึ่งมีชนิด
  • ไวยากรณ์สำหรับการแสดงออกอย่างง่าย:<object><operator><object>

2.0 + 3เป็นนิพจน์ที่ประเมิน5.0และมีประเภทที่floatเกี่ยวข้อง

งบ

ข้อความประกอบด้วยนิพจน์ มันสามารถขยายหลายบรรทัด


1

มีข้อความบางส่วนที่สามารถเปลี่ยนสถานะของโปรแกรม Python ของเรา: สร้างหรือปรับปรุงตัวแปรกำหนดฟังก์ชั่น ฯลฯ

และนิพจน์เพิ่งคืนค่าบางอย่างไม่สามารถเปลี่ยนสถานะโกลบอลหรือสถานะโลคัลในฟังก์ชัน

แต่ตอนนี้เราได้:=มันเป็นเอเลี่ยน!


-1

Python เรียกนิพจน์ "expression expression" ดังนั้นคำถามนี้อาจจะยังไม่เกิดขึ้นอย่างสมบูรณ์

คำสั่งประกอบด้วยอะไรที่คุณสามารถทำได้ใน Python: การคำนวณค่าการกำหนดค่าการลบตัวแปรการพิมพ์ค่าการส่งคืนจากฟังก์ชันการยกข้อยกเว้น ฯลฯ รายการทั้งหมดอยู่ที่นี่: http: // docs.python.org/reference/simple_stmts.html#

คำสั่งการแสดงออกจะถูก จำกัด เพียงฟังก์ชั่นการโทร (เช่น math.cos (theta) "), ผู้ประกอบการ (เช่น" 2 + 3 ") ฯลฯ เพื่อสร้างค่า


10
ไม่ Python ไม่เรียกนิพจน์ "expression expression" Python เรียกใช้คำสั่งที่ประกอบด้วยนิพจน์เดียว "expression expression" เท่านั้น
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.