Pythonic หมายถึงอะไร? [ปิด]


93

ในหลาย ๆ เว็บไซต์ฉันมักจะเห็นความคิดเห็นว่าโค้ดไม่ใช่ pythonic หรือมีวิธี pythonic มากขึ้นในการบรรลุเป้าหมายเดียวกัน

Pythonic หมายถึงอะไรในบริบทนี้? ตัวอย่างเช่นทำไมถึงเป็น

while i < someValue:
   do_something(list[i])
   i += 1

ไม่ใช่ pythonic ในขณะที่

for x in list:
   doSomething(x)

pythonic คืออะไร?



นี่เป็นคำถามนอกหัวข้อ คุณสามารถให้ตัวอย่างโค้ดขนาดเล็กเพื่อให้ตรงกับหัวข้อมากขึ้น
ρส

คำตอบ:


104

ใช้ประโยชน์จากคุณสมบัติของภาษา Python เพื่อสร้างโค้ดที่ชัดเจนกระชับและดูแลรักษาได้

Pythonic หมายถึงรหัสที่ไม่เพียง แต่ทำให้ไวยากรณ์ถูกต้อง แต่เป็นไปตามแบบแผนของชุมชน Python และใช้ภาษาในลักษณะที่ตั้งใจจะใช้

นี่อาจจะง่ายที่สุดในการอธิบายด้วยตัวอย่างเชิงลบเช่นเดียวกับในบทความที่เชื่อมโยงจากคำตอบอื่น ๆ ตัวอย่างของรหัส unpythonic มักมาจากผู้ใช้ภาษาอื่นซึ่งแทนที่จะเรียนรู้รูปแบบการเขียนโปรแกรม Python เช่นความเข้าใจในรายการหรือนิพจน์ตัวกำเนิดพยายามที่จะชะแลงในรูปแบบที่ใช้บ่อยกว่าใน C หรือ java ลูปเป็นตัวอย่างที่พบเห็นได้ทั่วไปในเรื่องนี้

ตัวอย่างเช่นใน Java ฉันอาจใช้

for i in (i; i < items.length ; i++)
 {
  n = items[i];
 ... now do something
 }

ใน Python เราสามารถลองทำซ้ำได้โดยใช้ในขณะที่วนซ้ำ แต่จะใช้งานได้ดีกว่า

for i in items:
  i.perform_action()

หรือแม้แต่นิพจน์เครื่องกำเนิดไฟฟ้า

(i.some_attribute for i in items)

ดังนั้นโดยพื้นฐานแล้วเมื่อมีคนพูดว่ามีบางอย่างที่ไม่น่าเชื่อพวกเขากำลังบอกว่าโค้ดสามารถเขียนใหม่ได้ด้วยวิธีที่เหมาะสมกว่าสำหรับรูปแบบการเข้ารหัสของงูเหลือม

การพิมพ์import thisที่บรรทัดคำสั่งจะให้สรุปหลักการของ Python ที่ไม่ค่อยมีใครรู้จักก็คือซอร์สโค้ดสำหรับimport thisนั้นเด็ดและด้วยการออกแบบ unpythonic! ลองดูตัวอย่างสิ่งที่ไม่ควรทำ


27
Btw ซอร์สโค้ดสำหรับ "นำเข้า" อยู่ที่นี่: github.com/python/cpython/blob/master/Lib/this.py
Gautam

ตัวอย่างในสาขาอื่นจะเป็นอย่างไร ชอบทำอาหารออกแบบขับ .. ?
Daniel Springer

2
สำหรับตัวอย่างของโค้ดที่ซับซ้อนมากขึ้นการใช้งานการเข้ารหัส Vigenere แบบ "unpythonic" จะทำให้ "pythonic" เพิ่มมากขึ้นในคำตอบนี้ (การเปิดเผย: รหัสและความคิดเห็นของฉัน): stackoverflow.com/questions/2490334/…
นิค

18
ฉันคิดว่าฉันควรแสดงความคิดเห็นที่นี่โดยระบุชื่อผู้ใช้ของฉัน
Pythonic

นอกจากนี้อาจเป็นที่น่าสังเกตว่าคำทั่วไปคือ "สำนวน"
Louis Maddox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.