Bagaimana Anda memanggil fungsi di bawah fungsi di python?

Fungsi adalah salah satu "warga negara kelas satu" Python, yang berarti bahwa fungsi berada pada level yang sama dengan objek Python lainnya seperti bilangan bulat, string, modul, dll. Mereka dapat dibuat dan dihancurkan secara dinamis, diteruskan ke fungsi lain, dikembalikan sebagai nilai, dll

Python mendukung konsep "fungsi bersarang" atau "fungsi dalam", yang merupakan fungsi sederhana yang didefinisikan di dalam fungsi lain. Di sisa artikel ini, kita akan menggunakan kata "fungsi dalam" dan "fungsi bersarang" secara bergantian

Ada berbagai alasan mengapa seseorang ingin membuat fungsi di dalam fungsi lain. Fungsi dalam dapat mengakses variabel dalam lingkup terlampir. Pada artikel ini, kita akan menjelajahi berbagai aspek fungsi dalam di Python

Mendefinisikan Fungsi Dalam

Untuk mendefinisikan fungsi dalam di Python, kita cukup membuat fungsi di dalam fungsi lain menggunakan kata kunci def Python. Ini sebuah contoh

Keluaran

Hello from outer function
Hello from inner function

Dalam contoh di atas,

def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
_0 telah didefinisikan di dalam
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
1, menjadikannya fungsi dalam. Untuk menelepon
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
_0, pertama-tama kita harus menelepon
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
1.
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
1 kemudian akan melanjutkan dan memanggil
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
0 seperti yang telah ditentukan di dalamnya

Penting untuk disebutkan bahwa fungsi luar harus dipanggil agar fungsi dalam dapat dijalankan. Jika fungsi luar tidak dipanggil, fungsi dalam tidak akan pernah dijalankan. Untuk mendemonstrasikan ini, ubah kode di atas menjadi kode berikut dan jalankan

Kode tidak akan menghasilkan apa-apa saat dijalankan

Ini contoh lainnya

def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
_

Keluaran

50
_

Kode mengembalikan perkalian dua angka, yaitu 10 dan 5. Contoh menunjukkan bahwa fungsi dalam dapat mengakses variabel yang dapat diakses di fungsi luar

Sejauh ini, Anda telah melihat bahwa kita dapat mengakses variabel dari fungsi luar di dalam fungsi dalam. Bagaimana jika kita mencoba mengubah variabel fungsi luar dari dalam fungsi dalam?

Keluaran

2
9
_

Keluaran menunjukkan bahwa kita dapat menampilkan nilai variabel yang didefinisikan di dalam fungsi luar dari fungsi dalam, tetapi tidak mengubahnya. Pernyataan

def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
_6 membantu kami membuat variabel baru
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
7 di dalam fungsi dalam
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
0 daripada mengubah nilai variabel
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
7 yang didefinisikan dalam fungsi luar
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
1

Di bagian selanjutnya, kita akan membahas alasan utama mengapa kita menggunakan fungsi batin di Python

Mengapa menggunakan Fungsi Dalam?

Enkapsulasi

Suatu fungsi dapat dibuat sebagai fungsi dalam untuk melindunginya dari segala sesuatu yang terjadi di luar fungsi. Dalam hal ini, fungsi tersebut akan disembunyikan dari lingkup global. Ini sebuah contoh

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan menyertakan lembar contekan. Hentikan perintah Googling Git dan benar-benar pelajari itu

Keluaran

Traceback (most recent call last):
  File "C:/Users/admin/inner.py", line 7, in 
    inner_increment(5)
NameError: name 'inner_increment' is not defined

Pada kode di atas, kami mencoba memanggil fungsi

50
1, tetapi kami malah mendapatkan kesalahan

Sekarang, beri komentar pada panggilan ke

50
_1 dan batalkan komentar pada panggilan ke
50
3 seperti yang ditunjukkan di bawah ini

Keluaran

5 7

Skrip di atas menunjukkan bahwa fungsi dalam, yaitu

50
1 dilindungi dari apa yang terjadi di luarnya karena variabel
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
7 di dalam fungsi
50
6 tidak terpengaruh oleh nilai yang diteruskan ke parameter
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
7 dari fungsi luar. Dengan kata lain, variabel di dalam fungsi dalam tidak dapat diakses di luarnya. Ada keuntungan besar dengan pola desain seperti itu. Setelah memeriksa semua argumen di fungsi luar, kita dapat dengan aman melewati pemeriksaan kesalahan di dalam fungsi dalam

Penutupan dan Fungsi Pabrik

Semua contoh yang telah kita lihat sampai sekarang hanya berisi fungsi biasa yang telah disarangkan di dalam fungsi lain. Dimungkinkan bagi kita untuk menulis fungsi seperti itu dengan cara lain alih-alih menyarangkannya di dalam fungsi lain. Kami tidak memiliki alasan khusus mengapa kami harus membuat mereka bersarang

Namun, untuk kasus penutupan, seseorang harus menggunakan fungsi bersarang

Kami dapat mengikat/meneruskan data ke suatu fungsi tanpa harus meneruskan data ke fungsi melalui parameter. Ini dilakukan dengan menggunakan penutupan. Ini adalah objek fungsi yang dapat mengingat nilai-nilai dalam cakupan terlampir bahkan ketika tidak tersedia dalam memori. Ini berarti bahwa kita memiliki penutupan saat fungsi bersarang mereferensikan nilai yang berada dalam cakupan terlampir

Tujuan dari penutupan adalah untuk membuat fungsi bagian dalam mengingat keadaan lingkungannya saat dipanggil, meskipun tidak ada dalam memori. Penutupan disebabkan oleh fungsi batin, tetapi itu bukan fungsi batin. Penutupan bekerja dengan menutup variabel lokal pada tumpukan, yang tetap ada setelah pembuatan tumpukan selesai dijalankan

Berikut ini adalah kondisi yang harus dipenuhi untuk membuat penutupan dengan Python

  • Harus ada fungsi bersarang
  • Fungsi bagian dalam harus mengacu pada nilai yang didefinisikan dalam lingkup terlampir
  • Fungsi penutup harus mengembalikan fungsi bersarang

Perhatikan contoh berikut

def function1(name):
    def function2():
        print('Hello ' + name)
    return function2

func = function1('Nicholas')
func()

Keluaran

Hello Nicholas

Kode di atas menunjukkan bahwa dengan penutupan, kami dapat membuat dan memanggil fungsi dari luar ruang lingkupnya melalui penerusan fungsi. Cakupan

def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
_0 hanya di dalam
def num1(x):
   def num2(y):
      return x * y
   return num2
res = num1(10)

print(res(5))
1. Namun, dengan penggunaan closure, kami dapat memperluas cakupan ini dan memanggilnya dari luar cakupannya

Fungsi dalam membantu kita dalam mendefinisikan fungsi pabrik. Fungsi pabrik adalah fungsi yang membuat objek lain. Sebagai contoh

Keluaran

256
81

Pada script di atas, dari fungsi

2
9
_0, kita telah membuat dua objek lainnya,
2
9
1 dan
2
9
2. Ini menjadikan
2
9
_0 sebagai fungsi pabrik karena menghasilkan fungsi
2
9
1 dan
2
9
2 untuk kita menggunakan parameter yang kita berikan

Kesimpulan

Fungsi dalam hanyalah sebuah fungsi yang didefinisikan di dalam fungsi lain. Fungsi dalam dapat mengakses variabel yang telah didefinisikan dalam lingkup fungsi luar, tetapi tidak dapat mengubahnya. Ada sejumlah alasan mengapa kita mungkin perlu membuat fungsi batin. Misalnya, fungsi dalam dilindungi dari apa yang terjadi di luarnya. Fungsi dalam juga merupakan cara yang baik untuk membuat penutupan dengan Python

Bisakah Anda memanggil fungsi di dalam fungsi Python?

Dengan Python, setiap fungsi tertulis dapat dipanggil oleh fungsi lain . Perhatikan bahwa ini bisa menjadi cara paling elegan untuk memecah masalah menjadi potongan-potongan kecil.

Bagaimana Anda memanggil fungsi di bawah fungsi?

Untuk memanggil fungsi di dalam fungsi lain, tentukan fungsi dalam di dalam fungsi luar dan aktifkan . Saat menggunakan kata kunci fungsi, fungsi diangkat ke bagian atas ruang lingkup dan dapat dipanggil dari mana saja di dalam fungsi luar. Disalin.

Bagaimana Anda mendefinisikan fungsi di bawah fungsi di Python?

Jika Anda mendefinisikan fungsi di dalam fungsi lain, Anda membuat fungsi dalam, juga dikenal sebagai fungsi bersarang . Di Python, fungsi dalam memiliki akses langsung ke variabel dan nama yang Anda tentukan dalam fungsi terlampir.

Bisakah kita memanggil fungsi di bawah fungsi?

Memanggil fungsi dari dalam dirinya sendiri disebut rekursi dan jawaban sederhananya adalah, ya.