目标:使用 IF/ELIF/ELSE 条件减少 (Python)retrieve_method 的冗长。
对象表的结构和方法:这个特定的retrieve_method根据构成数据库中用户表的元素调用用户对象(例如用户名
,名字
、姓氏
、电子邮件
等)
到目前为止,我的代码正在运行,但是它可以使用一些更干净、更整洁的代码。我不确定是否应该使用 keywords
还是 *args
。我仍在学习 Python,因此任何信息丰富的建议将不胜感激。 (您会注意到,我现在使用抽象词 something_unique
来将输入与表中找到的元素进行比较。如果两者匹配,该方法将返回匹配的项目。)
我该如何改进?最好的方法是什么?优点?缺点?
软件:Python 2.7.9、SQLAlchemy 1.0.9
<小时/>代码:
def retrieve_user(self, something_unique):
if isinstance(something_unique, int):
print 'retrieve_user_id: ', something_unique # added
return self.session.query(User).\
filter(User.id == something_unique).one()
elif isinstance(something_unique, basestring):
print 'retrieve_user: ', something_unique # added
return self.session.query(User).\
filter(func.lower(User.username) == func.lower(something_unique)).first()
elif isinstance(something_unique, basestring):
print 'retrieve_user email', something_unique
return self.session.query(User).\
filter(func.lower(User.email) == func.lower(something_unique)).first()
elif isinstance(something_unique, User):
return something_unique
else:
raise ValueError('Value being passed is an object')
最佳答案
一种方法是使用关键字参数:
def retrieve_user(self, id=None, name=None, email=None):
if id:
return self.session.query(User).\
filter(User.id == id).one()
if name:
return self.session.query(User).\
filter(func.lower(User.username) == func.lower(name)).first()
etc
关于python - 使用条件语句 (IF/ELIF/ELSE) 使代码更简洁、更短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018068/