完整代码展示:
# 原始数据
STUDENTS_TEXT = [
'学号 姓名 语文 英语 数学',
'1 A 90 80 100',
'2 B 77 67 96',
'3 C 85 100 90',
'4 D 98 90 44',
'5 E 60 72 66'
]
def main():
# parse students from that array
students = parseDataSets(STUDENTS_TEXT)
print(students)
'''
Prints:
[{'学号': '1', '姓名': 'A', '语文': 90.0, '英语': 80.0, '数学': 100.0},
{'学号': '2', '姓名': 'B', '语文': 77.0, '英语': 67.0, '数学': 96.0},
{'学号': '3', '姓名': 'C', '语文': 85.0, '英语': 100.0, '数学': 90.0},
{'学号': '4', '姓名': 'D', '语文': 98.0, '英语': 90.0, '数学': 44.0},
{'学号': '5', '姓名': 'E', '语文': 60.0, '英语': 72.0, '数学': 66.0}]
'''
# 找到姓名为A的同学的所有信息
printStudentAdvance(students,'A')
'''
Prints:
学号:1
姓名:A
语文:90.0
英语:80.0
数学:100.0
'''
def parseDataSets(line):
dataSets = line[1:]
# 循环推导式:会比普通写法提升执行效率,但跟Java、C++比,执行效率是很低的。
# 即使你编译为二进制,所以我们一般在产品中不用Python开发。如果你去看各个编程语言的
# 开发效率,Python基本是垫底的。
students = [parseStudentRow(row) for row in dataSets]
return students
def parseStudentRow(row):
# via 'Tab' key separate numbers
field = row.strip().split('\t')
students = {
'学号': field[0],
'姓名': field[1],
# 强制类型转换:转换为float类型
'语文': float(field[2]),
'英语': float(field[3]),
'数学': float(field[4]),
}
return students
def printStudentAdvance(students,studentName):
for student in students:
if student.get('姓名') == studentName:
for key,value in student.items():
print('{key}:{value}'.format(key = key,value= value))
break
'''
main()函数作为我们的入口函数,如果main()通过模块导入,
那么它的名字是'__main__',依然要执行我们这个文件的main函数,
而不是导入的函数,这里做一个简单的保护
'''
if __name__ == '__main__':
main()
note
大家看到整个函数的调用我并没有传入类型,Python是弱类型的开发语言,在运行时去判断它具体的类型,而在Java、C++里,调用函数必须对上函数类型的。这是Python和C++的本质区别。