函数(三)
递归
递归的经典应用
二分法
my_list = list(range(10000))
def serach_num(the_list, the_num):
if not the_list:
print('不在这个区间内')
return False
flag_length = len(the_list) // 2
if the_num > the_list[flag_length]:
serach_num(the_list[flag_length + 1:], the_num)
elif the_num < the_list[flag_length]:
serach_num(the_list[:flag_length], the_num)
else:
print('找到了')
return True
serach_num(my_list, 100)
print(100 in my_list)
匿名函数
lambda表达式
# 要求:
# 从文件中取出每一条记录放入列表中,
# 列表的每个元素都是{'name':'nick','sex':'male','age':18,'salary':3000}的形式
with open('a.txt', 'r', encoding='utf8') as fr:
my_list = list()
for line in fr.readlines():
temp_list = line.split()
temp_dict = dict()
temp_dict['name'] = temp_list[0]
temp_dict['sex'] = temp_list[1]
temp_dict['age'] = int(temp_list[2])
temp_dict['salary'] = int(temp_list[3])
my_list.append(temp_dict)
del temp_dict
del temp_list
print(my_list)
# 根据1得到的字典,取出薪资最高的人的信息
max_salary = 0
max_salary_info = dict()
for i in my_list:
if i['salary'] > max_salary:
max_salary = i['salary']
max_salary_info = i
print(max_salary_info)
print(max(my_list, key=lambda dic: dic['salary']))
# def search_max(x):
# # x = 'salary'
# return my_list[0][x]
#
#
# max_salary = max(my_list, key=search_max('salary'))
# print(max_salary)
# 根据1得到的字典,取出最年轻的人的信息
print(min(my_list, key=lambda x: x['age']))
# 根据1得到的字典,将每个人的信息中的名字映射成首字母大写的形式
my_new_list = map(lambda x: {'name': x['name'].capitalize(),
'sex': x['sex'],
'age': x['age'],
'salary': x['salary']}, my_list)
print(list(my_new_list))
内置函数
Python已经帮你写好的函数,拿来就可以用
面向过程编程
优点:复杂的问题简单化
缺点:扩展性差
如同工厂里的流水线一般