处理导入函数覆盖冲突的大多数 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 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 *
或导入。您应该始终立即看到导入了哪些名称以及模块具有哪些依赖项。
我正在导入两个不同的模块,它们都覆盖了标准数学函数,例如日志()。我有几种不同的方法来解决这个冲突。哪个最像 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 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 *
或导入。您应该始终立即看到导入了哪些名称以及模块具有哪些依赖项。