python里如何调用namedtuple里的数值_如何在函数中传递namedtuple的可选参数

这篇博客探讨了使用字典和namedtuple作为数据库实现学生信息查询的两种方法。通过设置布尔值参数控制是否打印卷号和电子邮件。在优化后的实现中,利用`getattr`函数动态访问对象属性,并通过`try-except`处理可能的AttributeError,确保用户输入的有效性。此外,还介绍了如何处理未找到用户的情况。
摘要由CSDN通过智能技术生成

使用布尔值设置是否打印卷和电子邮件的标志:def search_student(database=None, ID=None, roll=False, email=False):

if ID is None or ID == 0:

print 'Provide the arguments properly'

return False

for each in database:

if each.id == ID:

print 'Student Name: {}'.format(each.name)

if roll:

print 'Stutent Roll: {}'.format(each.roll_no)

if email:

print("Student email: {}".format(each.email))

break

else:

return "User does not exist in database"

studentDatabase = collections.namedtuple("student", "id name roll_no phone email")

DATABASE = [studentDatabase(1, 'Mayukh Sarkar', 9, '555-2312', 'mayukh2012@hotmail,com'),

studentDatabase(2, 'Alisha Sengupta', 7, '555-1345', 'alisha@gmail.com')]

输出:

^{pr2}$

我还可以使用id作为键将用户存储在dict中:def search_student(database=None, ID=None, roll=False, email=False):

if ID is None or ID == 0:

print 'Provide the arguments properly'

return False

get = database.get(ID)

if get is not None:

print 'Student Name: {}'.format(get.name)

if roll:

print 'Student Roll: {}'.format(get.roll_no)

if email:

print("Student email: {}".format(get.email))

else:

return "User does not exist in database"

然后将dict作为数据库传递:studentDatabase = collections.namedtuple("student", "id name roll_no phone email")

DATABASE = {1: studentDatabase(1, 'Mayukh Sarkar', 9, '555-2312', 'mayukh2012@hotmail,com'),

2: studentDatabase(2, 'Alisha Sengupta', 7, '555-1345', 'alisha@gmail.com')}

输出相同:In [18]: search_student(DATABASE, 1, email=True,roll=True)Student Name: Mayukh Sarkar

Student Roll: 9

Student email: mayukh2012@hotmail,com

In [19]: search_student(DATABASE, 1,roll=True)

Student Name: Mayukh Sarkar

Student Roll: 9

In [20]: search_student(DATABASE, 1, email=True)

Student Name: Mayukh Sarkar

Student email: mayukh2012@hotmail,com

In [21]: search_student(DATABASE, 1)

Student Name: Mayukh Sarkar

In [22]: search_student(DATABASE, 5)

Out[22]: 'User does not exist in database'

对于所有逻辑,最好使用dict,但是getattr将使用**kwargs:import collections

def search_student(database=None, ID=None, **kwargs):

if ID is None or ID == 0:

print 'Provide the arguments properly'

return False

get = database.get(ID)

if get is not None:

print 'Student Name: {}'.format(get.name)

for k in kwargs:

print("Student {}: {}".format(k, getattr(get,k)))

else:

return "User does not exist in database"

studentDatabase = collections.namedtuple("student", "id name roll_no phone email")

DATABASE = {1: studentDatabase(1, 'Mayukh Sarkar', 9, '555-2312', 'mayukh2012@hotmail,com'),

2: studentDatabase(2, 'Alisha Sengupta', 7, '555-1345', 'alisha@gmail.com')}

search_student(DATABASE,1,roll_no=True,email=True)

当用户输入一个无效的关键字/属性时,我们需要进行捕捉,有很多方法可以处理,但是一个简单的方法是捕捉属性错误:try:

print("Student {}: {}".format(k, getattr(get, k)))

except AttributeError:

print("Informative message or whatever is suitable")

或者使用hasattr并在返回False时执行任何操作:if get is not None:

print 'Student Name: {}'.format(get.name)

for k in kwargs:

if not hasattr(get,k):

continue

print("Student {}: {}".format(k, getattr(get, k)))

传递默认值:if get is not None:

print 'Student Name: {}'.format(get.name)

for k in kwargs:

val = getattr(get, k,False)

if val:

print("Student {}: {}".format(k, val))

else:....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值