from <module> import *
принимает все имена в модуле (те, которые не начинаются с _
или всем перечисленными в <module>.__all__
и присваивает эти имена как глобал в текущем модуле
Если два модуля. определяет то же имя, что означает, что последний один импортирована этот путь победу;. cleanup = rflib.cleanup
заменяется cleanup = Rpi.GPIO.cleanup
со вторым from Rpi.GPIO import *
заявления
Вы вообще хотите избежать USI ng from <module> import *
. Импортируйте конкретные имена или только сам модуль.
В этом случае, вы можете сделать:
from rflib import cleanup as rflib_cleanup
from Rpi.GPIO import cleanup as rpigpio_cleanup
, который будет связывать эти две функции, различных имен.
Или вы можете просто импортировать модули:
import rflib
from Rpi import GPIO
, который дает вам только rflib
и GPIO
имена, каждая ссылка на объект модуля, так что теперь вы можете ссылаться на каждый из cleanup
функций в качестве атрибутов на эти модули:
rflib.cleanup()
GPIO.cleanup()
Если вам нужно использовать много имен из любого модуля, последний стиль является предпочтительным, потому что это ограничивает количество импорта вам нужно сделать, сохраняет пространство имен в чистоте и un-cluttered, и дает вам больше контекста, если эти имена используются в вашем коде.
Простой, не используйте 'from module import *', импортируйте сам модуль и используйте атрибуты. –
И последний импорт выигрывает, поэтому 'Rpi.GPIO.cleanup() 'в этом случае. Вы не можете связаться с другим, потому что имя переопределено, поэтому старый 'cleanup = rflib.cleanup' исчез. –
Хорошо, но при условии, что вы выполнили 'import *' - какой метод запущен? Первый, который нужно импортировать? – davidhood2