我创建计算函数,如下所示
def calc():
#Body of calculation
NOW = datetime.now() #shows undefined
...
DR = os.getcwd() #shows undefined
..
for j in ROW: #shows undefined
#Assume Adding two variables like (a+b)
#Body of calculation ENDS
我不知道如何在 main.py 中调用该函数。我需要在 main.py 中执行的操作是调用函数并清除Add_Func.py中的未定义对象
import os
from Add_Func import calc #Import the Add_Func.py file
from datetime import datetime
import DB_Connectivity as DB #Import the .py file
CONN = DB.connect()
CUR = CONN.cursor()
TB = input('Enter the table name:')
SQL = """select * from %s""" %(TB)
CUR.execute(SQL)
ROW = CUR.fetchall()
请建议一些代码来解决脚本。
你快到了。你想告诉你的主脚本通过将其添加到sys.path
来查看Add_Func.py
文件的位置,这基本上是Python查找模块的列表。
import sys
sys.path.append("path/of/your/add_func.py/file/goes/here")
from Add_Func import calc
假设您有以下文件
calc.py
#calc.py
def add(x, y):
return x + y
有两种方案可以将该文件导入模块
简单的文件夹结构
假设您有该文件夹结构
文件夹结构
src
|--main.py
|--calc.py
为了在calc中调用函数,您只需使用import导入到main中
即可main.py
#main.py
from calc import add
add(1, 1)
嵌套文件夹结构
在这种情况下,您必须告诉解释器在搜索自定义模块时查看该文件夹的内部。所以假设文件结构
文件夹结构
src
|--main.py
|--lib
|--calc.py
你的主干应该是这样的:
main.py
import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
from lib import calc
calc.add(2, 3)
最佳实践
更好的方法是像这样组织文件夹结构
文件夹结构
src
|--__init__.py
|--main.py
|--lib
|--calc.py
|--__init__.py
然后做你所有的路径追加在src/__init__.py
.使用lib/__init__.py
来控制要在模块外部公开哪些功能。
例:
SRC/__init__.py
import os,sys
sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
库/__init__.py
from .calc import add
库/计算.py
def add(x, y):
return x + y
def myCustomPrivateFunc(x):
pass
SRC/主.py
from lib import add
add(1, 2)
考虑到所有三个文件(main.py、Add_Func.py 和 DB_Connectivity.py)都在同一个目录中,它应该可以from Add_Func import calc
和import DB_Connectivity as DB
而无需任何更改。不过,您应该导入datetime
并os
要使用它们的位置:
main.py
from Add_Func import calc #Import the Add_Func.py file
import DB_Connectivity as DB #Import the .py file
CONN = DB.connect()
CUR = CONN.cursor()
TB = input('Enter the table name:')
SQL = """select * from %s""" %(TB)
CUR.execute(SQL)
ROW = CUR.fetchall()
Add_Func.py
from datetime import datetime
import os
def calc(ROW):
#Body of calculation
NOW = datetime.now() #shows undefined
DR = os.getcwd() #shows undefined
for j in ROW: #shows undefined
pass
#Assume Adding two variables like (a+b)
#Body of calculation ENDS