【发布时间】:2019-11-04 10:32:39
【问题描述】:
我想以另一个函数作为参数调用一个函数,该函数尚未定义和可调用。有没有一种pythonic方法可以做到这一点?
我知道您可以将一个函数作为另一个函数的参数,就像这个答案所暗示的那样:
Python function as a function argument?
但这对于尚未定义和可调用的函数来说是不可能的。
我最近写了很多重复的代码,我很确定一定有一种更 Python 的方式来做到这一点。
重复代码:
import pymysql
def database_connection():
return pymysql.connect(db="MyDatabase", user='root', host="127.0.0.1", password="SecretPassword")
def mysql_request_true(sql_text):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = True
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
def mysql_request_database_id(sql_text):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = cursor.lastrowid
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
def mysql_request_fetchone(sql_text):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = cursor.fetchone()
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
def mysql_request_fetchall(sql_text):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = cursor.fetchall()
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
我想达到的目标:
import pymysql
def database_connection():
return pymysql.connect(db="MyDatabase", user='root', host="127.0.0.1", password="SecretPassword")
def mysql_request(sql_text, cmd):
connection = database_connection()
try:
with connection.cursor() as cursor:
cursor.execute(sql_text)
result = cmd
connection.commit()
return result
except ConnectionError:
return False
finally:
connection.close()
def mysql_request_true(sql_text):
return mysql_request(sql_text, True)
def mysql_request_database_id(sql_text):
return mysql_request(sql_text, cmd=cursor.lastrowid)
def mysql_request_fetchone(sql_text):
return mysql_request(sql_text, cmd=cursor.fetchone())
def mysql_request_fetchall(sql_text):
return mysql_request(sql_text, cmd=cursor.fetchall())
上面的代码示例不起作用,因为当我将光标作为参数给出时,它还没有定义。
有人知道怎么做吗?非常感谢您的回答。
【问题讨论】:
-
一种方法是使用一个字典,其中键是字符串,值是函数。然后将命令作为字符串传递,并在字典中找到要调用的相应函数。
标签: python python-3.x function