使用布尔值来设置是否打印和发送邮件的标志:
```html
使用布尔值来设置是否打印和发送邮件的标志:
```
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')]
输出:
In [9]: search_student(DATABASE, 1, email=True,roll=True)
Student Name: Mayukh Sarkar
Stutent Roll: 9
Student email: mayukh2012@hotmail,com
In [10]: search_student(DATABASE, 1,roll=True)
Student Name: Mayukh Sarkar
Stutent Roll: 9
In [11]: search_student(DATABASE, 1, email=True)
Student Name: Mayukh Sarkar
Student email: mayukh2012@hotmail,com
In [12]: search_student(DATABASE, 1)
Student Name: Mayukh Sarkar
In [13]: search_student(DATABASE, 5)
Out[13]: 'User does not exist in database'
我会将用户信息以字典形式存储,以id作为键:
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"
然后将字典作为数据库传递:
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'
你最好使用字典来处理所有逻辑,但是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)))
或者向getattr传递默认值:
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:....