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.