NameError: ชื่อ 'ลด' ไม่ได้กำหนดไว้ใน Python


187

ฉันใช้ Python 3.2 พยายามนี้:

xor = lambda x,y: (x+y)%2
l = reduce(xor, [1,2,3,4])

และได้รับข้อผิดพลาดดังต่อไปนี้:

l = reduce(xor, [1,2,3,4])
NameError: name 'reduce' is not defined

พยายามพิมพ์reduceลงในคอนโซลแบบโต้ตอบ - ได้รับข้อผิดพลาดนี้:

NameError: name 'reduce' is not defined


จะถูกreduceลบออกจริงๆใน Python 3.2? หากเป็นเช่นนั้นจะเป็นทางเลือกอะไร?


3
@JBernardo เครื่องมือที่เหมาะสมคืออะไร?
Sergey

คำตอบ:


280

functoolsมันก็ถูกย้ายไป


49
@ julio.alegria: เพราะกุยเกลียดมัน
Ignacio Vazquez-Abrams

6
บทความที่อ้างถึงใน @ IgnacioVazquez-Abrams ทำให้บางจุดที่ดีจริง ๆ เกี่ยวกับวิธีส่วนใหญ่สามารถเขียนในแบบอ่านได้มากขึ้น sum(item['key'] for item in list_of_dicts)สำหรับผมมันเป็นโดยการเขียน
connorbode

195

คุณสามารถเพิ่ม

from functools import reduce

ก่อนที่คุณจะใช้การลด


3
ผู้ใช้คนก่อนหน้าได้ตอบคำถามแล้วและคำตอบก็เหมือนกับคำตอบของเขา
Kathiravan Natarajan


3

ในกรณีนี้ฉันเชื่อว่าสิ่งต่อไปนี้เทียบเท่า:

l = sum([1,2,3,4]) % 2

ปัญหาเดียวของเรื่องนี้คือมันสร้างตัวเลขจำนวนมาก แต่นั่นอาจจะดีกว่าการใช้โมดูโลซ้ำ ๆ


การดำเนินการแบบโมดูโลซ้ำ ๆ จะมีประโยชน์เมื่อช่วยให้ตัวเลขมีขนาดเล็ก การรวมตัวเลขจะไม่สร้างจำนวนมากยกเว้นว่าคุณรวมจำนวนมากดังนั้นในกรณีนี้มันจะไม่ช่วย โดยเฉพาะอย่างยิ่งเมื่อไม่ทำเช่นนั้นจะอนุญาตให้ใช้ฟังก์ชั่นผลรวมในตัวซึ่งจะทำงานได้เร็วกว่าแอปพลิเคชันที่กำหนดซ้ำโดยผู้ใช้
HackerBoss
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.