คำตอบ:
my_list = [1,2,3,4,5]
len(my_list)
# 5
งานเดียวกันสำหรับสิ่งอันดับ:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
และสตริงซึ่งเป็นเพียงอาร์เรย์ของตัวละคร:
my_string = 'hello world'
len(my_string)
# 11
มันถูกทำโดยเจตนาด้วยวิธีนี้เพื่อให้รายการ tuples และประเภทภาชนะอื่น ๆ หรือ iterables ไม่จำเป็นต้องทุกอย่างชัดเจนใช้ประชาชน.length()
วิธีการแทนคุณก็สามารถตรวจสอบlen()
อะไรที่ใช้ 'วิเศษ' __len__()
วิธีการ
แน่นอนว่านี่อาจดูเหมือนซ้ำซ้อน แต่การตรวจสอบความยาวอาจแตกต่างกันไปอย่างมากแม้ในภาษาเดียวกัน มันไม่ใช่เรื่องแปลกที่จะเห็นคอลเลกชันชนิดหนึ่งใช้.length()
วิธีการในขณะที่อีกชนิดหนึ่งใช้สถานที่ให้บริการในขณะที่ยังใช้อีก.length
.count()
การมีคำหลักระดับภาษาจะรวมจุดเข้าใช้งานสำหรับประเภทเหล่านี้ทั้งหมด ดังนั้นแม้แต่วัตถุที่คุณอาจไม่ถือว่าเป็นรายการองค์ประกอบก็ยังสามารถตรวจสอบความยาวได้ ซึ่งรวมถึงสายอักขระคิวต้นไม้เป็นต้น
ลักษณะการทำงานของlen()
ยังให้ยืมตัวเองดีกับรูปแบบการทำงานของการเขียนโปรแกรม
lengths = map(len, list_of_containers)
วิธีที่คุณใช้ความยาวของสิ่งใดก็ตามที่เหมาะสม (รายการ, พจนานุกรม, สิ่งอันดับ, สตริง, ... ) คือการโทรหาlen
มัน
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
เหตุผลสำหรับไวยากรณ์ "แปลก" คือว่างูหลามภายในแปลลงในlen(object)
object.__len__()
สิ่งนี้ใช้กับวัตถุใด ๆ ดังนั้นหากคุณกำหนดคลาสบางคลาสและมีความยาวพอให้กำหนด__len__()
เมธอดบนคลาสจากนั้นจึงเรียกlen
ใช้อินสแตนซ์เหล่านั้นได้
Python ใช้การพิมพ์เป็ด : มันไม่สนใจว่าวัตถุคืออะไรตราบใดที่มันมีส่วนต่อประสานที่เหมาะสมกับสถานการณ์ในมือ เมื่อคุณเรียกใช้ฟังก์ชัน built-in len () บนวัตถุคุณกำลังเรียกเมธอด __len__ ภายในของมัน วัตถุที่กำหนดเองสามารถใช้อินเทอร์เฟซนี้และ len () จะส่งคืนคำตอบแม้ว่าวัตถุนั้นจะไม่ได้เรียงตามแนวคิด
สำหรับรายการอินเตอร์เฟสทั้งหมดดูที่นี่: http://docs.python.org/reference/datamodel.html#basic-customization
วิธีที่ต้องการในการรับความยาวของวัตถุหลามใด ๆ คือการส่งผ่านมันเป็นอาร์กิวเมนต์ของlen
ฟังก์ชั่น ภายในไพ ธ อนจะพยายามเรียกใช้__len__
วิธีพิเศษของวัตถุที่ถูกส่งผ่าน
เพียงใช้len(arr)
:
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
คุณสามารถใช้len(arr)
ตามคำแนะนำในคำตอบก่อนหน้าเพื่อรับความยาวของอาร์เรย์ ในกรณีที่คุณต้องการขนาดของอาเรย์ 2 มิติคุณสามารถใช้arr.shape
ผลตอบแทนความสูงและความกว้าง
len(list_name)
ฟังก์ชั่นใช้รายการเป็นพารามิเตอร์และมันเรียก__len__()
ฟังก์ชั่นรายการ
Python แนะนำให้ผู้ใช้ใช้len()
แทนความ__len__()
มั่นคงเช่นเดียวกับที่คนอื่นพูด อย่างไรก็ตามมีประโยชน์อื่น ๆ :
สำหรับบางคนในตัวชนิดเช่นlist
, str
, bytearray
และอื่น ๆ , การดำเนินการของ Cython len()
ต้องใช้ทางลัด โดยตรงจะส่งกลับในโครงสร้างซีซึ่งจะเร็วกว่าการโทรob_size
__len__()
หากคุณสนใจรายละเอียดดังกล่าวคุณสามารถอ่านหนังสือที่ชื่อว่า "Fluent Python" โดย Luciano Ramalho มีรายละเอียดที่น่าสนใจมากมายและอาจช่วยให้คุณเข้าใจ Python ได้ลึกซึ้งยิ่งขึ้น