Fungsi bersarang python mengatur variabel luar

Untuk memahami konsep closure di python kita harus mengetahui apa itu fungsi bersarang dan variabel non-lokal. Jadi mari kita mulai dengan mereka terlebih dahulu


Fungsi bersarang dan variabel Non-lokal

Ketika suatu fungsi didefinisikan di dalam fungsi lain maka ini disebut fungsi bersarang, di mana, fungsi di mana fungsi lain didefinisikan disebut fungsi luar dan fungsi yang didefinisikan di dalam fungsi lain disebut fungsi dalam. Contoh yang menggambarkan penggunaan fungsi bersarang ditunjukkan di bawah ini

#defining nested function
def outer(message):
    #text is having the scope of outer function
    text = message
    def inner():
        #using non-local variable text
        print(text)
    #calling inner function
    inner() 

# main method
if __name__=='__main__':
    outer('Hello!')

Halo

Dalam cuplikan kode di atas, fungsi dalam inner() dapat mengakses variabel lokal text dari fungsi luar outer() yang memiliki cakupan yang meluas hingga ke seluruh tubuh fungsi outer(). Variabel lokal text dari fungsi luar adalah variabel non-lokal untuk fungsi dalam yang dapat diakses tetapi tidak dapat dimodifikasi


Memahami konsep penutupan

Penutupan adalah objek fungsi (fungsi yang berperilaku seperti objek) yang mengingat nilai dalam lingkup terlampir bahkan jika tidak ada dalam memori

Ketika suatu fungsi tersedia di dalam fungsi lain maka penutupan dibuat. Fungsi dalam akan memiliki akses ke variabel dan parameter fungsi luar bahkan setelah fungsi luar dikembalikan. Ini berarti kita dapat memanggil fungsi dalam nanti dan itu akan memiliki akses ke variabel dan parameter fungsi luar. Sebenarnya, penutupan mengacu pada variabel dan parameter fungsi luar. Dapat dikatakan bahwa closure adalah record yang menyimpan fungsi bersama dengan lingkungan

#defining nested function
def outer(message):
    #text is having the scope of outer function
    text = message
    def inner():
        #using non-local variable text
        print(text)
    #return inner function
    return inner 

# main method
if __name__=='__main__':
    func = outer('Hello!')
    func()
_

Halo

Dalam contoh di atas, kami telah menggunakan penutupan untuk mengakses fungsi inner() di luar cakupannya, karena fungsi inner() hanya tersedia di dalam fungsi outer() tetapi dengan mengembalikannya, kami dapat mengaksesnya di luar fungsi outer()

Kemudian dalam metode utama, kita telah memanggil fungsi outer() dan mengembalikan referensi fungsi inner() ke variabel

#defining nested function
def outer(message):
    #text is having the scope of outer function
    text = message
    def inner():
        #using non-local variable text
        print(text)
    #return inner function
    return inner 

# main method
if __name__=='__main__':
    func = outer('Hello!')
    func()
3

Sekarang, variabel

#defining nested function
def outer(message):
    #text is having the scope of outer function
    text = message
    def inner():
        #using non-local variable text
        print(text)
    #return inner function
    return inner 

# main method
if __name__=='__main__':
    func = outer('Hello!')
    func()
_3 memiliki referensi ke fungsi inner() yang berarti ketika kita menggunakan tanda kurung dengan variabel
#defining nested function
def outer(message):
    #text is having the scope of outer function
    text = message
    def inner():
        #using non-local variable text
        print(text)
    #return inner function
    return inner 

# main method
if __name__=='__main__':
    func = outer('Hello!')
    func()
3 maka ia berfungsi sebagai fungsi inner() yang mengakses variabel text dari fungsi outer() yang dipanggil pada saat deklarasi variabel
#defining nested function
def outer(message):
    #text is having the scope of outer function
    text = message
    def inner():
        #using non-local variable text
        print(text)
    #return inner function
    return inner 

# main method
if __name__=='__main__':
    func = outer('Hello!')
    func()
3

Mari kita ambil satu contoh lagi

Contoh ini sedikit lebih rumit, karena di sini kita telah menggunakan argumen di dalam fungsi inner()1. Jadi, ketika fungsi inner()_2 dipanggil, ia mengembalikan referensi ke fungsi inner()1

Dan saat mendefinisikan variabel inner()_4, inner()5 dan inner()6, kami telah melewati nilai argumen inner()7 setiap kali

Oleh karena itu, variabel inner()4, inner()5 dan inner()6 mengacu pada fungsi inner()1 dengan nilai argumen inner()7 masing-masing ditetapkan sebagai 1, 5 dan 9

Dan kemudian saat memanggil fungsi inner()1 menggunakan variabel inner()4, inner()5 dan inner()6, kami juga telah memberikan nilai text7 dan karenanya mendapatkan hasil yang diinginkan


Poin Penting untuk Diingat tentang Penutupan

Berikut adalah beberapa poin berguna yang juga membentuk kondisi yang diperlukan untuk mengimplementasikan penutupan di python

Bisakah Anda menggunakan variabel di luar fungsi dalam fungsi Python?

Dalam Python dan sebagian besar bahasa pemrograman, variabel yang dideklarasikan di luar fungsi dikenal sebagai variabel global . Anda dapat mengakses variabel tersebut di dalam dan di luar fungsi, karena memiliki cakupan global.

Bisakah fungsi dalam Python mengakses variabel luar?

Fungsi Dalam Python atau Fungsi Bersarang dapat mengakses variabel fungsi luar serta variabel global. Variabel fungsi dalam memiliki cakupan lokal yang hanya terbatas pada fungsi tersebut. Variabel Fungsi Dalam tidak dapat diakses di lingkup fungsi luar.

Bagaimana Anda mengakses variabel luar dengan Python?

Variabel Outer memiliki cakupan yang lebih besar dan dapat diakses dari fungsi terlampir inner() .

Bisakah Anda menetapkan variabel dalam suatu fungsi?

Dengan Python, kita dapat menetapkan fungsi ke variabel . Dan dengan menggunakan variabel itu kita bisa memanggil fungsi tersebut sebanyak yang kita mau. Dengan demikian, meningkatkan penggunaan kembali kode. Cukup tetapkan fungsi ke variabel yang diinginkan tetapi tanpa () i. e. hanya dengan nama fungsinya.