Çözüldü Python "import module" ve "from module import *" arasındaki fark nedir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Qzeybei

Hectopat
Katılım
19 Şubat 2021
Mesajlar
500
Makaleler
2
Çözümler
2
Yer
Eskişehir
Python'da kod yazarken

Python:
import module
ile
Python:
from module import *

arasındaki fark nedir?
 
Çözüm
"import module" ile yazarken fonksiyonun başında kütüphaneyi belirtirsiniz. Aşağıdaki örnekte gördüğünüz gibi "datetime.now" fonksiyonundan önce datetime olarak belirtiliyor.

Python:
import datetime
date = datetime.datetime.now()
print(date)

Fakat iş "from module import *" kısmına geldiğinde bu ifade modülü direkt dosyamıza boşaltır. Bu da kötü sonuçlar ortaya çıkarabilir. Çünkü sizin kendi yazdığınız fonksiyonlarınızdan biride modüldeki fonksiyonlardan biriyle aynı isme sahip olabilir.

İlk olarak kodu böyle yazdığımızda sorunsuz çalışacaktır.

Python:
from time import *
sleep(5)
print("\ntest")

Fakat aşağıdaki kodu çalıştırdığımızda diğer görseldeki hatayı alırız. Çünkü ikiside aynı isme sahipler ve bu nedenle çakışıyorlar. Modülü veya fonksiyonu sildiğimizde kodumuz sorunsuz çalışacaktır.

Python:
from time import *
def sleep():
  print("Hello World")
sleep(5)
print("test")



Modülü veya fonksiyonu sildiğimizde kodumuz sorunsuz çalışacaktır. O yüzden "from time import *" çok tercih edilmemelidir.
Yanlış bilgi
import module ile modülün tüm fonksiyonlarını çekersin. from module import * ile de, modül içindeki bir fonksiyonu çekersin.
 
Hayır hocam o anlamda değil, modülün bir parçasını çekmek istediğimizde modülün çekmek istediğimiz parçasının adını yazarız. Burada benim kastettiğim direk olarak bu kod satırı, yani "import *" yazdığımız zaman hepsini çekiyor diye biliyorum. Yani from module import function dediğimiz zaman istediğimiz fonksiyonu çekeriz, ama from module import * dediğimiz zaman tamamını çekiyoruz modülün.
 
Bildiğim kadarıyla:
Python:
import math
x = 9
print(math.sqrt(x))

Python:
from module import math
x = 9
print(sqrt(x))

Birinde modülün fonksiyonu kullanırken başında modülün adını yazman gerekiyor.
 
Hocam ben bunu kastetmiyorum, yukarıdaki arkadaş da yanlış anladı. Benim çektiğim bir fonksiyon yok. Ben, direk olarak kod içinde from module import * yazıyorum. Yani yıldız işareti yerine bir şey koymuyorum, direk yıldız işaretini kullanıyorum.

Bu şekilde kullanmayı kastediyorum.
 
"import module" ile yazarken fonksiyonun başında kütüphaneyi belirtirsiniz. Aşağıdaki örnekte gördüğünüz gibi "datetime.now" fonksiyonundan önce datetime olarak belirtiliyor.

Python:
import datetime
date = datetime.datetime.now()
print(date)

Fakat iş "from module import *" kısmına geldiğinde bu ifade modülü direkt dosyamıza boşaltır. Bu da kötü sonuçlar ortaya çıkarabilir. Çünkü sizin kendi yazdığınız fonksiyonlarınızdan biride modüldeki fonksiyonlardan biriyle aynı isme sahip olabilir.

İlk olarak kodu böyle yazdığımızda sorunsuz çalışacaktır.

Python:
from time import *
sleep(5)
print("\ntest")

Fakat aşağıdaki kodu çalıştırdığımızda diğer görseldeki hatayı alırız. Çünkü ikiside aynı isme sahipler ve bu nedenle çakışıyorlar. Modülü veya fonksiyonu sildiğimizde kodumuz sorunsuz çalışacaktır.

Python:
from time import *
def sleep():
  print("Hello World")
sleep(5)
print("test")



Modülü veya fonksiyonu sildiğimizde kodumuz sorunsuz çalışacaktır. O yüzden "from time import *" çok tercih edilmemelidir.
 
Çözüm
Tamamdır, tam olarak bunu soruyordum. Çok teşekkür ederim.
 
Hocam ben o yıldızı "herhangi bir modül" olarak yazdığınızı zannetmiştim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…