zoukankan      html  css  js  c++  java
  • 生成器,面向过程编程,三元表达式,列表生成式,生成器表达式,匿名函数,内置函数

    什么是生成器:

    生成器是一个’自定义‘的迭代器,本质是个迭代器

    如何实现生成器:

    自定义的迭代器

    def func():
        print("from func")
        yield 1
        res = func()
        print(res._next_)
        
        
    运行结果:from func
        当我们通过_next_取值时才会执行函数体代码
    

    yield:

    每一次yield都会往生成器里面添加一个值

    只能在函数内部定义

    yield可以保存函数的暂停状态

    但凡在函数内部定义了的yield,调用函数时函数体代码不会执行,会返回一个结果,该结果就是一个生成器

    yield与return的区别:

    相同点:

    返回值都是无限制的

    不同点:

    return 只能返回一个值

    yield 能返回多个值

    python2中:range(1,5) ——————>[1,2,3,4]

    python3中:range(1,5) ———————>range对象——————>生成器

    创建一个自定义生成器,自定义range功能
    def my_range(start,end,move=1):
        while start <end:
            yield start
            start += move
    

    面向过程编程

    面向过程编程是一门编程思想

    核心是过程 ————————>指的是一种解决问题的步骤一种机械式的思维方式

    优点:

    将复杂的问题流程化,进而简单化

    缺点:

    若修改当前程序设计的某一部分,会导致其他部分同时需要修改,拓展性差

    # # 1.先让用户输入用户名和密码,用户角色,校验合法性
    def get_user_pwd_role():
        while True:
            # 先让用户输入用户名
            username = input('请输入用户名:').strip()
            # 对用户名进行校验,校验是否是字母或中文
            if username.isalpha():
    
                break
            else:
                print('用户名不合法!')
    
        while True:
            # 让用户输入密码
            password = input('请输入密码:').strip()
            re_password = input('请再次输入密码:').strip()
            # 校验两次输入的密码是不是一致
            if password == re_password:
                break
            else:
                print('两次输入的密码不一致!')
    
        user_role = input('请输入您的用户角色:').strip()
    
        return username, password, user_role
    
    
    # # 2.拼接用户字符串
    def cut_user_pwd_role(username, password, user_role):
        user_pwd_role_str = f'{username}:{password}:{user_role}
    '
        return user_pwd_role_str, username
    
    
    # # 3.保存用户数据,写入文件中
    def save_data(user_pwd_role_str, username):
        with open(f'{username}.txt', 'w', encoding='utf-8') as wf:
            wf.write(user_pwd_role_str)
    
    
    # # 注册功能Demo
    # def register():
    #     # 1.设计先让用户输入用户名和密码,用户角色,校验合法性,得到合法的用户名与密码
    #     user, pwd = get_user_pwd()
    #
    #     # 2.设计字符串的拼接, 得到拼接好的字符串
    #     user_pwd_str = cut_user_pwd(user, pwd)
    #
    #     # 3.开始写入文件
    #     save_data(user_pwd_str)
    #
    def register():
        username, password, user_role = get_user_pwd_role()
        user_pwd_role_str, username = cut_user_pwd_role(username, password, user_role)
        save_data(user_pwd_role_str, username)
    
    
    register()
    
    
    
    root:root:普通用户
    
    

    三元表达式:

    可以将 if...else...分支变成一行

    语法

    条件成立时返回左边的值,if判断条件,else条件不成立时返回右边的值

    求两个值的大小:
        def max(num1,num2)
        	return num1
    	else:
            return num2
        
        
        res = num1 if num1>num2 else num2
        条件成立时,返回左边的值;条件不成立时,返回右边的值
        
    

    列表生成式:

    将list中的值,依次取值,添加到new_list中

    可以一行实现生成列表

    语法:

    [值 for 可迭代对象中取出的每一个值 可迭代对象 + if 判断]

    for 的右边是循环次数,并且可以取出可迭代对象中的每个值

    for的左边可以为当前列表添加值

    [line for line in range(1,101)]
    [f'1{line}' for line in range(1,101)]
    

    生成器表达式(生成器生成式):

    ​ 生成器生成式:若数据量大时采用

    ()——————>返回生成器

    (lline for line in range(1,6))

    优点:节省资源 缺点:取值不便

    列表生成式:若数据量小时采用

    [line for line in range(1,6)]

    缺点:浪费资源 优点:可以依赖索引取值

    匿名函数:

    无名字的函数 lambda

    有名函数:

    def func():

    pass

    匿名(1,return 已经自动添加了)

    lamdba 匿名() : return 1

    lambda : 1 左边是参数,右边是返回值

    需要一次性使用

    单独使用将毫无意义,它必须配合内置函数才有意义

    内置函数:

    python内部提供的内置方法

    max,min,sorted

    max求最大值 max(可迭代对象)

    max内部会通过可迭代对象进行for循环取出,每个值,进行比较

    获取dict1中薪资最大的人的名字
    dict1={
        'tank'	:100,
        'egon'	:500,
        'sean'	:200,
        'jason'	:50
        
    }
    max(dict1)比较的是ascii中的字符串大小
    max(dict1, key=lambda x:dict[x])
    

    sorted

    进行 排序

    默认升序(从小到大)

    reverse 默认是false (从大到小)

    将dict1中的名字根据薪资进行排序(由小到大)
    sorted(dict1,key=lambda x:dict1[x])
    (由大到小)
    res = sorted(dict1, key=lambda x: dict1[x],reverse=True)
    
    
  • 相关阅读:
    查看Linux内核版本的命令
    Viterbi算法
    在matlab 画箭头
    BST和DST简单的matlab程序(图的广度和深度遍历)
    灯光设置(light)
    VC++安装window8.1系统
    prim algorithm
    模拟退火
    Kruskal最小生成树
    matlab练习程序(演化策略ES)
  • 原文地址:https://www.cnblogs.com/godlover/p/11858736.html
Copyright © 2011-2022 走看看