函数(三)

递归

递归的经典应用

二分法

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已经帮你写好的函数,拿来就可以用

面向过程编程

优点:复杂的问题简单化

缺点:扩展性差

如同工厂里的流水线一般

posted on 2019-06-04 20:57  heroknot  阅读(85)  评论(0编辑  收藏  举报