Python:有没有一种方法可以不使用'从其他函数访问变量;全球';?

Python:有没有一种方法可以不使用'从其他函数访问变量;全球';?,python,scope,Python,Scope,下面是一个关于我想法的例子: def check_args(): if len(sys.argv) < 2: sys.exit('Reason') if not os.path.exists(sys.argv[1]): sys.exit('ERROR: Folder %s was not found!' % sys.argv[1]) global path path = sys.argv[1] def check_args(

下面是一个关于我想法的例子:

def check_args():
    if len(sys.argv) < 2:
        sys.exit('Reason')
    if not os.path.exists(sys.argv[1]):
        sys.exit('ERROR: Folder %s was not found!' % sys.argv[1])
    global path
    path = sys.argv[1]
def check_args():
如果len(系统argv)<2:
系统退出(“原因”)
如果操作系统路径不存在(sys.argv[1]):
sys.exit('错误:找不到文件夹%s!'%sys.argv[1])
全局路径
path=sys.argv[1]
正如您在check_args()成功完成后所知道的,“path”变量具有普遍意义-您可以在其他函数中作为事实变量使用它

所以我在想,是否有一种方法可以访问“路径”,例如check_args.path


在python v3中如何?

python函数是对象。您可以在其上定义所需的任何自定义特性:

def a():
    a.test = 123

a()
a.test # => 123

您可以简单地返回值

def check_args():
    if len(sys.argv) < 2:
        sys.exit('Reason')
    if not os.path.exists(sys.argv[1]):
        sys.exit('ERROR: Folder %s was not found!' % sys.argv[1])
    path = sys.argv[1]
    return path

my_path = check_args()

这可能只是一个示例,但如果这与实际代码接近,则可能需要查看命令行解析库(
argparse
是python中包含的最新的一个)。您不必将代码放入函数中。只需在模块顶部附近定义一个全局
path
变量即可。您可以将其存储为@lanzz的答案中的函数属性,但这几乎是一样的,因为您的函数是一个全局模块对象。check_args是否有充分的理由不简单地返回值,让调用方担心它保存在哪里?需要函数属性通常是您想要类的标志,可能使用
\uuuu调用
if __name__ == '__main__':
    my_path = check_args()
    results = do_something(path)