Bir fonksiyonda nasıl global değişken oluşturabilir veya kullanabilirim?
Bir işlevde global bir değişken oluşturursam, bu global değişkeni başka bir işlevde nasıl kullanabilirim? Global değişkeni, erişimine ihtiyaç duyan fonksiyonun yerel bir değişkeninde mi saklamam gerekiyor?
Bir global değişkeni, ona atama yapan her fonksiyonda global
olarak bildirerek diğer fonksiyonlarda kullanabilirsiniz:
globvar = 0
def set_globvar_to_one():
global globvar # Needed to modify global copy of globvar
globvar = 1
def print_globvar():
print(globvar) # No need for global declaration to read value of globvar
set_globvar_to_one()
print_globvar() # Prints 1
Sanırım bunun nedeni, global değişkenler çok tehlikeli olduğundan, Python'un global
anahtar kelimesini açıkça gerektirerek oynadığınız şeyin gerçekten bu olduğundan emin olmak istemesidir.
Global bir değişkeni modüller arasında paylaşmak istiyorsanız diğer yanıtlara bakın.
namespaces]1 kavramını keşfetmek isteyebilirsiniz. Python'da modül global veriler için doğal bir yerdir:
Her modülün, modülde tanımlanan tüm fonksiyonlar tarafından global sembol tablosu olarak kullanılan kendi özel sembol tablosu vardır. Böylece, bir modülün yazarı, kullanıcının global değişkenleri ile kazara çakışma endişesi olmadan modüldeki global değişkenleri kullanabilir. Öte yandan, ne yaptığınızı biliyorsanız, bir modülün global değişkenlerine, fonksiyonlarına atıfta bulunmak için kullanılan aynı gösterimle,
modname.itemname
ile dokunabilirsiniz.
Global-in-a-module'ün özel bir kullanımı burada açıklanmıştır - Global değişkenleri modüller arasında nasıl paylaşırım? ve bütünlük için içerik burada paylaşılmıştır:
Tek bir program içindeki modüller arasında bilgi paylaşmanın kanonik yolu özel bir yapılandırma modülü (genellikle config veya cfg olarak adlandırılır) oluşturmaktır. Uygulamanızın tüm modüllerinde yapılandırma modülünü içe aktarmanız yeterlidir; modül daha sonra global bir isim olarak kullanılabilir hale gelir. Her modülün yalnızca bir örneği olduğundan, modül nesnesinde yapılan değişiklikler her yere yansıtılır. Örneğin:
Dosya: config.py
x = 0 # 'x' yapılandırma ayarının varsayılan değeri
Dosya: mod.py
import config config.x = 1
Dosya: main.py
import config içe aktar mod print config.x
Bir fonksiyon içinde global bir değişkene atıfta bulunmak istiyorsanız, hangi değişkenlerin global olduğunu bildirmek için global anahtar sözcüğünü kullanabilirsiniz. Bunu her durumda kullanmak zorunda değilsiniz (burada birinin yanlış bir şekilde iddia ettiği gibi) - bir ifadede başvurulan ad yerel kapsamda veya bu işlevin tanımlandığı işlevlerdeki kapsamlarda bulunamazsa, küresel değişkenler arasında aranır.
Ancak, işlevde global olarak bildirilmemiş yeni bir değişkene atama yaparsanız, bu değişken dolaylı olarak yerel olarak bildirilir ve aynı ada sahip mevcut global değişkenleri gölgede bırakabilir.
Ayrıca, aksini iddia eden bazı OOP fanatiklerinin aksine, global değişkenler kullanışlıdır - özellikle OOP'nin aşırıya kaçtığı küçük betikler için.