Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 7, 2016 11:30:26

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

Имеется файл FUNCTIONS.py в котором определены несколько функций.
Правильно ли понимать, что

import FUNCTIONS
и
from FUNCTIONS import *
дают одинаковый результат, и импортируют всё содержание модуля FUNCTIONS,
а
from FUNCTIONS import fun2 
импортирует только fun2() и ничего более?

Отредактировано andrei186 (Фев. 7, 2016 18:07:04)

Офлайн

#2 Фев. 7, 2016 11:38:07

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

andrei186
дают одинаковый результат
Нет

andrei186
импортирует только fun2() и ничего более?
Да

Читай https://docs.python.org/2/tutorial/modules.html#modules

Отредактировано ayb (Фев. 7, 2016 11:39:31)

Офлайн

#3 Фев. 7, 2016 17:59:31

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

ayb
andrei186
импортирует только fun2() и ничего более?
Да
вот и я так думал. Однако если в модуле кроме определения функции def fun2() имеется ее вызов fun2(), то эта функция выполяется, несмотря на
from FUNCTIONS import fun2
Если закомментировать вызов функции в модуле, то в основном коде она не выполняется.
Других ссылок на этот модуль нет.
У меня Питон 2.7 на Вин ХР
Как это объяснить?

Офлайн

#4 Фев. 7, 2016 18:28:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

andrei186
Как это объяснить?

Тело модуля при импорте выполняется. Это естественно, потому что питон - динамический язык, функция может вообще отсутствовать в коде в классическом виде. Она может генерироваться в рантайме (например, с помощью eval), разумеется, генерирующий код должен быть выполнен.



Отредактировано FishHook (Фев. 7, 2016 18:28:43)

Офлайн

#5 Фев. 7, 2016 18:54:25

kampella
Зарегистрирован: 2014-11-21
Сообщения: 95
Репутация: +  1  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

andrei186
Если закомментировать вызов функции в модуле, то в основном коде она не выполняется.
Нужно не комметировать, а использовать конструкцию if __name__ == ‘__main__’:

Офлайн

#6 Фев. 7, 2016 19:09:40

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

Т.е. если я импортирую fun2 посредством

FishHook
from FUNCTIONS import fun2
то импортируется определение функции fun2 и все остальное, что не является определениями функций?

Офлайн

#7 Фев. 7, 2016 19:16:21

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

Импортируется то, что ты указал, но в модуле, из которого ты импортируешь выполниться весь код.

Офлайн

#8 Фев. 7, 2016 20:08:16

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

ayb
Импортируется то, что ты указал, но в модуле, из которого ты импортируешь выполниться весь код.
В модуле, из которого я импортирую, кроме определения функции, есть импорт других модулей, необходимых для этой функции, например import Tkinter
Но Tkinter у меня импортируется в основном модуле - значит он импортируется дважды?
Приведет ли это к каким-то коллизиям и излишнему потреблению памяти?

Офлайн

#9 Фев. 7, 2016 20:42:15

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

Модуль импортируется единожды.

Офлайн

#10 Фев. 7, 2016 23:03:44

andrei186
Зарегистрирован: 2016-02-04
Сообщения: 90
Репутация: +  -1  -
Профиль   Отправить e-mail  

import FUNCTIONS , from FUNCTIONS import * и from FUNCTIONS import fun2

Понято. Всем спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version