我已经编写了以下函数,这些函数应按严格顺序调用以实现正确的程序流:
读取文件config.json
连接到SQL Server
查找目录中的所有SQL文件
执行所有SQL文件并将结果保存到CSV文件
发送CSV文件并在邮件中显示结果
将CSV文件写入Google表格文档
关闭SQL Server会话
def read_config():
....
return config
def connect_to_sql_server(config):
....
return connection
def find_sql_files_without_traverse(config):
...
return files_list
def exec_sql_and_save_to_csv(files_list, connection, config):
...
return csv_file
def send_email(csv_file, config):
...
return
def save_to_gspread(csv_file):
...
return
def close_sql_server_conn(connection):
....
return
我这样调用函数:
send_email(exec_sql_and_save_to_csv(find_sql_files_without_traverse(read_config()), connect_to_sql_server(read_config()), read_config()), read_config())
save_to_gspread(exec_sql_and_save_to_csv(find_sql_files_without_traverse(read_config()), connect_to_sql_server(read_config()), read_config()))
close_sql_server_conn(connect_to_sql_server(read_config()))
在我看来,这是调用函数的错误方法。
非常感谢您的答复。
答案 0 :(得分:3)
一种方法是简单地按所需顺序调用函数,并将结果分配给变量,以用作下一个函数的输入:
config = read_config():
connection = connect_to_sql_server(config)
files_list = find_sql_files_without_traverse(config)
csv_file= exec_sql_and_save_to_csv(files_list, connection, config)
send_email(csv_file, config)
save_to_gspread(csv_file)
close_sql_server_conn(connection)
注意::我建议检查Python中不同的编程范例,并选择最适合您未来开发需求的范例。 Intrresting article on that subject
答案 1 :(得分:1)
每次在代码中执行read_config()时,都会再次调用此函数。您的代码可能会起作用,但是它将运行多次。
这对
不利1。速度:您的代码会变慢,因为您在不需要的地方调用了很多函数。
2。可读性:您的代码行号较短,但较难理解。短代码并不总是很有效。
e.g例如,我们可以简短地为配置写c,但是它不容易理解。这样写要好得多。
Séraphin这是完全可以理解和写的,因为它是完全正确的,所以我不打算对其进行更改。
config = read_config()
connection = connect_to_sql_server(config)
files_list = find_sql_files_without_traverse(config)
csv_file= exec_sql_and_save_to_csv(files_list, connection, config)
send_email(csv_file, config)
save_to_gspread(csv_file)
close_sql_server_conn(connection)
答案 2 :(得分:0)
如果是我,我愿意:
from contextlib import closing
config = read_config()
with closing(connect_to_sql_server(config)) as conn:
sql_files = find_sql_files_without_traverse(config)
csv_file = exec_sql_and_save_to_csv(sql_files, conn, config)
send_email(csv_file, config)
save_to_gspread(csv_file)