Saya telah mempelajari Python, dan saya membaca sebuah bab yang menggambarkan None
nilai, tetapi sayangnya buku ini tidak begitu jelas di beberapa titik. Saya pikir saya akan menemukan jawaban untuk pertanyaan saya, jika saya membagikannya di sana.
Aku ingin tahu apa None
nilai yang dan apa yang Anda menggunakannya untuk?
Dan juga, saya tidak mendapatkan bagian dari buku ini:
Menetapkan nilai
None
ke variabel adalah salah satu cara untuk meresetnya ke keadaan semula, kosong.
Apa artinya?
Jawabannya bagus, meskipun saya tidak mengerti sebagian besar jawaban karena pengetahuan saya yang rendah tentang dunia komputer (saya belum belajar tentang kelas, objek, dll.). Apa arti kalimat ini?
Menetapkan nilai
None
ke variabel adalah salah satu cara untuk meresetnya ke keadaan semula, kosong.
Terakhir:
Akhirnya saya mendapat jawaban dari mencari jawaban yang berbeda. Saya harus menghargai semua orang yang memberikan waktu mereka untuk membantu saya (terutama Martijn Pieters dan DSM), dan saya berharap saya dapat memilih semua jawaban sebagai yang terbaik, tetapi pilihannya terbatas pada satu. Semua jawaban sangat bagus.
sumber
None
bukan keadaan kosong default untuk variabel.undef
. juga bisa dibilang javascript, meskipun memiliki keduanyanull
danundefined
.undefined
, jika dibiarkan tidak diinisialisasi.null
, satu hal yang saya gagal berikan pada @MartijnPieters dalam jawabannya.Jawaban:
Jawaban Martijn menjelaskan apa yang
None
ada di Python, dan dengan benar menyatakan bahwa buku itu menyesatkan. Sejak programmer Python sebagai aturan tidak akan pernah mengatakansulit untuk menjelaskan apa arti Briggs dengan cara yang masuk akal dan menjelaskan mengapa tidak ada orang di sini yang senang dengan itu. Satu analogi yang dapat membantu:
Dalam Python, nama variabel seperti stiker yang ditempelkan pada objek. Setiap stiker memiliki nama unik yang tertulis di atasnya, dan itu hanya dapat pada satu objek pada satu waktu, tetapi Anda dapat menempatkan lebih dari satu stiker pada objek yang sama, jika Anda mau. Ketika Anda menulis
Anda menempatkan stiker "F" pada objek string
"fork"
. Jika Anda kemudian menulisAnda memindahkan stiker ke
None
objek.Apa yang diminta Briggs untuk Anda bayangkan adalah bahwa Anda tidak menulis stiker itu
"F"
, sudah adaF
stiker di situNone
, dan yang Anda lakukan hanyalah memindahkannya , dariNone
ke"fork"
. Jadi saat Anda mengetikF = None
, Anda "mengatur ulang [ting] ke keadaan semula, keadaan kosong", jika kami memutuskan untuk memperlakukannyaNone
sebagai maknaempty state
.Saya bisa melihat apa yang dia maksud, tapi itu cara yang buruk untuk melihatnya. Jika Anda memulai Python dan mengetik
print(F)
, Anda tahudan itu
NameError
berarti Python tidak mengenali namanyaF
, karena tidak ada stiker seperti itu . Jika Briggs benar danF = None
mengatur ulangF
ke keadaan semula, maka itu harus ada di sana sekarang, dan kita harus melihatseperti yang kita lakukan setelah kita mengetik
F = None
dan memakai stikerNone
.Jadi hanya itu yang terjadi. Pada kenyataannya, Python dilengkapi dengan beberapa stiker yang sudah melekat pada objek (nama bawaan), tetapi yang lain Anda harus menulis sendiri dengan garis seperti
F = "fork"
danA = 2
danc17 = 3.14
, dan kemudian Anda dapat menempelkannya pada objek lain nanti (sepertiF = 10
atauF = None
; itu semua sama .)Briggs berpura-pura bahwa semua stiker yang mungkin Anda ingin tulis sudah menempel pada
None
objek.sumber
None
hanyalah nilai yang biasanya digunakan untuk menandakan 'kosong', atau 'tidak ada nilai di sini'. Ini adalah objek sinyal ; itu hanya memiliki makna karena dokumentasi Python mengatakan memiliki makna itu.Hanya ada satu salinan dari objek itu dalam sesi interpreter Python yang diberikan.
Jika Anda menulis suatu fungsi, dan fungsi itu tidak menggunakan
return
pernyataan eksplisit ,None
sebaliknya dikembalikan, misalnya. Dengan begitu, pemrograman dengan fungsi jauh lebih sederhana; suatu fungsi selalu mengembalikan sesuatu , bahkan jika itu hanya satuNone
objek.Anda dapat mengujinya secara eksplisit:
Penggunaan lain adalah untuk memberikan parameter opsional ke fungsi 'kosong' default:
Fungsi
spam()
memiliki argumen opsional; jika Anda meneleponspam()
tanpa menentukannya, nilai defaultNone
diberikan padanya, membuatnya mudah untuk mendeteksi apakah fungsi dipanggil dengan argumen atau tidak.Bahasa lain memiliki konsep serupa. SQL memiliki
NULL
; JavaScript memilikiundefined
dannull
, dll.Perhatikan bahwa dalam Python, variabel ada berdasarkan yang digunakan. Anda tidak perlu mendeklarasikan variabel terlebih dahulu, jadi tidak ada variabel kosong di Python. Mengatur variabel ke
None
kemudian tidak sama dengan mengaturnya ke nilai kosong default;None
adalah nilai juga, meskipun yang sering digunakan untuk menandakan kekosongan. Buku yang Anda baca menyesatkan tentang hal itu.sumber
undefined
dannull
.undefined
adalah objek dalam JavaScript, dan Anda dapat menggunakan objek itu secara eksplisit seperti yang dapat Anda gunakanNone
dalam Python. Ini adalah objek sinyal, dengan banyak makna yang sama.NULL
masih sesuatu yang dapat ditugaskan dan diuji secara eksplisit.Inilah yang dikatakan dokumentasi Python tentang
None
:Mari kita konfirmasi jenis yang
None
pertamaKeluaran
Pada dasarnya,
NoneType
adalah tipe data sepertiint
,,float
dll. Anda dapat memeriksa daftar tipe default yang tersedia di Python di 8.15. jenis - Nama untuk tipe bawaan .Dan,
None
adalah turunan dariNoneType
kelas. Jadi kita mungkin ingin membuat contoh dariNone
diri kita sendiri. Ayo coba ituKeluaran
Jadi jelas, tidak bisa membuat
NoneType
instance. Kita tidak perlu khawatir tentang keunikan nilainyaNone
.Mari kita periksa bagaimana kita menerapkannya secara
None
internal.Keluaran
Kecuali
__setattr__
, semua yang lain adalah atribut hanya-baca. Jadi, tidak ada cara kita dapat mengubah atributNone
.Mari kita coba dan tambahkan atribut baru ke
None
Keluaran
Pernyataan yang terlihat di atas masing-masing menghasilkan pesan kesalahan ini. Artinya, kita tidak dapat membuat atribut secara dinamis pada
None
instance.Mari kita periksa apa yang terjadi ketika kita menetapkan sesuatu
None
. Sesuai dokumentasi, itu harus melemparSyntaxError
. Artinya, jika kita menetapkan sesuatuNone
, program tidak akan dieksekusi sama sekali.Keluaran
Kami telah menetapkan itu
None
adalah contoh dariNoneType
None
tidak dapat memiliki atribut baruNone
tidak dapat diubah.NoneType
None
dengan memberikan nilai padanya.Jadi, sebagaimana disebutkan dalam dokumentasi,
None
benar-benar dapat dianggap sebagai atrue constant
.Senang mengetahui
None
:)sumber
__setattr__
untuk Tidak AdaBuku yang Anda rujuk jelas berusaha sangat menyederhanakan makna
None
. Variabel Python tidak memiliki keadaan awal, kosong - variabel Python terikat (hanya) ketika mereka didefinisikan . Anda tidak dapat membuat variabel Python tanpa memberinya nilai.tetapi kadang-kadang Anda ingin membuat fungsi memiliki arti yang berbeda tergantung pada apakah suatu variabel didefinisikan atau tidak. Anda dapat membuat argumen dengan nilai default
None
:Fakta bahwa nilai ini adalah nilai khusus
None
tidak terlalu penting dalam kasus ini. Saya bisa menggunakan nilai default apa pun:... tetapi memiliki
None
sekitar memberi kita dua manfaat:-1
yang artinya tidak jelas, dan-1
sebagai input normal.Ups!
Jadi buku ini sedikit menyesatkan sebagian besar dalam penggunaan kata reset - menugaskan
None
ke nama adalah sinyal ke programmer bahwa nilai tersebut tidak digunakan atau bahwa fungsi harus berperilaku dalam beberapa cara standar, tetapi untuk mereset nilai ke keadaan semula dan tidak terdefinisi, Anda harus menggunakandel
kata kunci:sumber
Jawaban lain telah menjelaskan arti Tidak ada yang indah. Namun, saya masih ingin menyoroti ini menggunakan contoh.
Contoh:
Sekarang coba tebak output dari daftar di atas. Yah, jawabannya mengejutkan seperti di bawah ini:
Tapi kenapa?
Banyak yang keliru berharap list1 sama dengan [10] dan list3 sama dengan ['a'] , berpikir bahwa argumen daftar akan disetel ke nilai default [] setiap kali extList dipanggil.
Namun, apa yang sebenarnya terjadi adalah bahwa daftar default baru dibuat hanya sekali ketika fungsi didefinisikan , dan daftar yang sama kemudian digunakan selanjutnya setiap kali extendedList dipanggil tanpa argumen daftar yang ditentukan. Ini karena ekspresi dalam argumen default dihitung ketika fungsi didefinisikan, bukan ketika dipanggil .
list1 dan list3 karenanya beroperasi pada daftar default yang sama, sedangkan list2 beroperasi pada daftar terpisah yang dibuatnya (dengan melewatkan daftar kosongnya sendiri sebagai nilai untuk parameter daftar).
'Tidak ada' penyelamat: (Ubah contoh di atas untuk menghasilkan perilaku yang diinginkan)
Dengan implementasi yang direvisi ini, hasilnya adalah:
Catatan - Contoh kredit ke toptal.com
sumber
Tidak ada yang merupakan objek tunggal (artinya hanya ada satu Tidak ada), yang digunakan di banyak tempat dalam bahasa dan perpustakaan untuk mewakili tidak adanya nilai lain.
Misalnya:
jika
d
kamus,d.get(k)
akan kembalid[k]
jika ada, tetapiNone
jikad
tidak memiliki kuncik
.Baca info ini dari blog yang bagus: http://python-history.blogspot.in/
sumber
Semua ini adalah jawaban yang baik tetapi saya pikir ada lebih banyak untuk menjelaskan mengapa
None
ini berguna.Bayangkan Anda mengumpulkan RSVP untuk pernikahan. Anda ingin mencatat apakah setiap orang akan hadir. Jika mereka hadir, Anda menetapkan
person.attending = True
. Jika mereka tidak menghadiri set Andaperson.attending = False
. Jika Anda belum menerima RSVP, makaperson.attending = None
. Dengan begitu Anda dapat membedakan antara tidak ada informasi -None
- dan jawaban negatif.sumber
Saya suka contoh kode (juga buah), jadi saya tunjukkan
Tidak ada yang berarti, itu tidak memiliki nilai.
Tidak ada yang menilai False.
sumber
print(None)
cetakan ..None
. Itu tidak tidak , seperti yang Anda sarankan, cetak apa-apa.None
itu adalah hasil dari ekspresi terakhir. (yang sebagian besar bermanfaat untuk fungsi yang tidak dimaksudkan untuk mengembalikan nilai.)None
jika itu adalah hasil dari ekspresi, kebanyakan untuk tidak mengacaukan output.sumber