首页 > 编程语言 >算法表达式匿名函数

算法表达式匿名函数

时间:2022-10-13 19:45:19浏览次数:48  
标签:name list 算法 匿名 num user print 表达式

目录

算法简介与二分法

1.什么是算法
	算法就是解决问题的有效方法 不是所有的算法都很高效也有不合格的算法
2.算法应用场景
	推荐算法(抖音视频推送 淘宝商品推送)
    成像算法(AI相关,图片P图)等等
3.算法工程师要求
	待遇非常好 但要求也非常高
4.算法部门
	不是所有的互联网公司都养的起算法部门 只有大公司才有实力和愿意养算法人才
    算法部门类似药品研发部分
5.二分法
	是算法中最简单的算法 甚至都算不上是算法

二分法

'''
二分法使用要求
	 要求,原列表有一定规律例如下面
二分法的缺陷
	针对开头结尾的数据 查找效率很低
'''

# 要求,原列表有一定规律例如下面
l1 = [1, 2, 3, 6, 9, 16, 30, 200, 500, 1000]


# 求给定的数纯在不存在这个列表

def get_min_num(num, li_list):
    if not len(li_list):
        print('没在列表里找到')
        return
    if num == li_list[0]:  # 不知道算不算优化二分查找 查找第一个是不是
        print(f'恭喜你找到了,{num}')
        return
    if num == li_list[-1]:   # 不知道算不算优化二分查找 查找最后一个是不是
        print(f'恭喜你找到了,{num}')
        return

    mi_num = len(li_list) // 2
    if li_list[mi_num] > num:
        get_min_num(num, li_list[:mi_num])
    elif li_list[mi_num] < num:
        get_min_num(num, li_list[mi_num + 1:])
    else:
        print(f'恭喜你找到了,{num}')


get_min_num(int(input()), li_list=l1)

常见算法的原理以及伪代码

二分法、冒泡、快拍、插入、堆排、桶排、数据结构(链表 约瑟夫问题 如何判断链表是成环)


三元表达式

一些简单的代码可以写到一行内
简化步骤1:代码简单并且只有一行 那么可以直接卸载冒号后面
name = 'aa'
if name == 'aa':print('gg')
else:print('mm')
# gg
三元表达式
res = 'gg' if name == 'aa' else 'mm'
print(res)  # gg
'''
数据值1 if 条件 else 数据值2
条件成立使用数据值1 不成立使用数据值2
当结果是二选一的情况下 使用三元表达式较为简便
并且不推荐多个三元表达式嵌套

'''

各种生产式、表达式、推导式

name_list = ['1','2','3']
#给所有人后面都加__a
new_list=[]
for i in name_list:
    new_list.append(i+'__a')
普通的
#列表生产式
#先看for循环 每次for循环之后会再看for关键字前面的操作
new_list = [i+'__a' for i in name_list]
#复杂情况
new_list = [i+'__a' for i in name_list if i == '1']


new_list = ['大佬' if i == '2' else '菜鸟' for i in name_list if i != '3']

#字典生成式
s1 = 'hello world'
d1={}
for i,j in enumerate(s1,1)
	d1[i]=j
d2 = {i:j for i,j in enumerate(s1,0)}

#集合生成式

se = {i for i in 'hello'}

#元组没有生成式,只有生成器
t1 = (i+'1' for i in 'hello')
for j in t1:
    print(j)

匿名函数

没有名字的函数 需要使用关键字lambda
语法结构
	lambda 可以有参数:直接返回冒号后面的数据值
#匿名函数不单独用

常见内置函数

1.map() 映射
l1 = [1,2,3,4,5]
a = map(lambda x:x+1,l1)
print(a)
#[2,3,4,5,6]
2.max,min  # 查找最大最小值
res = max(l1)  # 第一次参数为可迭代对象,第二个是查找排序关键字,为一个函数 返回的是第一参数取的值
d1 = {
    'asd':12,
    'dasd':18,
    '123':20
}
res = max(d1,key=lambda x:d1.get(x))
3.reduce	# 出入多个值返回一个累加的值
from functools import reduce
res = reduce(l1)  # 一共三个参数,第一个为函数,第二个为可迭代对象,第三个累加默认值为0,累乘默认为1

作业

'''
1.
附加题
有下列用户数据'''
'''user_data = {
    '1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
    '2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
    '3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
}'''
'''并有三个函数'''

'''
要求: 调用上述三个函数的时候需要从user_data中校验用户身份是否正确
并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表
func1是1、func2是2、func3是3
并且一旦用户登录成功之后后续函数的调用不再校验用户身份
请思考如何获取函数功能编号
如何校验用户身份
如何校验权限
ps: 装饰器知识
附赠: 实现上述主体功能即可
其他扩展优化功能可暂且不写
'''

'''
1.先编写校验用户身份的装饰器
2.然后再考虑如何保存用户登录状态
3.再完善各种需求
'''
user_data = {
    '1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
    '2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
    '3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
}
islogin = []


def outer_p(data):  # 或者采用参数传递(data,num)
    def outer(func):
        def inner(*args, **kwargs):
            if not islogin:
                print('请先登录')
                user_name = input('请输入用户名')
                user_pwd = input('请输入密码')
                for k, v in data.items():
                    if v['name'] == user_name and v['pwd'] == user_pwd:
                        islogin.append(v['name'])
                        if func.__name__[-1] in v['access']:  # 这边就直接判断num in 不 in v['access']这个
                            res = func(*args, **kwargs)
                            return res
                        else:
                            print('你没有权限执行')
                else:
                    print('用户名或密码不正确')
            else:
                for k, v in data.items():
                    if v['name'] == islogin[0]:
                        if func.__name__[-1] in v['access']:  # 这边就直接判断num in 不 in v['access']这个
                            res = func(*args, **kwargs)
                            return res
                        else:
                            print('你没有权限执行')

        return inner

    return outer


@outer_p(user_data)  # 这里就变成了@outer_p(user_data,'1') 手动指定
def func1():
    print('1')
    pass


@outer_p(user_data)  # 这里就变成了@outer_p(user_data,'2') 手动指定
def func2():
    print('2')
    pass


@outer_p(user_data)  # 这里就变成了@outer_p(user_data,'3') 手动指定
def func3():
    print('3')
    pass


while True:
    func1()
    func2()
    func3()
    input('按任意键继续执行')

标签:name,list,算法,匿名,num,user,print,表达式
From: https://www.cnblogs.com/clever-cat/p/16789414.html

相关文章