ฉันแน่ใจว่ามีวิธีที่ง่ายกว่าในการทำเช่นนี้ซึ่งไม่ได้เกิดขึ้นกับฉัน
ฉันกำลังเรียกวิธีการมากมายที่ส่งคืนรายการ รายการอาจว่างเปล่า หากรายการไม่ว่างฉันต้องการส่งคืนรายการแรก; มิฉะนั้นฉันต้องการคืนค่าไม่มี รหัสนี้ใช้งานได้:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
สำหรับฉันแล้วดูเหมือนว่าควรมีสำนวนแบบบรรทัดเดียวที่เรียบง่ายสำหรับการทำสิ่งนี้ แต่สำหรับชีวิตของฉันฉันไม่สามารถคิดได้ มีอะไรบ้าง
แก้ไข:
เหตุผลที่ฉันกำลังมองหานิพจน์บรรทัดเดียวที่นี่ไม่ใช่ว่าฉันชอบรหัสตัวอักษรที่เหลือเชื่อ แต่เพราะฉันต้องเขียนโค้ดจำนวนมากเช่นนี้:
x = get_first_list()
if x:
# do something with x[0]
# inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
# do something with y[0]
# inevitably forget the [0] part AGAIN, and have another bug to fix
สิ่งที่ฉันต้องการจะทำแน่นอนสามารถทำได้ด้วยฟังก์ชั่น (และอาจจะ):
def first_item(list_or_none):
if list_or_none: return list_or_none[0]
x = first_item(get_first_list())
if x:
# do something with x
y = first_item(get_second_list())
if y:
# do something with y
ฉันโพสต์คำถามเพราะฉันประหลาดใจกับการแสดงออกอย่างง่าย ๆ ใน Python ที่สามารถทำได้และฉันคิดว่าการเขียนฟังก์ชั่นเป็นเรื่องโง่ที่ต้องทำหากมีการแสดงออกอย่างง่ายสามารถทำกลอุบายได้ แต่เมื่อเห็นคำตอบเหล่านี้ดูเหมือนว่าฟังก์ชั่นเป็นทางออกที่ง่าย
next(iter(your_list))
เพราะถ้าคุณให้ข้อโต้แย้งครั้งที่สองiter
คุณกำลังบอกว่าอาร์กิวเมนต์แรกนั้นสามารถเรียกได้
next(iter(your_list), None)
แทนการfirst_item(your_list)
สมมติว่าyour_list
ไม่ใช่None
(get_first_list()
และget_second_list()
จะต้องส่งคืน iterable เสมอ)