Наиболее питонический способ лечения импортированных функций.

Я импортирую два разных модуля, которые перекрывают стандартные математические функции, например, 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 * или импортирует внутри функций. Вы должны всегда видеть сразу, какие имена импортированы и какие зависимости у модуля.

Другие вопросы по тегам