【问题标题】:In Python : How to use a function local Variable in different file function在 Python 中:如何在不同的文件函数中使用函数局部变量
【发布时间】:2021-12-23 16:45:15
【问题描述】:

我有一个存储在 Dates.ipynb 中的函数,第二个函数存储在 function.ipynb 文件中。

所以在 Dates.ipynb 文件中有一个函数名为 input_dates() dates.ipynb 代码:

import datetime as dt
from datetime import datetime

def input_dates():
    global start_date
    global exit_date
    from_date = input("enter date to start from in YYYYMMDD format :")
    end_date = input("enter date to end in YYYYMMDD format :")
    start_date = datetime.strptime(from_date, '%Y%m%d').date()
    exit_date = datetime.strptime(end_date, '%Y%m%d').date()
    
input_dates()

def year():
    global from_year
    global end_year
    from_year = start_date.year
    end_year = exit_date.year
    
year()

def month():
    global from_month
    global end_month
    from_month = start_date.month
    end_month = exit_date.month
    
month()

Function.ipynb 代码:

input_dates()

def path():
    while start_date <= exit_date:
        if from_date.month<10:
            path1 = (Fu_path + "\\" + str(from_year)+"\\" +str(from_month))
        else:
            path1 = (Fu_path + "\\" + str(from_year)+"\\"+str(from_month))
        from_date1 += relativedelta(months =+ 1)
        dir_list = os.listdir(path1)
        print(dir_list)

path()

错误:

那么如何在function.ipynb文件函数中使用Dates.ipynb文件函数。

【问题讨论】:

  • 尽管有名字,但每个模块都有一个单独的全局命名空间。如果您导入模块本身(使用import foo,而不是from module import specific_values),您将能够通过module.global_name 访问其他模块的全局命名空间。
  • @Blckknght 你能用编码的形式解释一下吗?

标签: python function


【解决方案1】:

编辑

在您的情况下,您应该使用函数的返回功能。

from datetime import datetime
from dateutil.relativedelta import relativedelta

FU_PATH = "foo" # You should change this to the correct path


def input_dates():
    from_date = input("Enter date to start from in YYYYMMDD format :")
    end_date = input("Enter date to end in YYYYMMDD format :")
    start_date = datetime.strptime(from_date, '%Y%m%d').date()
    exit_date = datetime.strptime(end_date, '%Y%m%d').date()
    return start_date, exit_date

start_date, exit_date = input_dates()


def path(start_date, exit_date):
    while start_date <= exit_date:
        # If-else statement is redundant, since it does the same thing
        if start_date.month < 10:
            path1 = (FU_PATH + "\\" + str(start_date.year) + "\\" + str(start_date.month))
        else:
            path1 = (FU_PATH + "\\" + str(start_date.year) + "\\" + str(start_date.month))
        start_date += relativedelta(months =+ 1)
        dir_list = os.listdir(path1)
        print(dir_list)

path(start_date, exit_date)

初始响应答案

函数没有您可以像这样访问的属性。您可以通过类获得这种行为。

例如:

class MyClass:
    my_variable = 1
    def __init__(self):
        pass
YourClass = MyClass() 
print(YourClass.my_variable)

1

旁注,尽量不要使用全局变量。这是您不得已而为之的办法,但总的来说,总会有更好、更优雅的解决方案。

【讨论】:

  • 全局的地方可以用什么?其实我是编程新手。
  • 而且这个类方法也不行。
【解决方案2】:

你不能在.ipynb 文件之间。但是有很多方法可以使用 jupyter 将一个(或两个)文件保存到 .py(参见 here)。

然后您可以将 python 文件导入您的笔记本并使用它包含的功能。

【讨论】:

  • 我想你没有理解我的问题。我可以访问该函数,但在我的代码中,我做错了,这就是我无法访问局部变量的原因。我是编程初学者,所以也许我在函数方面做错了。
  • 我在 VS Code (.py) 文件中运行相同的代码,但这在 VS 代码中也不起作用。
猜你喜欢
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
相关资源
最近更新 更多