Sobes.tech
Junior

'from foo import bar' va 'from foo import *' o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

from foo import bar faqat foo modulidan aniq ob'ekt barni import qiladi. Bu ob'ekt bar nomi bilan mavjud bo'ladi.

from foo import * foo modulidan barcha ommaviy nomlarni import qiladi. Bu nomlar hozirgi nomlar maydonida foo. prefiksisiz mavjud bo'ladi. Ommaviy nomlar _ bilan boshlanmaydigan nomlar hisoblanadi, agar __all__ ro'yxati aniqlanmagan bo'lsa.

# 'from foo import bar' misoli
# Faraz qilaylik, `foo.py` modulida `bar` funksiyasi va `baz` o'zgaruvchisi bor
# foo.py:
# def bar():
#     print("bar")
# baz = "baz"

from foo import bar

bar() # To'g'ridan-to'g'ri `bar` funksiyasini chaqirish
# print(baz) # Bu xato beradi, chunki `baz` import qilinmagan

# 'from foo import *' misoli
# Shu bilan birga `foo.py` modulidan foydalanamiz

from foo import *

bar() # To'g'ridan-to'g'ri `bar` funksiyasini chaqirish
print(baz) # `baz` o'zgaruvchisi endi mavjud

Farqlar:

  • from foo import bar: Aniq nazorat, kamroq nomlar to'qnashuvi ehtimoli.
  • from foo import *: Hammasini import qiladi, interaktiv sessiyalar yoki kichik skriptlar uchun qulay, lekin katta loyihalarda nomlarning yozib qolishi va ob'ektlarning manbasini aniqlash qiyinligi sababli xavfli.

from foo import * ni ishlab chiqarish kodida ishlatish yomon amaliyot hisoblanadi, faqat modul aniq bunday import uchun mo'ljallangan bo'lsa (masalan, UI freymvorklar), foydalaniladi.