Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Ruang Nama dan Lingkup Python

Ruang Nama dan Cakupan Python

Dalam tutorial ini, Anda akan belajar tentang namespace, pemetaan dari nama ke objek, dan ruang lingkup variabel.

Apa itu Nama di Python?

Jika Anda pernah membaca 'The Zen of Python' (ketik import this di penerjemah Python), baris terakhir menyatakan, Ruang nama adalah salah satu ide bagus -- mari kita lakukan lebih banyak lagi! Jadi apa saja namespace misterius ini? Mari kita lihat dulu apa namanya.

Nama (juga disebut pengidentifikasi) hanyalah nama yang diberikan kepada objek. Segala sesuatu di Python adalah objek. Nama adalah cara untuk mengakses objek yang mendasarinya.

Misalnya saat kita mengerjakan tugas a = 2 , 2 adalah objek yang disimpan dalam memori dan a adalah nama yang kita kaitkan dengannya. Kita bisa mendapatkan alamat (dalam RAM) dari beberapa objek melalui fungsi bawaan id() . Mari kita lihat cara menggunakannya.

# Note: You may get different values for the id

a = 2
print('id(2) =', id(2))

print('id(a) =', id(a))

Keluaran

id(2) = 9302208
id(a) = 9302208

Di sini, keduanya merujuk ke objek yang sama 2 , jadi mereka memiliki id() . yang sama . Mari kita buat hal-hal sedikit lebih menarik.

# Note: You may get different values for the id

a = 2
print('id(a) =', id(a))

a = a+1
print('id(a) =', id(a))

print('id(3) =', id(3))

b = 2
print('id(b) =', id(b))
print('id(2) =', id(2))

Keluaran

id(a) = 9302208
id(a) = 9302240
id(3) = 9302240
id(b) = 9302208
id(2) = 9302208

Apa yang terjadi dalam urutan langkah di atas? Mari kita gunakan diagram untuk menjelaskan hal ini:

Awalnya, sebuah objek 2 dibuat dan nama a dikaitkan dengannya, ketika kita melakukan a = a+1 , objek baru 3 dibuat dan sekarang a dikaitkan dengan objek ini.

Perhatikan bahwa id(a) dan id(3) memiliki nilai yang sama.

Selanjutnya, ketika b = 2 dijalankan, nama baru b diasosiasikan dengan objek sebelumnya 2 .

Ini efisien karena Python tidak harus membuat objek duplikat baru. Sifat dinamis dari pengikatan nama ini membuat Python kuat; sebuah nama bisa merujuk ke semua jenis objek.

>>> a = 5
>>> a = 'Hello World!'
>>> a = [1,2,3]

Semua ini valid dan a akan merujuk ke tiga jenis objek yang berbeda dalam contoh yang berbeda. Fungsi juga merupakan objek, jadi nama juga dapat merujuknya.

def printHello():
    print("Hello")


a = printHello

a()

Keluaran

Hello

Nama yang sama a dapat merujuk ke suatu fungsi dan kita dapat memanggil fungsi tersebut menggunakan nama ini.


Apa itu Namespace dengan Python?

Sekarang setelah kita memahami apa itu nama, kita dapat beralih ke konsep ruang nama.

Sederhananya, namespace adalah kumpulan nama.

Dengan Python, Anda dapat membayangkan namespace sebagai pemetaan setiap nama yang telah Anda definisikan ke objek yang sesuai.

Ruang nama yang berbeda dapat hidup berdampingan pada waktu tertentu tetapi benar-benar terisolasi.

Namespace yang berisi semua nama bawaan dibuat saat kita memulai interpreter Python dan ada selama interpreter berjalan.

Inilah alasan mengapa fungsi bawaan seperti id() , print() dll. selalu tersedia bagi kami dari bagian mana pun dari program. Setiap modul membuat namespace globalnya sendiri.

Ruang nama yang berbeda ini diisolasi. Oleh karena itu, nama yang sama yang mungkin ada di modul yang berbeda tidak bertabrakan.

Modul dapat memiliki berbagai fungsi dan kelas. Namespace lokal dibuat ketika suatu fungsi dipanggil, yang memiliki semua nama yang didefinisikan di dalamnya. Mirip halnya dengan kelas. Diagram berikut dapat membantu memperjelas konsep ini.


Cakupan Variabel Python

Meskipun ada berbagai ruang nama unik yang ditentukan, kami mungkin tidak dapat mengakses semuanya dari setiap bagian program. Konsep ruang lingkup ikut bermain.

Lingkup adalah bagian program dari mana namespace dapat diakses secara langsung tanpa awalan apa pun.

Pada saat tertentu, setidaknya ada tiga cakupan bersarang.

  1. Cakupan fungsi saat ini yang memiliki nama lokal
  2. Cakupan modul yang memiliki nama global
  3. Cakupan terluar yang memiliki nama bawaan

Saat referensi dibuat di dalam suatu fungsi, nama tersebut dicari di namespace lokal, lalu di namespace global dan terakhir di namespace bawaan.

Jika ada fungsi di dalam fungsi lain, lingkup baru akan disarangkan di dalam lingkup lokal.


Contoh Scope dan Namespace dengan Python

def outer_function():
    b = 20
    def inner_func():
        c = 30

a = 10

Di sini, variabel a ada di namespace global. Variabel b ada di namespace lokal outer_function() dan c ada di namespace lokal bersarang inner_function() .

Saat kita berada di inner_function() , c lokal bagi kami, b adalah nonlokal dan a bersifat global. Kita dapat membaca serta menetapkan nilai baru ke c tapi hanya bisa membaca b dan a dari inner_function() .

Jika kami mencoba menetapkan sebagai nilai ke b , variabel baru b dibuat di namespace lokal yang berbeda dari b . nonlocal . Hal yang sama terjadi ketika kita menetapkan nilai ke a .

Namun, jika kita mendeklarasikan a sebagai global, semua referensi dan penugasan masuk ke a global global . Demikian pula, jika kita ingin rebind variabel b , itu harus dideklarasikan sebagai nonlocal. Contoh berikut akan lebih memperjelas hal ini.

def outer_function():
    a = 20

    def inner_function():
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)

Seperti yang Anda lihat, output dari program ini adalah

a = 30
a = 20
a = 10

Dalam program ini, tiga variabel berbeda a didefinisikan dalam ruang nama yang terpisah dan diakses sesuai dengan itu. Sedangkan pada program berikut,

def outer_function():
    global a
    a = 20

    def inner_function():
        global a
        a = 30
        print('a =', a)

    inner_function()
    print('a =', a)


a = 10
outer_function()
print('a =', a)

Keluaran dari program ini adalah.

a = 30
a = 30
a = 30 

Di sini, semua referensi dan penugasan ditujukan ke a . global karena penggunaan kata kunci global .


Python

  1. Kata Kunci dan Pengidentifikasi Python
  2. Pernyataan Python, Indentasi dan Komentar
  3. Variabel Python, Konstanta dan Literal
  4. Konversi Jenis Python dan Pengecoran Jenis
  5. Masukan, Keluaran, dan Impor Python
  6. Operator Python
  7. Variabel Python Global, Lokal dan Nonlokal
  8. Nomor Python, Konversi Jenis dan Matematika
  9. Direktori Python dan Manajemen File
  10. Kesalahan Python dan Pengecualian Bawaan