NameError: nama 'mengurangi' tidak didefinisikan dalam Python

187

Saya menggunakan Python 3.2. Mencoba ini:

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

Dan mendapat kesalahan berikut:

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

Mencoba mencetak reduceke konsol interaktif - mendapat kesalahan ini:

NameError: name 'reduce' is not defined


Apakah reducebenar-benar dihapus dengan Python 3.2? Jika itu masalahnya, apa alternatifnya?

Sergey
sumber
3
@ Janernardo, apa alat yang tepat?
Sergey

Jawaban:

280

Pindah ke functools.

Ignacio Vazquez-Abrams
sumber
49
@ julio.alegria: Karena Guido membencinya .
Ignacio Vazquez-Abrams
6
Artikel yang dirujuk dalam @ IgnacioVazquez-Abrams membuat beberapa poin yang sangat bagus tentang bagaimana kebanyakan kasus dapat ditulis dengan cara yang lebih mudah dibaca. Bagi saya, itu dengan menulis sum(item['key'] for item in list_of_dicts).
connorbode
195

Anda dapat menambahkan

from functools import reduce

sebelum Anda menggunakan mengurangi.

3 setiap hari
sumber
3
Pengguna sebelumnya telah menjawab pertanyaan dan jawabannya sama dengan jawabannya
Kathiravan Natarajan
8

Atau jika Anda menggunakan enam perpustakaan

from six.moves import reduce
Azd325
sumber
3

Dalam hal ini saya percaya bahwa yang berikut ini setara:

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

Satu-satunya masalah dengan ini adalah ia menciptakan angka besar, tetapi mungkin itu lebih baik daripada operasi modulo berulang?

David M.
sumber
Operasi modulo berulang berguna ketika membantu menjaga angka tetap kecil. Menjumlahkan angka tidak akan membuat angka besar kecuali jika Anda menjumlahkan BANYAK angka, jadi dalam kasus ini tidak akan membantu. Terutama karena tidak melakukan hal itu memungkinkan penggunaan fungsi penjumlahan
bawaan