Yapay zeka Julia - değişkenlerin kapsamını gerçekten anlıyor musunuz?

Baidu Encyclopedia, Julia'yı bilimsel bilgi işlem için yüksek performanslı, dinamik, üst düzey bir programlama dili olarak tanımlar. Julia'nın bilimsel hesaplama ve yapay zeka alanlarında büyük avantajları olduğu ve bu iki alanın artık en ateşli alanlar olduğu anlamına geliyor. Yani Julia'yı öğrenme ümidi hala iyi.

Herhangi bir dildeki değişkenlerin kapsamını anlamak çok basit ve çok önemlidir. Julia'nın kapsamı, iyi bildiğiniz diğer dillerle aynı mı?

Julia1.0 değişkenlerin kapsamında nispeten büyük değişiklikler yaptı. Bu makale sadece Julia1.0'daki değişkenlerin kapsamına odaklanıyor.

Tartışmak istediğimiz sorun aşağıdaki kodla ilgilidir:

Yukarıdaki kod çalıştırılırsa, a ve b'nin değerlerine ne olacak? Anladığınızla aynı olup olmadığını görmek için önce kendiniz deneyebilirsiniz.

Cevap: Bu kod func_a () çalıştırılırken bir istisna atar: HATA: UndefVarError: b tanımlı değil, diğer bir deyişle kod sorunlu.

Önce func_b'yi analiz edelim, sonra func_a'yı analiz edelim, sonra özetleyelim ve son olarak iki küçük soru atalım. İlgilenen arkadaşlar bunu deneyebilir ve düşünebilir ve ardından yorum alanında cevabınızı söyleyebilir. Herkesi iletişim kurmaya teşvik ederim.

Not: Açıklama kolaylığı açısından, aşağıdaki kodun REPL'de yürütüldüğünü, yani global değişkenlerin Main modülüne ait olduğunu varsayıyoruz.

Bir. Func_b'yi analiz edin ()

Anlayışımız (elbette şimdi yanlış olduğunu kanıtladı):

B + = 100 için, anlayışımız b = Ana.b + 100'e eşdeğerdir.

Sağdaki Main.b, 1 olan global değişken b olmalıdır. Değişkenler, bir modülde global bir değişken olduğunu belirten bir modül ön ekine sahiptir ; Soldaki b fonksiyona atandığından yerel bir değişken olmalıdır. Son olarak, func_b () işlemi 101 döndürmelidir ve Main.b değişmeyecek, hala 1'dir.

Gerçek durum:

Julia'nın bunu nasıl ele aldığını net bir şekilde görmeliyiz, Julia'nın bize sağladığı araçları kullanmalıyız, burada kullandığımız @code_lowered Bir CodeInfo nesnesi oluşturan makro, Julia'nın bir ifadeyi nasıl işlediğini görmemize yardımcı olur.

% 1 geçici bir değişken olarak kabul edilebilir, bu durumda yukarıdaki CodeInfo ifadesinin anlamı b = b + 100 olur ve sonra% 1 döndürür. Burada b'nin herhangi bir öneki yoktur, bu da sol ve sağdaki b'nin yerel değişkenler olduğunu gösterir. O zaman belli ki b + 100 yanlış, Çünkü b burada tanımsızdır ve ilk önce kullanılır.

iki. Func_a () analiz edin

Bizim anlayışımız:

a. + = 100, a = Ana.a. + 100'e eşdeğerdir. ". +" bir yayın işlemidir, yani Main.a'daki her öğeye 100 eklemek demektir. Sonunda yerel bir değişken a'ya bir değer atayın ve dönün, Main.a değişikliği bulamayacaktır.

Gerçek durum:

Yukarıdaki Kod Bilgisi şu şekilde ifade edilebilir:

materyalize! (Ana.a, yayınlandı (Ana: +, Ana.a, 100))

yayınlanan (Ana.: +, Ana.a, 100) Ana.a. + 100'dür.

Ve materyalize! (), Yukarıdaki. + İşleminin sonucunun doğrudan Main.a'yı kapsadığı anlamına gelir. İşlev adının sonunda "!" Olduğuna dikkat edin. Julia'da bu tür bir işlevi çağırmak genellikle orijinal parametreleri değiştirir.

Nihai sonuç, func_a () fonksiyonunda, a. + = 100'ün Main.a = Main.a. + 100'e eşdeğer olmasıdır, yani global değişken a şu şekilde değiştirilecektir:

üç. sonuç olarak:

Julia'da:

Değişmez nesneler için davranış func_b () ile benzerdir.

Değişebilir nesneler için davranış, func_a () 'ya benzer.

"Julia İpler Değişebilir mi yoksa Değişmez mi? "Julai'deki dizenin değiştirilebileceğinden bahsetmiştim, ancak unutmayın ki Julia hala dizeleri değişmez nesneler olarak görüyor .

Son iki küçük soru:

Soru 1: func_a aşağıdaki gibi yeniden yazılırsa ne olur?

function func_a () a = a. + 100 son

Soru 2: func_b () 'nin global değişken b'yi değiştirmesini istersem, func_b () nasıl yazmalı?

Müzik yeteneği Lakeside Üniversitesi'ne girdi! Şirketin yıllık geliri 30 milyonu aşıyor ve Hu Yanbin nispeten sıcak "Bay Hu" olduğunu iddia ediyor
önceki
Yılın CP'si için listeye girmediler ve netizenler TVB "gölgeli" diye tükürdü!
Sonraki
Ekim ayında AI etki faktörü, Tencent AI Lab ilk sırada yer alıyor
Yeni Red Devils e-spor cep telefonunun resmi duyurusu 6 Kasım'da kitle fonlamasına başlayacak
2018 Güneydoğu DX3 / DX3 SRG satışa çıktı: 67.900'den
"Teresa Teng'in Dirilişi": sanal bir insanın üçlü bir düşüncesi
Julia'da ilkel türlerin nasıl yaratılacağını biliyor musunuz?
Dinamik Sıfırdan derinlemesine pekiştirmeli öğrenmeye hızlı bir şekilde başlayın, OpenAI öğrenme kaynaklarını döndürüyor
OnePlus 6T, yurtdışında 549 ABD dolarından başlayan fiyatlarla resmi olarak tanıtıldı
Ma Guoming'in bu yıl yarışa eşlik etmeye kararlı olduğu ve imparator birincilik ödülü olarak TVB'nin dört tökezleyen bloğunun şiddetle rekabet ettiği söyleniyor!
"Ode to Joy" u izledikten sonra kötü Çin dramasından şikayet ettim ama kimse "White Deer Plain" i izlemeye gitmedi.
Porsche 718 GTS resmi fotoğrafı: Hem dinamik hem de statik olan seksi bir sersemletici
Akıllı Sürüş Üyelik Programı 2018'in en güçlü refah dalgası! Çift 11, 4 büyük avantajımız var
Marka Yerelleştirilmiş yetenek eğitimi sistemini birleştirin ve BMW satış sonrası pazarında temel avantajlar yaratın
To Top