Setiap hari aku semakin mencintai python.
Hari ini, saya menulis beberapa kode seperti:
for i in xrange(N):
do_something()
Saya harus melakukan sesuatu N kali. Tetapi setiap waktu tidak tergantung pada nilai i
(variabel indeks). Saya menyadari bahwa saya sedang membuat variabel yang tidak pernah saya gunakan ( i
), dan saya pikir "Pasti ada cara yang lebih pythonic untuk melakukan ini tanpa perlu untuk variabel indeks yang tidak berguna."
Jadi ... pertanyaannya adalah: apakah Anda tahu bagaimana melakukan tugas sederhana ini dengan cara yang lebih (pythonic) yang indah?
coding-style
for-loop
python
Manuel Aráoz
sumber
sumber
range
sebagai gantinya.Jawaban:
Pendekatan yang sedikit lebih cepat daripada melakukan looping
xrange(N)
adalah:sumber
Gunakan variabel _, seperti yang saya pelajari ketika saya mengajukan pertanyaan ini , misalnya:
sumber
Saya hanya menggunakan
for _ in range(n)
, langsung ke intinya. Ini akan menghasilkan seluruh daftar untuk angka besar di Python 2, tetapi jika Anda menggunakan Python 3 itu tidak masalah.sumber
karena fungsi adalah warga negara kelas satu, Anda dapat menulis pembungkus kecil (dari jawaban Alex)
maka Anda dapat melewati fungsi sebagai argumen.
sumber
_ Adalah hal yang sama dengan x. Namun itu adalah idiom python yang digunakan untuk menunjukkan pengidentifikasi yang tidak ingin Anda gunakan. Dalam python pengidentifikasi ini tidak membutuhkan memor atau mengalokasikan ruang seperti variabel lakukan dalam bahasa lain. Mudah untuk melupakannya. Mereka hanya nama yang menunjuk ke objek, dalam hal ini bilangan bulat pada setiap iterasi.
sumber
Saya menemukan berbagai jawaban yang sangat elegan (terutama jawaban Alex Martelli) tetapi saya ingin mengukur sendiri kinerjanya, jadi saya membuat skrip berikut:
Saya juga datang dengan solusi alternatif yang dibangun di atas Martelli dan digunakan
map()
untuk memanggil fungsi payload. OK, saya sedikit curang karena saya mengambil kebebasan untuk membuat payload menerima parameter yang dibuang: Saya tidak tahu apakah ada cara untuk mengatasi ini. Namun demikian, berikut hasilnya:jadi menggunakan peta menghasilkan peningkatan sekitar 30% di atas standar untuk loop dan tambahan 19% di atas Martelli.
sumber
Anggap Anda telah mendefinisikan do_something sebagai fungsi, dan Anda ingin melakukannya N kali. Mungkin Anda bisa mencoba yang berikut:
sumber
fn() for fn in itertools.repeat(do_something, N)
dan menyimpan pra-menghasilkan array ... ini adalah idiom pilihan saya.Bagaimana dengan loop sementara sederhana?
Anda sudah memiliki variabel; mengapa tidak menggunakannya?
sumber