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

Most pythonic way to treat imported function override conflict

我正在导入两个不同的模块,它们都覆盖了标准数学函数,例如日志()。我有几种不同的方法来解决这个冲突。哪个最像 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:

???

不要使用 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(...)

只需导入模块并给它们起清晰而简短的名称,例如:

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 * 或导入。您应该始终立即看到导入了哪些名称以及模块具有哪些依赖项。