Mengapakah nilai lalai dikongsi antara objek dalam Python?

王林
Lepaskan: 2023-08-20 19:33:23
ke hadapan
1120 orang telah melayarinya

Mengapakah nilai lalai dikongsi antara objek dalam Python?

Konsep nilai lalai dalam Python adalah berdasarkan penggunaan objek boleh ubah atau tidak boleh ubah. Dalam amalan pengaturcaraan, adalah lebih baik untuk tidak menggunakan objek boleh ubah sebagai nilai lalai. Sebaliknya, gunakan Tiada sebagai nilai lalai untuk mengelakkan masalah. Objek tidak berubah, seperti nombor, rentetan, tupel dan Tiada, tidak berubah. Untuk objek boleh ubah seperti kamus, senarai dan contoh kelas, perubahan boleh menyebabkan kekeliruan.

Mari kita lihat contoh kamus dalam fungsi dan masalahnya serta cara membetulkannya.

Soalan

Kami ada fungsi. Dalam fungsi ini, kami mempunyai kamus sebagai parameter dan menetapkan nilai lalai. Kali pertama fungsi ini dipanggil, mydict mengandungi hanya satu item. Pada panggilan kedua, mydict mengandungi dua item kerana apabila foo() mula melaksanakan, mydict sudah mempunyai satu item.

def foo(mydict={}):
   ... calculate...
   mydict[key] = value
   return mydict
Salin selepas log masuk

Kami sering menjangkakan panggilan fungsi untuk mencipta objek baharu dengan nilai lalai. Walau bagaimanapun, ini tidak berlaku. Nilai lalai hanya dibuat sekali apabila fungsi ditakrifkan. Jika objek diubah suai, seperti dalam contoh kamus di atas, panggilan seterusnya ke fungsi akan merujuk objek yang diubah suai.

Penyelesaian

Untuk menyelesaikan masalah menggunakan objek boleh ubah sebagai nilai lalai, seperti ini -

def foo(mydict={}):
   ...
Salin selepas log masuk

Gunakan objek tidak berubah seperti Tiada -

def foo(mydict=None):
   if mydict is None:
      mydict = {}
Salin selepas log masuk

Apabila anda mempunyai fungsi yang mahal dari segi pengiraan, satu teknik adalah untuk cache argumen dan nilai hasil untuk setiap panggilan ke fungsi, dan mengembalikan nilai cache apabila nilai yang sama diminta semula.

Ini dipanggil memoization dan boleh dicapai seperti ini -

# Callers can only provide two parameters and optionally pass _cache by keyword
def expensive(arg1, arg2, *, _cache={}):
   if (arg1, arg2) in _cache:
      return _cache[(arg1, arg2)]

  # Calculate
  result = ... expensive computation ...
  _cache[(arg1, arg2)] = result
  return result
Salin selepas log masuk

Yang berikut menyimpan keputusan dalam cache −

_cache[(arg1, arg2)] = result
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah nilai lalai dikongsi antara objek dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan