Python _uuuname_uuu=='下导入的函数__主&';不承认

Python _uuuname_uuu=='下导入的函数__主&';不承认,python,python-import,Python,Python Import,我有一个名为SSFbasis.py的模块,其中包含一个名为SSFBasisFunc的函数,如下所示: if __name__ == '__main__': def SSFBasisFunc(): import os import re from pandas import ExcelWriter ......... etc. 然后我有一个MainScript.py import SSFBasis a = SSFBasis.SS

我有一个名为SSFbasis.py的模块,其中包含一个名为SSFBasisFunc的函数,如下所示:

if __name__ == '__main__':  
    def SSFBasisFunc(): 
        import os
        import re
        from pandas import ExcelWriter
  ......... etc.
然后我有一个MainScript.py

import SSFBasis

a = SSFBasis.SSFBasisFunc()
我得到了错误属性error:module'SSFBasis'没有属性'SSFBasisFunc'

现在,据我所知,函数中的name=main部分应该阻止在初始import语句上执行代码——事实上,这就是我想要实现的

但是考虑到我正在显式地调用这个函数,识别这个函数不是很好吗,还是我误解了 name=='main':


**我正在使用Spyder和Python3.7**

TL;DR:在
之外定义导出的值和函数,前提是

您当前在导入时未运行的脚本部分中定义了
SSFBasisFunc()
,因此无法在以
import SSFBasis
开头的另一个脚本中访问它

正确的用法是:

在SSFBasis.py中:

在另一个脚本中:

你也可以检查一下

现在,据我所知,name=函数中的主要部分

它不是“在你的功能中”,而是在你的功能之前

应防止在初始导入语句上执行代码

更确切地说,tt防止在导入模块时执行这部分代码(而不是作为脚本执行)

现在你真的不明白这意味着什么。这“阻止”执行的代码是
def
语句,它是创建函数的代码,而不是函数的代码本身(仅在调用函数时执行)

在这种情况下,
SSFBasis
函数仅在文件作为脚本执行时定义

--事实上,这就是我希望发生的事情

显然不是xD

但考虑到我正在显式调用函数, 识别功能不是很好吗


此时,此函数根本不存在

您理解
\uuuu name\uuuuu=='\uuuuuu main\uuuuu'
对。您对
SSFBasisFunc
的定义从未运行过,因此您可以在导入它时调用它,因为它不存在。若要解决此问题,请在
之外定义
SSFBasisFunc()
,前提是
。其背后的原因是
if uuuu name uuu==“uuu main uuuu”
部分仅在运行脚本本身时执行,我所说的脚本是
SSFbasis.py
因此,您只能在
SSFbasis.py
文件中使用
SSFBasisFunc()
。。。我希望这能回答您的问题,但您确实希望代码能够运行,否则函数没有定义……我认为name==main只是阻止代码在导入时运行,但是如果随后显式调用它,就可以了。显然情况并非如此。感谢您的帮助我的误解是“它阻止了在导入模块时执行这部分代码”。我认为它只是在import语句上,之后显式调用时很好,但正如您所说的,它并不存在。非常感谢
def SSFBasisFunc():
    # define your function.
    # this part is not computationally intensive, because the function is only defined, not ran!

# optional, but usually a Python pattern
if __name__=="main":
    # define tests using SSFBasisFunc
    # might be computationally intensive
import SSFBasis

# SSFBasis.SSFBasisFunc() is defined