Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 9, 2014 21:38:55

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Использование if в модуле

totiks
а правильно его просто перезагрузить,используя reload

Во втором - reload(), в третьем - imp.reload()

Budulianin
Интепретатор куда-то посмотрит(а вот куда интерересно?) и увидет импортированный ранее модуль.

import module
import sys
del sys.modules['module']
import module



Отредактировано py.user.next (Сен. 9, 2014 21:42:48)

Офлайн

#2 Сен. 9, 2014 23:40:31

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле

Budulianin благодаря вашим усилиям догнал,
код

import m1
import m2
print m1.a
print m2.b
raw_input()
a=0
b=0
raw_input()
print a
print b
raw_input()
reload(m1)
reload(m2)
print m1.a
print m2.b
raw_input()
, и не устану вас благодарить!Спасибо. ))

Офлайн

#3 Сен. 9, 2014 23:45:50

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование if в модуле

totiks

Зачем перегружать модули, если они не изменились?

a=0
b=0

Никак не влияют на m1.a, m1.b

В модуле своё пространство имён, ты получаешь доступ к нему, через точечную нотацию.
m1.a - получаем переменную из пространства имён модуля m
просто a - переменная в текущем пространстве.

from m1 import a - импортируем переменную из модуля, в текущее пространство имён.
Поэтому, если a уже была определена, она перезапишет a из модуля m1.

Прочитай про функции locals и globals. И посмотри на их вывод, в зависимости от твоих импортов.



Отредактировано Budulianin (Сен. 9, 2014 23:55:34)

Офлайн

#4 Сен. 10, 2014 07:27:15

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле

Budulianin
пишу игру в кости,для самообучения,вероятно чтоб комбинация выпавших костей изменялась нужно перезагружать модули отвечающие за генерацию и выдачу выиграных очков исходя из комбинации,хотя возможно в ваших словах есть что-то,сегодня попробую как повлияет точечное обращение к переменой в модуле повторно,будет ли переменая менятся или нет…все очень интересно,и не высыпаюсь ))).

Отредактировано totiks (Сен. 10, 2014 07:28:33)

Офлайн

#5 Сен. 10, 2014 08:03:54

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

Использование if в модуле

totiks
вероятно чтоб комбинация выпавших костей изменялась нужно перезагружать модули
А вы хорошо понимаете, что такое модули и зачем они вообще нужны?



Офлайн

#6 Сен. 10, 2014 09:04:30

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование if в модуле

totiks
хотя возможно в ваших словах есть что-то
:)



Офлайн

#7 Сен. 10, 2014 09:07:18

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле


FishHook смутно…но пытаюсь понять,из теории мной понялось что они используются в качестве подпрограмм,они нужны там где участки кода часто повторяются…

Офлайн

#8 Сен. 10, 2014 09:25:53

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

Использование if в модуле

totiks
они нужны там где участки кода часто повторяются…
Они нужны для того, чтобы изолировать логику связанную со специфической задачей.
Если вы хотите работать со временем, вы импортируете модуль datetime, содержащий множество различных компонентов, и используете эти компоненты не задумываясь о том, как именно происходит то или иное вычисление. Вы отдаете в модуль данные и получаете результат. Вы не изменяете состояние модуля, не лезете в его код, вы его используете как автомат по продаже пирожков. Если вам нужно вдруг изменить поведение, например работать в другом часовом поясе, бог вас упаси менять какие-то константы внутри модуля datetime или перезагружать его. Не нужно перезагружать автомат с пирожками для получения другого пирожка.



Офлайн

#9 Сен. 10, 2014 15:11:15

totiks
Зарегистрирован: 2014-09-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование if в модуле


FishHook
Гм-м мои извинения,я немного смущен результатами, вот что у меня получилось
я создаю модуль в нем рандомно присваиваю значение для x , от 0 до 7
называю этот модуль именем mod , и пишу в программе такой код:

import mod
rez1=mod.x
rez2=mod.x
rez3=mod.x
print rez1
print rez2
print rez3
и выводит одно и тоже значение для rez1,rez2,rez3
тогда как меняя код на :
import mod
rez1=mod.x
reload(mod)
rez2=mod.x
reload(mod)
rez3=mod.x
print rez1
print rez2
print rez3
,на выходе я получаю совершено разные значения для rez1,rez2, и rez3 ,то есть нет ничего предосудительного если я напишу сам модуль и переодически дам ему команду на перезагрузку,…я просто настолько зелен в этом деле что не знаю как правильно и потому нащупываю свои пути…

Офлайн

#10 Сен. 10, 2014 15:16:17

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Использование if в модуле

totiks

Для этого необязательно создавать модуль.
Импортируй модуль random в своём главной модуле и каждой переменной присваивай результат функции random.randint(0, 7).

За тебя уже написали модуль, в котором хранятся инструменты связанные с random.
Тебе нужно просто их использовать.



Отредактировано Budulianin (Сен. 10, 2014 15:19:33)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version