zoukankan      html  css  js  c++  java
  • 第十三天(都是理论)

    第十二天(都是理论)

    无参装饰器模板、有参装饰器模板

    # 无参装饰器模板
    def wrapper(func):
       def inner(*args, **kwargs):
           res = func(*args, **kwargs)
           # 在被装饰对象调用后添加功能
           return res
       return inner


    # 有参装饰器模板
    def outer(arg):
       def wrapper(func):
           def inner(*args, **kwargs):
               res = func(*args, **kwargs)
               return res

           return inner
       return wrapper

    生成器

    生成器就是生成的工具

    是一个‘自定义的‘迭代器,本质上是一个迭代器


    如何实现生成器

    单反在函数内部定义了yield,调用函数时,

    函数体代码不会执行,会返回一个结果,该结果就是一个生成器


    yield:

    每一次yield都会网生成器对象中添加一个值。

    yield只能在函数内部定义

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


    yield与return:

    相同点:返回的个数都是无限制的

    不同点:return只能返回一个值,yield可以返回多个值


    # 自定义生成器
    # def func():
    #     print('hello world')
    #     yield 'jinyi'
    #     res = func()

    面向过程编程

    '''
    思想!!!
    面向过程编程是一门编程思想。

    面向 过程 编程:
      核心是 '过程' 二字,过程 指的是一种解决问题的步骤,即先干什么再干什么
      基于该编程思想编写程序,就好比在设计一条工厂流水线,一种机械式的思维方式。

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

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

          牵一发而动全身,扩展性差。
    '''


    # # 1.先让用户输入用户名和密码,校验合法性
    # def get_user_pwd():
    #     while True:
    #         # 让用户输入用户名与密码
    #         username = input('请输入用户名:').strip()
    #         # 校验用户名是否为 英文字母 str.isalpha 校验英文字母、中文
    #         if username.isalpha():
    #             break
    #         else:
    #             print('用户名不合法')
    #
    #     while True:
    #         password = input('请输入密码:').strip()
    #         re_password = input('请确认密码:').strip()
    #         # 校验两次密码是否一致
    #         if password == re_password:
    #             break
    #         else:
    #             print('两次密码不一致。')
    #
    #     return username, password
    #
    #
    # # 2.拼接用户字符串
    # def cut_user_pwd(user, pwd):
    #     user_pwd_str = f'{user}:{pwd} '
    #     return user_pwd_str
    #
    #
    # # 3.保存用户数据,写入文件中
    # def save_data(user_pwd_str):
    #     with open('user.txt', 'a', encoding='utf-8') as f:
    #         f.write(user_pwd_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)
    #
    #
    # register()

    三元表达式

    '''
    三元表达式:

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

      语法:
          条件成立返回左边的值 if 判断条件 else 条件不成立返回右边的值
    '''

    # if 判断条件:
    #     执行
    # else:
    #     执行


    # 求两个值的大小
    # 通过if...else语法
    # def max2(num1, num2):
    #
    #     if num1 > num2:
    #         return num1
    #     else:
    #         return num2
    #
    # res = max2(100, 20)
    #
    # print(res)

    # 三元表达式
    # num1 = 10
    # num2 = 20
    # # res = num1 if num1 > num2 else num2
    # def max2(num1, num2):
    #     res = num1 if num1 > num2 else num2
    #     return res
    #
    # res = max2(num1, num2)
    # print(res)

    列表生成式

    '''
    列表生成式:
      可以一行实现生成列表。
      语法:
          list = [取出的每一个值、任意值 for 可迭代对象中取出的每一个值 in 可迭代对象]
          # for的右边是循环次数,并且可以取出可迭代对象中每一个值
          # for的左边可以为当前列表添加值
          list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象]

          list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]
    '''

    # 将list1中的值,依次取出,添加到new_list中
    # list1 = [1, 2, 3, 4]
    # new_list = []
    # for line in list1:
    #     new_list.append(line)
    #
    # print(new_list)


    # 普通方式
    # new_list = []
    # for line in range(1, 101):
    #     new_list.append(line)
    # print(new_list)

    # 列表生成式
    # list1 = [f'1{line}' for line in range(1, 101)]
    # print(list1)


    # Demo: 将name_list列表中的每一个人后缀都添加_dsb
    # name_list = ['jason', '饼哥(大脸)', 'sean', 'egon']
    # new_name_list = [name + '_dsb' for name in name_list]
    # print(new_name_list)


    # 将name_list列表中的tank过滤掉,其他人后缀都添加_dsb
    # name_list = ['jason', '饼哥(大脸)', 'sean', 'egon', 'tank']
    # new_name_list = [name + '_dsb' for name in name_list if not name == 'tank']
    # print(new_name_list)


    # 只要思想不滑坡,方法总比问题多。

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

    '''
    生成器表达式(生成器生成式):
      - 列表生成式: 若数据量小时采用
          [line for line in range(1, 6)] ---> [1, 2, 3, 4, 5]
          优点:
              可以依赖于索引取值,取值方便

          缺点:
              浪费资源

      - 生成器生成式: 若数据量过大时采用
          () ---> 返回生成器
          (line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)

          优点:
              节省资源

          缺点:
              取值不方便
    '''

    # 生成一个有1000个值的生成器
    g = (line for line in range(1, 1000001))
    # <generator object <genexpr> at 0x00000203262318E0>
    print(g)

    # 列表生成式实现
    list1 = [line for line in range(1, 1000001)]
    print(list1)

    匿名函数

    '''
    生成器表达式(生成器生成式):
      - 列表生成式: 若数据量小时采用
          [line for line in range(1, 6)] ---> [1, 2, 3, 4, 5]
          优点:
              可以依赖于索引取值,取值方便

          缺点:
              浪费资源

      - 生成器生成式: 若数据量过大时采用
          () ---> 返回生成器
          (line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)

          优点:
              节省资源

          缺点:
              取值不方便
    '''

    # 生成一个有1000个值的生成器
    g = (line for line in range(1, 1000001))
    # <generator object <genexpr> at 0x00000203262318E0>
    print(g)

    # 列表生成式实现
    list1 = [line for line in range(1, 1000001)]
    print(list1)

    内置函数

    '''
    生成器表达式(生成器生成式):
      - 列表生成式: 若数据量小时采用
          [line for line in range(1, 6)] ---> [1, 2, 3, 4, 5]
          优点:
              可以依赖于索引取值,取值方便

          缺点:
              浪费资源

      - 生成器生成式: 若数据量过大时采用
          () ---> 返回生成器
          (line for line in range(1, 6)) ---> g生成器(1, 2, 3, 4, 5)

          优点:
              节省资源

          缺点:
              取值不方便
    '''

    # 生成一个有1000个值的生成器
    g = (line for line in range(1, 1000001))
    # <generator object <genexpr> at 0x00000203262318E0>
    print(g)

    # 列表生成式实现
    list1 = [line for line in range(1, 1000001)]
    print(list1)

     

  • 相关阅读:
    hdu 5015
    hdu 2276
    hdu 6197 array array array LIS
    poj 3070
    codefroce 854 A.Fraction
    sql数据库发布、订阅同步方式操作
    python排序(冒泡、直接选择、直接插入等)
    忘记mysql数据库密码时进行修改方法
    Word中图片自动编号且与文中引用的编号对应
    解决电脑本地网络连接显示红叉又可上网问题
  • 原文地址:https://www.cnblogs.com/zhangjinyi97/p/11884606.html
Copyright © 2011-2022 走看看