首页 > 其他分享 >二分法、三元表达式及匿名函数

二分法、三元表达式及匿名函数

时间:2022-10-13 20:47:29浏览次数:66  
标签:name res 二分法 匿名 num func l1 print 表达式

二分法、三元表达式及匿名函数

目录

一、算法简介及二分法

1.算法的概念
  算法通俗来讲就是解决问题的有效方法
  算法可以在有限的空间和时间内用定义明确的形式语言来表示,以计算函数
2.常见的二分法
  二分法,快拍,插入,堆排,链表,桶排,双向链表,约瑟夫问题等
3.算法的应用场景及算法的前景
  算法主要有推荐算法还有成像算法
  学好算法前途一片光明,算法相关联的模型,机器学习,人工智能,机器人,都是现下比较热门的,学习算法也会很好的锻炼我们的逻辑思维能力,在平时生活中我们得多去接触算法,多练多写。
4.二分法
   二分法是最简单的算法
   要求:待查找的数据集必须是有序的
 eg:
l1 = [11,22,33,44,55,66,77,88,99,123,456,789]
def get_num(l1,target_num):
    # 添加递归韩顺的结束条件,不然会报错
    if len(l1) == 0:
        print('没找到啊啊啊')
        return
    # 按照数据集的长度,取中间数,然后索引取值
    middle_num = len(l1) // 2
    #判断中间数和目标数的大小
    if target_num > l1[middle_num]:
        # 切片保留列表右边一半
        right_num = l1[middle_num + 1:]
        print(right_num)
        return get_num(right_num,target_num)
    elif target_num < l1[middle_num]:
        # 切片保留列表左边一半
        left_num = l1[:middle_num]
        print(left_num)
        # 针对左边的表进行二分并判断
        return get_num(left_num,target_num)
    else:
        print(l1[middle_num])
get_num(l1,22)
# [11, 22, 33, 44, 55, 66]
# [11, 22, 33]
# 22

img

二、三元表达式

1.三元表达式中有三元:一元为if条件语句,二元为条件成立所返回的数据值,   三元为条件不成立所返回的数据值。
2.三元表达式执行顺序是,先判断if条件是否成立,条件成立返回if前面的数据   值,条件不成立返回else后面得数据值
3.基本形式:
   数据值1 if条件 else 数据值2
   条件成立则使用数据值1,条件不成立则使用数据值2
4.三元表达式的应用场景:
  当一个结果是二选一的时候,使用三元表达式更方便一点
   多个结果不推荐使用三元表达式
普通代码:
name = 'jason'
if name == 'jason':
    print('老师')
else:
    print('学生')
简化后的代码:
name = 'jason'
res = '老师' if name == 'jason' else '学生'
print(res)

普通代码:
def func(a,b):
    if a > b:
        return a
    else:
        return b
func = func(6,7)
print(func)
简化后的代码:
def func(a,b):
    return a if a > b else b
func = func(6,7)
print(func)

三、各种生成式

1.列表生成式

1.列表生成式顾名思义就是产生新的列表,列表的组成是多个数据值以逗号隔开用中括号括起来,列表中的数据以for循环的形式添加到昕的列表中,可以设置条件将指定的数据值添加到列表
2.基本形式:
   生成列表 for循环 if条件(可有可无)
# 给列表中所有人名的后面加上_a的后缀
1.方法1:
l1 = ['jia','jason','tom','jack']
data_num = []
for i in l1:
    data = f'{i}_a'
    data_num.append(data)
print(data_num)
2.方法2:
data_num = [name +"_a" for name in l1]
print(data_num)
3.加强版
data_num = [name +"_a" for name in l1 if name == 'jason']
print(data_num)

2.字典生成式

1.能够被for循环的数据类型都可以用字典生成新的字典,字典以k:v键值对的形式以逗号隔开用大括号括起来,一般不使用字典生成式,因为数据可能需要修改
2.基本形式:
   k:v for循环 if条件
eg:
s1 = 'hello'
for i,j in enumerate(s1,start=100):    # enumerate用于指定索引起始值
    print(i,j)
d1 = {i:j for i,j in enumerate('hello')}

3.集合生成式

1.能够被for循环的数据类型都可以生成新的集合,通过循环将目光数据都添加到昕的集合中
2.基本形式:
    生成集合元素 for循环 if条件
l1 = [11,22,33,44,55]
data_num = {i+1 for i in l1 if i != 44}
print(data_num)    # {56, 34, 12, 23}

4.元组

元组没有生成式,他有生成器,迭代生成器

四、匿名函数

匿名就是没有名字,那么匿名函数就是没有函数名的函数
语法结构:
       lambda 形参(可多个):返回值
普通代码:
def func(a,b):
    return a + b
func = func(22,44)
print(func)
简化代码:
res = lambda a, b :a+b
ret = res(66,77)
print(ret)
# 匿名函数一般不单独使用,需要配合其他函数一起使用

五、常见内置函数

1.map() 映射
l1 = [1,2,3,4,5]
res = map(lambda x:x+1,l1)
print(list(res))
2.max/min(最大,最小值)
l1 = [1,2,3,4,5]
# res = map(lambda x:x+1,l1)
# print(list(res))
res = max(l1)
print(res)
其他写法:
d1 = {
    'jason':'123',
    'jia':'111',
    'tom':'222'
}
def func(a):
    return d1.get(a)
res = max(d1,key=func)
print(res)
3.reduce 
# 传多个值,返回一个值
from functools import reduce
    l1 = [11, 22, 33, 44, 55, 66, 77, 88]
    res = reduce(lambda a, b: a + b, l1)
    print(res)

六、昨日作业详解

1.利用有参装饰器编写多种用户登录校验策略
"""
1.直接写死的  jason 123
2.数据来源于列表 ['jason|123','kevin|321','tony|222']
3.数据来源于文件 jason|123\n tom|321\n
"""
def login_auth(codn):
    def outter(func_name):
        def inner(*args,**kwargs):
            username = input('name>>>').strip()
            pwd = input('pwd>>>').strip()
            if codn == 'absolute':
                if username == 'jason' and pwd == '123':
                    res = func_name(*args,**kwargs)
                    return res
                else:
                    print('用户名或者密码有误')
            elif codn == 'list_type':
                user_list = ['jason|123','jia|222']
                user_data = (f'{username|pwd}')
                if user_data in user_list:
                    res = func_name(*args, **kwargs)
                    return res
                else:
                    print('用户名或者密码有误')
            elif codn == 'file_type':
                with open(r'a.txt','r',encoding='utf8') as f:
                     for i in f:
                        real_name,real_pwd = f.split('|')
                        if real_name == username and real_pwd.strip('\n') == pwd:
                            res = func_name(*args, **kwargs)
                            return res
        return inner
    return outter
@ login_auth('absolute')
def index(*args,**kwargs):
    print('from index')
@ login_auth('list_type')
def func(*args,**kwargs):
    print('from func')
@ login_auth('file_type')
def func1(*args,**kwargs):
    print('from func1')
index()
func()
func1()

七、今日作业

有下列用户数据
    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']}
    }
    并有三个函数
        def func1():
            pass
        def func2():
            pass
        def func3():
            pass
    要求:调用上述三个函数的时候需要从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']}
}

标签:name,res,二分法,匿名,num,func,l1,print,表达式
From: https://www.cnblogs.com/zx0524/p/16789564.html

相关文章

  • 算法、三元表达式、匿名函数
    算法、三元表达式、匿名函数目录算法、三元表达式、匿名函数一、算法简介1、算法的概念2、算法的应用场景二、二分法1、二分法查找思路2、二分法使用要求三、三元表达式四......
  • C++ 使用栈求解中缀、后缀表达式的值
    1.前言表达式求值对于有知识积累的你而言,可以通过认知,按运算符的优先级进行先后运算。但对计算机而言,表达式仅是一串普通的信息而已,需要通过编码的方式告诉计算机运算法......
  • 算法简介与函数表达式跟内置函数
    今日内容总结算法简介及二分法1.什么是算法算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机......
  • 算法、二分法、函数
    目录算法简介及二分法三元表达式各种生成式/表达式/推导式匿名函数内置函数作业算法简介及二分法1.什么是算法算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解......
  • 算法简介及二分法
    目录算法简介及二分法三元表达式各种生成式/表达式/推导式匿名函数常见内置函数算法简介及二分法1.什么是算法: 算法就是解决问题的有效方法不是所有的算法都很高效也......
  • 算法简介及二分法,三元表达式,各种生成式,匿名函数,常见内置函数
    目录算法简介及二分法,三元表达式,各种生成式,匿名函数,常见内置函数今日内容概要今日内容详细算法简介及二分法三元表达式各种生成式/表达式/推导式匿名函数常见内置函数算法......
  • 算法表达式匿名函数
    目录算法简介与二分法二分法常见算法的原理以及伪代码三元表达式各种生产式、表达式、推导式匿名函数常见内置函数作业算法简介与二分法1.什么是算法 算法就是解决问题......
  • python基础-二分法、生成式、匿名函数、内置函数
    python基础-二分法、生成式、匿名函数、内置函数目录一、算法简介及二分法1.算法2.二分法二、三元表达式三、生成式1.列表生成式2.字典生成式3.集合生成式四、匿名函数五......
  • 16、python函数篇 二分法、三元表达式、生成/推导式、匿名函数、内置函数
    目录一、算法简介之二分法1、什么是算法2、算法的应用场景3、二分法二、三元表达式1、简介及用法三、各种生成式1、列表生成式2、字典生成式3、集合生成式四、匿名函数五、......
  • 二分法、三元表达式、列表推导式、匿名函数、常见内置函数
    目录基础算法之二分法二分法+递归函数二分法补充三元表达式三元表达式适用情况各种生成式/推导式列表生成式注意事项字典生成式内置方法enumerate字典生成式例子集合生成式......