Наиболее питонический способ лечения импортированных функций.
Я импортирую два разных модуля, которые перекрывают стандартные математические функции, например, log(). У меня есть несколько разных способов разрешения этого конфликта. Что будет самым питоническим?
Опция 1:
from pyomo.environ import *
import casadi
def coolFunction():
pyomo_x = Var()
pyomo_f = log(x)
def niceFunction():
casadi_x = casadi.SX.sym('x')
casadi_f = casadi.log(x)
Вариант 2:
from pyomo.environ import *
def coolFunction():
pyomo_x = Var()
pyomo_f = log(x)
def niceFunction():
from casadi import *
casadi_x = SX.sym('x')
casadi_f = casadi.log(x)
Вариант 3:
???
2 ответа
Не использовать from something import *
, Либо использовать import something
или же from something import foo, bar, ...
,
Если вы хотите импортировать функции вторым способом и две функции с одинаковыми именами из двух разных модулей, вы можете написать:
from module_a import log as a_log
from module_b import log as b_log
Как отметил PM 2Ring в комментариях, вы также можете использовать as
переименовать модули во что-то более короткое, чтобы сохранить иерархию:
import module_a as ma
import module_b as mb
...
ma.log(...)
Просто импортируйте модули и дайте им четкие и короткие имена, например:
import pyomo.environ as omo
import casadi
def coolFunction():
pyomo_x = omo.Var()
pyomo_f = omo.log(x)
def niceFunction():
casadi_x = casadi.SX.sym('x')
casadi_f = casadi.log(x)
Не использовать from xy import *
или импортирует внутри функций. Вы должны всегда видеть сразу, какие имена импортированы и какие зависимости у модуля.