简体   繁体   中英

In Python : How to use a function local Variable in different file function

I have a function that is stored in Dates.ipynb and Second function is stored in function.ipynb file.

So in Dates.ipynb file there is function which name is input_dates() dates.ipynb Code:

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 Code:

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()

Error: 在此处输入图片说明

So how can I use Dates.ipynb file function in function.ipynb file funcstions.

You can't between .ipynb files. But there are many ways you can use jupyter to save one (or both) of the files into .py (see here ).

You can then import the python file into your notebook and use the functions it contains.

EDIT

In your case you should use the return capability of functions.

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)

Initial response answer

Functions don't have attributes you can access like this. This behavior you can get with classes.

For example:

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

1

Side note, try not to use global variables. It is your last resort, but in general there are always better and more elegant solutions.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM