Jika saya membuat variabel global dalam satu fungsi, bagaimana saya bisa menggunakan variabel itu di fungsi lain?
Kami dapat membuat global dengan fungsi berikut:
def create_global_variable():
global global_variable # must declare it to be a global first
# modifications are thus reflected on the module's global scope
global_variable = 'Foo'
Menulis fungsi sebenarnya tidak menjalankan kodenya. Jadi kami memanggil create_global_variable
fungsi:
>>> create_global_variable()
Menggunakan global tanpa modifikasi
Anda bisa menggunakannya, selama Anda tidak berharap untuk mengubah objek yang ditunjuknya:
Sebagai contoh,
def use_global_variable():
return global_variable + '!!!'
dan sekarang kita bisa menggunakan variabel global:
>>> use_global_variable()
'Foo!!!'
Modifikasi variabel global dari dalam suatu fungsi
Untuk mengarahkan variabel global ke objek yang berbeda, Anda harus menggunakan kata kunci global lagi:
def change_global_variable():
global global_variable
global_variable = 'Bar'
Perhatikan bahwa setelah menulis fungsi ini, kode sebenarnya mengubahnya masih belum berjalan:
>>> use_global_variable()
'Foo!!!'
Jadi setelah memanggil fungsi:
>>> change_global_variable()
kita dapat melihat bahwa variabel global telah diubah. The global_variable
nama sekarang menunjuk ke 'Bar'
:
>>> use_global_variable()
'Bar!!!'
Perhatikan bahwa "global" dalam Python tidak benar-benar global - hanya global ke tingkat modul. Jadi ini hanya tersedia untuk fungsi-fungsi yang ditulis dalam modul di mana ia bersifat global. Fungsi mengingat modul di mana mereka ditulis, jadi ketika mereka diekspor ke modul lain, mereka masih mencari di modul di mana mereka dibuat untuk menemukan variabel global.
Variabel lokal dengan nama yang sama
Jika Anda membuat variabel lokal dengan nama yang sama, itu akan menaungi variabel global:
def use_local_with_same_name_as_global():
# bad name for a local variable, though.
global_variable = 'Baz'
return global_variable + '!!!'
>>> use_local_with_same_name_as_global()
'Baz!!!'
Tetapi menggunakan variabel lokal yang salah nama itu tidak mengubah variabel global:
>>> use_global_variable()
'Bar!!!'
Perhatikan bahwa Anda harus menghindari menggunakan variabel lokal dengan nama yang sama dengan global kecuali Anda tahu persis apa yang Anda lakukan dan memiliki alasan yang sangat baik untuk melakukannya. Saya belum menemukan alasan seperti itu.
Kami mendapatkan perilaku yang sama di kelas
Sebuah tindak pada komentar bertanya:
apa yang harus dilakukan jika saya ingin membuat variabel global di dalam fungsi di dalam kelas dan ingin menggunakan variabel itu di dalam fungsi lain di dalam kelas lain?
Di sini saya menunjukkan kita mendapatkan perilaku yang sama dalam metode seperti yang kita lakukan dalam fungsi reguler:
class Foo:
def foo(self):
global global_variable
global_variable = 'Foo'
class Bar:
def bar(self):
return global_variable + '!!!'
Foo().foo()
Dan sekarang:
>>> Bar().bar()
'Foo!!!'
Tapi saya sarankan daripada menggunakan variabel global Anda menggunakan atribut kelas, untuk menghindari kekacauan namespace modul. Perhatikan juga, kami tidak menggunakan self
argumen di sini - ini bisa berupa metode kelas (berguna jika mengubah atribut kelas dari cls
argumen biasa ) atau metode statis (tidak self
atau cls
).