如何将 main.py 文件中定义的变量用于另一个文件?

Posted

技术标签:

【中文标题】如何将 main.py 文件中定义的变量用于另一个文件?【英文标题】:How to use variable defined inside main.py file into another file? 【发布时间】:2021-12-05 01:34:54 【问题描述】:

这是我作为程序员的第一个月,所以我正在创建一个电影预订网站的副本。我在main.py 文件中写了一些代码:

def main():
    current_income=0
    print('---->Enter the number of row in Cinemahall :- ')
    while True:
        try:
            row=int(input())
            break
        except:
            print('-->Something went wrong!! Please enter the valid row in cinemahall. The value must be integer type :')
    print("---->Enter the number of column in Cinemahall :- ")
    while True:
        try:
            col=int(input())
            break
        except:
            print('-->Something went wrong!! Please enter the valid column in cinemahall. The value must be integer type :')

    while True:
        import options_movies
        options_movies.options()
        break

if __name__=='__main__':
    main()

现在我有另一个文件options.py:

def options():

    while True:
        print('1. show the seats')
        print('2. buy a ticket')
        print('3. statistics')
        print('4. show booked ticked user info')
        print('0. exit')
        print('--> Please select one option from 1,2,3,4,0 ')
        ##try:
        n=int(input())
        if n==1:
            from main import main
            import show_seats
            show_seats.show_the_seats(main.row,main.col)
        elif n==2:
            import buy_ticket
            buy_ticket.buy_a_ticket()
        elif n==3:
            import statistics
            statistics.statistics()
        elif n==4:
            import user_info
            user_info.booked_ticket_user_info()
        elif n==0:
            print('Thank you for using BOOK MY SHOW,We hope you will enjoy the show...... Please visit again!!')
            break
                ##assert n>=0 and n<=4
       ## except:
           ## print('Something went wrong!!!! Please enter the valid option from 1,2,3,4,0')

现在,当我尝试从 main.py 文件中使用 show_seats.show_the_seats() 中的 row 和 col 值时,我收到此错误

  File "C:\Users\ROHIT KUMAR VERMA\OneDrive\Documents\Book My Show Project\main.py", line 23, in <module>
    main()
  File "C:\Users\ROHIT KUMAR VERMA\OneDrive\Documents\Book My Show Project\main.py", line 20, in main
    options_movies.options()
  File "C:\Users\ROHIT KUMAR VERMA\OneDrive\Documents\Book My Show Project\options_movies.py", line 16, in options
    show_seats.show_the_seats(main.row,main.col)
AttributeError: 'function' object has no attribute 'row'

【问题讨论】:

请修正你的缩进。 import 语句应位于脚本的开头。带有无条件 breakwhile 循环不是循环。您的函数需要参数来获取所需的值,并需要 return 来从函数中返回 vakues。总而言之:退后一步,了解导入和函数的工作原理。 @Matthias 我在任何 if 或 elif 条件满足时导入模块。只有当我输入 0 时,while 循环才会中断。此外,我已经尝试了你所说的所有方法,但问题仍然存在.. 【参考方案1】:

在函数内部创建的变量只能在该函数内部使用。 您需要创建全局变量:

my_variable = "awesome"

def myfunc():
  print("Python is " + my_variable)

myfunc()

现在,您可以将变量导入您需要的文件中:

from filename import variable

参考:

https://www.w3schools.com/python/python_variables_global.asp https://www.kite.com/python/answers/how-to-import-variables-from-another-file-in-python

【讨论】:

您的回答将导致使用global,而在大多数情况下使用global 是一个非常非常糟糕的主意。 据我了解,他不想修改变量 @FelipeCarvalho 感谢您的建议,但 row 和 col 正在从用户那里获取价值,我在 7 个模块中使用该值。当我在没有if __name__=='__main__:` 的情况下编写 main.py 文件时,我能够实现我想要的,但是当我导入主文件时这样做,它会被执行,而不仅仅是导入变量。如果我使用if __name__=='__main__:` 我会收到此错误。我希望我这次更清楚。

以上是关于如何将 main.py 文件中定义的变量用于另一个文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击 GUI 上的按钮将图像获取到同一目录文件夹中的另一个 .py 文件中

将变量从一个函数传递给另一个类的另一个函数 - Python

如何:main.py,带有 kivy 轮播代码的新类,kv 文件

使用用户提供的自定义名称脚本文件中的变量

c语言 如何调用另一函数变量

如何将shell脚本中定义的变量用于Scala文件? [重复]