在 Python 中导出模块组件
Export module components in Python
在 Julia 中,可以导出模块的函数(或变量、结构等),之后可以在没有命名空间的情况下在另一个脚本中调用它(一旦导入)。例如:
# helpers.jl
module helpers
function ordinary_function()
# bla bla bla
end
function exported_function()
# bla bla bla
end
export exported_function()
end
# main.jl
include("helpers.jl")
using .helpers
#we have to call the non-exported function with namespace
helpers.ordinary_function()
#but we can call the exported function without namespace
exported_function()
此功能在 Python 中可用吗?
在 Python 中导入比这更容易:
# module.py
def foo(): pass
# file.py
from module import foo
foo()
# file2.py
from file import foo
foo()
这也适用于 class
es。
在Python中你也可以这样做:
import module
# You have to call like this:
module.foo()
导入模块时,模块导入的所有函数都被视为模块的一部分。使用以下示例:
# file.py
import module
# file2.py
import file
file.module.foo()
# or...
from file import module
module.foo()
# ...or...
from file.module import foo
foo()
请注意,在 Python 中不需要 export
。
查看 documentation
:Python 中不存在 export
关键字。
在 Julia 中,两个模块可以 export
相同的功能,Julia 会自动检测到这样的问题,即即使你 export
它们也不会相互覆盖:
julia> module A
export x
x() = "a"
end
Main.A
julia> module B
export x
x() = "b"
end
Main.B
julia> using .A, .B
julia> x()
WARNING: both B and A export "x"; uses of it in module Main must be qualified
这就是为什么在 Julia 中通常的做法是 using
而不是 import
。
在 Python 中,在生产代码中执行等效操作被认为是一种不好的做法。
作为旁注:Julia 和 Python 之间的另一个相关区别是,在 Julia 中,module
概念与 files/directory 结构分离。您可以在一个文件中包含多个模块,也可以将多个文件组成一个模块。
在 Julia 中,可以导出模块的函数(或变量、结构等),之后可以在没有命名空间的情况下在另一个脚本中调用它(一旦导入)。例如:
# helpers.jl
module helpers
function ordinary_function()
# bla bla bla
end
function exported_function()
# bla bla bla
end
export exported_function()
end
# main.jl
include("helpers.jl")
using .helpers
#we have to call the non-exported function with namespace
helpers.ordinary_function()
#but we can call the exported function without namespace
exported_function()
此功能在 Python 中可用吗?
在 Python 中导入比这更容易:
# module.py
def foo(): pass
# file.py
from module import foo
foo()
# file2.py
from file import foo
foo()
这也适用于 class
es。
在Python中你也可以这样做:
import module
# You have to call like this:
module.foo()
导入模块时,模块导入的所有函数都被视为模块的一部分。使用以下示例:
# file.py
import module
# file2.py
import file
file.module.foo()
# or...
from file import module
module.foo()
# ...or...
from file.module import foo
foo()
请注意,在 Python 中不需要 export
。
查看 documentation
:Python 中不存在 export
关键字。
在 Julia 中,两个模块可以 export
相同的功能,Julia 会自动检测到这样的问题,即即使你 export
它们也不会相互覆盖:
julia> module A
export x
x() = "a"
end
Main.A
julia> module B
export x
x() = "b"
end
Main.B
julia> using .A, .B
julia> x()
WARNING: both B and A export "x"; uses of it in module Main must be qualified
这就是为什么在 Julia 中通常的做法是 using
而不是 import
。
在 Python 中,在生产代码中执行等效操作被认为是一种不好的做法。
作为旁注:Julia 和 Python 之间的另一个相关区别是,在 Julia 中,module
概念与 files/directory 结构分离。您可以在一个文件中包含多个模块,也可以将多个文件组成一个模块。