假设我正在制作一个项目,我们称之为master.py,因为它是主文件。
for ( auto const & p : cM2 )
if ( s.end() != s.find(p.first) )
for ( auto const & sec : p.second )
if ( s.end() != s.find(sec) )
std::cout << "- good for <" << p.first << ", " << sec
<< '>' << std::endl;
a和b是我制作的其他子功能,并且在其他文本文件中(为了更容易调整)。现在让我们说a是:
#include <vector>
#include <utility>
#include <iostream>
#include <unordered_map>
#include <unordered_set>
int main()
{
using A = int;
std::unordered_multimap<A, A> const cM
{ {1, 1}, {1, 2}, {1, 3}, {1, 4},
{2, 1}, {2, 2}, {2, 3}, {2, 4},
{3, 1}, {3, 2}, {3, 3}, {3, 4},
{4, 1}, {4, 2}, {4, 3}, {4, 4} };
std::unordered_set<A> s { 4, 3 };
for ( auto ci = cM.cbegin() ; ci != cM.cend() ; )
{
auto val = ci->first;
auto cnt = cM.count(val);
if ( s.end() == s.find(val) )
{
for ( auto i = 0U ; i < cnt ; ++i )
++ci;
}
else for ( auto i = 0U ; i < cnt ; ++i, ++ci )
if ( s.end() != s.find(ci->second) )
std::cout << "- good for <" << val << ", " << ci->second
<< '>' << std::endl;
}
std::unordered_map<A, std::unordered_set<A>> const cM2
{ {1, {1, 2, 3, 4}}, {2, {1, 2, 3, 4}},
{3, {1, 2, 3, 4}}, {4, {1, 2, 3, 4}} };
for ( auto const & p : cM2 )
if ( s.end() != s.find(p.first) )
for ( auto const & sec : p.second )
if ( s.end() != s.find(sec) )
std::cout << "- good for <" << p.first << ", " << sec
<< '>' << std::endl;
}
和b:
#this is master.py
import a
import b
for i in range (whatever):
for j in range (whatever):
a.main(i)
b.main(j)
master.py多次调用函数a和b。每次进行时,它都会导入a中的sin,并在b中导入uniform。这可能效率不高,但我不知道如何解决它(除了将a和b放在与master.py相同的文本文件中,我不想出于调试原因这样做)。我试着在master.py中输入用于导入sin和uniform的语句,但是当它调用a和b时,它会失败,因为不会导入sin和uniform。我想它必须在子程序中导入它们?我可以以某种方式导入master.py中的sin和uniform并将它们传递给a和b所以我不必每次导入?
答案 0 :(得分:1)
您是否尝试过导入a.py
和b.py
?
# a.py
from numpy import sin
def main(i):
return sin(i)
和
# b.py
from random import uniform
def main(j):
return uniform(j)
您不需要在random.uniform
中导入numpy.sin
和master.py
,因为这些功能。它们被其他模块中的其他功能调用;所以其他模块需要导入。
同样,this Python Wiki page on performance表示文件顶部的imports
效果更佳。