Jika saya memiliki pemahaman daftar (misalnya) seperti ini:
['' for x in myList]
Secara efektif membuat daftar baru yang memiliki string kosong untuk setiap elemen dalam daftar, saya tidak pernah menggunakan x
. Apakah ada cara yang lebih bersih untuk menulis ini sehingga saya tidak perlu mendeklarasikan x
variabel yang tidak digunakan ?
Jawaban:
_
adalah nama placeholder standar untuk anggota yang diabaikan dalam tugas perulangan dan tupel, misalnya['' for _ in myList] [a+d for a, _, _, d, _ in fiveTuples]
BTW daftar Anda dapat ditulis tanpa pemahaman daftar (dengan asumsi Anda ingin membuat daftar anggota yang tidak dapat diubah seperti string, bilangan bulat, dll.).
[''] * len(myList)
sumber
a=[[]]*4;a[0].append(5);print(a)
for
loop bersarang , misalnya? Atau jika di dalamfor _ in range(...)
saya ingin mengatakan_, var = f(x)
? Apakah akan membingungkan antara kedua_
variabel?Tidak. Seperti yang dikatakan Zen: Kasus khusus tidak cukup khusus untuk melanggar aturan. Kasus khusus adalah loop yang tidak menggunakan item dari item yang diiterasi dan aturannya adalah bahwa ada "target" yang akan dibuka.
Namun, Anda dapat menggunakan
_
sebagai nama variabel, yang biasanya dipahami sebagai "sengaja tidak digunakan" (bahkan PyLint dll. Mengetahui dan menghormati ini).sumber
C: 10,24: Invalid variable name "_" (invalid-name)
kecuali Anda menambahkannya kegood-names
dalam file.pylintrc
.Ternyata menggunakan
dummy*
(kata awal adalah dummy) sebagai nama variabel melakukan trik yang sama seperti_
._
adalah standar yang diketahui dan akan lebih baik menggunakan nama variabel yang bermakna. Sehingga Anda dapat menggunakandummy
,dummy1
,dummy_anything
. Dengan menggunakan nama variabelPyLint
ini tidak akan mengeluh.sumber
Tambahkan komentar berikut setelah perulangan for pada baris yang sama:
#pylint: disable = unused-variable
for i in range(100): #pylint: disable=unused-variable
sumber
Jika Anda perlu memberi nama argumen Anda (dalam kasus, misalnya, saat menulis olok-olok yang tidak menggunakan argumen tertentu yang direferensikan oleh nama), Anda dapat menambahkan metode pintasan ini:
def UnusedArgument(_): pass
dan kemudian gunakan seperti ini
def SomeMethod(name_should_remain): UnusedArgument(name_should_remain)
sumber
Objek generator tidak benar-benar menggunakan variabel. Jadi seperti itu
list(('' for x in myList))
harus melakukan triknya. Perhatikan bahwa x tidak didefinisikan sebagai variabel di luar pemahaman generator.
sumber
Anda juga dapat menambahkan nama variabel dengan
_
jika Anda lebih suka memberikan nama variabel yang dapat dibaca manusia. Sebagai contoh Anda dapat menggunakan_foo
,_foo1
,_anything
dan Pylint tidak akan mengeluh. Dalam loop for, akan seperti ini:for _something in range(10): do_something_else()
edit: Tambahkan contoh
sumber
Cara verbose adalah:
newList = [] while len(newList) < len(mylist): newList.append('')
Anda menghindari mendeklarasikan variabel bekas dengan cara ini.
Anda juga dapat menambahkan objek yang dapat berubah dan tidak dapat diubah (seperti kamus) ke dalam
newList
.Hal lain untuk pemula python seperti saya, '_', 'dummy' agak membingungkan.
sumber
Cobalah, sederhana:
# Use '_' instead of the variable for _ in range(any_number): do_somthing()
sumber
Komentar untuk Bagaimana saya bisa berkeliling mendeklarasikan variabel yang tidak digunakan dalam loop for? (Kehabisan ukuran komentar)
Python mempertahankan referensi yang sama untuk objek yang dibuat. (terlepas dari mutabilitas), misalnya,
In [1]: i = 1 In [2]: j = 1 In [3]: id(i) Out[3]: 142671248 In [4]: id(j) Out[4]: 142671248
Anda, dapat melihat i dan j, mengacu pada objek yang sama di memori. Apa yang terjadi, ketika kita mengubah nilai dari satu variabel yang tidak dapat diubah.
In [5]: j = j+1 In [6]: id(i) Out[6]: 142671248 In [7]: id(j) Out[7]: 142671236
Anda dapat melihat j sekarang mulai menunjukkan lokasi baru, (di mana 2 disimpan), dan saya masih menunjuk ke lokasi di mana 1 disimpan. Saat mengevaluasi,
j = j+1
Nilai diambil dari 142671248, dihitung (jika belum di-cache), dan diletakkan di lokasi baru 142671236. j dibuat untuk menunjuk ke lokasi baru. Dalam istilah yang lebih sederhana, salinan baru dibuat setiap kali variabel yang tidak dapat diubah diubah.
Mutabilitas
Objek yang dapat berubah bertindak sedikit berbeda dalam hal ini. Ketika nilai ditunjukkan
In [16]: a = [] In [17]: b = a In [18]: id(a) Out[18]: 3071546412L In [19]: id(b) Out[19]: 3071546412L
Baik a dan b menunjuk ke lokasi memori yang sama.
In [20]: a.append(5)
Lokasi memori yang ditunjukkan oleh a diubah.
In [21]: a Out[21]: [5] In [22]: b Out[22]: [5] In [23]: id(a) Out[23]: 3071546412L In [24]: id(b) Out[24]: 3071546412L
Baik a dan b, masih mengarah ke lokasi memori yang sama. Dengan kata lain, variabel yang dapat berubah bertindak dari lokasi memori yang sama yang ditunjukkan oleh variabel, alih-alih membuat salinan dari nilai yang ditunjukkan oleh variabel, seperti dalam kasus variabel yang tidak dapat diubah.
sumber