Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah nilai lalai dikongsi antara objek dalam Python?

Mengapakah nilai lalai dikongsi antara objek dalam Python?

王林
王林ke hadapan
2023-08-20 19:33:231082semak imbas

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

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={}):
   ...

Gunakan objek tidak berubah seperti Tiada -

def foo(mydict=None):
   if mydict is None:
      mydict = {}

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

Yang berikut menyimpan keputusan dalam cache −

_cache[(arg1, arg2)] = result

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam