大多数pythonic方式来处理导入的函数覆盖冲突

时间:2016-03-09 21:03:15

标签: python function-overriding

我正在导入两个覆盖标准数学函数的不同模块,例如:登录()。我有几种不同的方法可以解决这种冲突。哪个是最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:

???

2 个答案:

答案 0 :(得分:4)

请勿使用from something import *。使用import somethingfrom 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 *或在函数内部导入。您应该始终看到导入的名称以及模块具有的依赖项。