如何严格地调用函数?

时间:2019-04-24 18:30:58

标签: python

我已经编写了以下函数,这些函数应按严格顺序调用以实现正确的程序流:

  1. 读取文件config.json

  2. 连接到SQL Server

  3. 查找目录中的所有SQL文件

  4. 执行所有SQL文件并将结果保存到CSV文件

  5. 发送CSV文件并在邮件中显示结果

  6. 将CSV文件写入Google表格文档

  7. 关闭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()))

在我看来,这是调用函数的错误方法。

非常感谢您的答复。

3 个答案:

答案 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)