Seçici içe aktarma yöntemi ile ilgili bir soru

#1

Merhabalar;

a.py

def a():
    b()

def b():
    print("b")

Etkileşimli kabuk:

from a import a
a()
b

a fonksiyonu b fonksiyonunu kullanıyordu, biz sadece a fonksiyonunu içe aktardık ama a fonksiyonu ortamda b fonsiyonu bulunmadığı halde onu kullanabildi. Bunun nasıl olabileceği ile ilgili düşüncelerim:

  1. (Düşük ihtimal) Python b fonksiyonunu içe aktardı ama bize etk. kab.'da vermiyor.
  2. (En kuvvetlisi) Python a modülünün a fonksiyonuna bellekte referans verdi sadece. biz a fonksiyonunu çağırdığımızda Python a fonksiyonunu a modülü ortamında çalıştırıyor ve bu yüzden a b’ye erişebiliyor.

Bu mevzu benim düşündüğüm gibi mi?

0 Likes

#2

A fonksiyonu içerisinde b fonksiyonunu kullanıyor zaten sen a fonksiyonunu çalıştırdığın zaman python b fonksiyonuna gidip bu fonksiyonun çıktısını hafızasında tutuyor yani sen sadece a yi aktardın ama a zaten b fonksiyonunu taşıyor id ile taşıdığının kanıdina bakabilirsin

0 Likes

#3

def a():
    print(id(b))
    b()

def b():
    print("b")

başka dosyadan çağırıyorum

from emrecw13 import a
a()
#OUTPUT;
139667818502344
b

evet hafızada bir yer tutuyor dediğiniz gibi :slight_smile:

0 Likes

#4

Soru biraz mantiksiz ama cevaplamak icin gereken kilit noktayi vereyim:

Hangi ortamda? a fonksiyonunun ortami ile etkilesimlik kabugun ortami farkli.

https://docs.python.org/3/reference/executionmodel.html#resolution-of-names

0 Likes