我正在导入两个覆盖标准数学函数的不同模块,例如:登录()。我有几种不同的方法可以解决这种冲突。哪个是最pythonic?
选项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:
???
答案 0 :(得分:4)
请勿使用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(...)
答案 1 :(得分:3)
只需导入模块并为其指定明确和简短的名称,例如:
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 *
或在函数内部导入。您应该始终看到导入的名称以及模块具有的依赖项。