ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python3学习进度

2021-06-01 18:01:55  阅读:320  来源: 互联网

标签:函数 迭代 Python list 学习 进度 模块 Python3 2021


 

简介:Python3学习-由工作中遇到Android/iOS自动化测试调研使用(网易Airtest) 引入Python学习

学习路径

  • 2021年02月04日

    • web开发(了解)
      • HTTP协议简介
      • HTML简介
      • WSGI接口
      • 使用Web框架
      • 使用模板
    • 异步IO(暂未深入)
      • 协程
      • asyncio
      • async/wait
      • aiohttp
    • 使用MicroPython(了解)
      • 搭建开发环境
      • 控制小车
      • 遥控小车
      • 遥控转向
    • 实战-web实战-待实践。。。
  • 2021年02月03日

    • 正则表达式
    • 常用内建模块
      • datetime
      • collections
      • base64
      • struct
      • hashlib
      • hmac
      • itertools
      • contextlib
      • urllib
      • XML
      • HTMLParser
    • 常用第三方模块
      • Pillow
      • requests
      • chardet
      • psutil
    • virtualenv
    • 图形界面
      • 海龟绘图
    • 网络编程
      • TCP/IP简介
      • TCP编程
      • UDP编程
      • 小结:UDP的使用与TCP类似,但是不需要建立连接。此外,服务器绑定UDP端口和TCP端口互不冲突,也就是说,UDP的9999端口与TCP的9999端口可以各自绑定。
    • 电子邮件
      • SMTP发送邮件
      • POP3收取邮件
    • 访问数据库
      • 使用SQLite
      • 使用MySQL
        • pymysql连接docker里mysql
      • 使用SQLAlchemy
        • 用tuple表示一行很难看出表的结构。如果把一个tuple用class实例来表示,就可以更容易地看出表的结构来:
        • 这就是传说中的ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上。是不是很简单?
        • 但是由谁来做这个转换呢?所以ORM框架应运而生。
        • 在Python中,最有名的ORM框架是SQLAlchemy。我们来看看SQLAlchemy的用法。
  • 2021年02月02日

    • 进程和线程
      • 多进程
      • 多线程
      • ThreadLocal
      • 进程 VS. 线程
      • 分布式进程
    • IO编程
      • 文件读写
      • StringIO 和 BytesIO
      • 操作文件和目录
      • 序列化
    • 错误、调试和测试
      • 错误处理
      • 调试
      • 单元测试
      • 文档测试
  • 2021年02月02日

    昨天看到W3CSchool的教程也还可以-这个可以复习使用

    • 面向对象高级编程
      • 使用__slots__
        • 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class:
        • 尝试给实例绑定一个属性
        • 尝试给实例绑定一个方法
          • 注:给一个实例绑定的方法,对另外一个实例是不起作用的
        • 为了给所有实例都绑定方法,可以给class绑定方法:
        • 给class绑定方法后,所有实例均可调用:
        • 通常情况下,上面的set_score方法可以直接定义在class中,但动态绑定允许我们在程序运行的过程中动态给class加上功能,这在静态语言中很难实现。
      • 使用@property
      • 多重继承
        • 由于Python允许使用多重继承,因此,MixIn就是一种常见的设计。
        • 只允许单一继承的语言(如Java)不能使用MixIn的设计。
      • 定制类
      • 使用枚举
      • 使用元类
        • 类比Object-C动态方法交换
  • 2021年02月01日

    • 面向对象编程
      • (***)面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
      • 类和实例
      • 访问限制
      • 继承和多态
      • 获取对象信息
      • 实例属性和类属性
        • 小结:
          • 实例属性属于各个实例所有,互不干扰;
          • 类属性属于类所有,所有实例共享一个属性;
          • 不要对实例属性和类属性使用相同的名字,否则将产生难以发现的错误。
  • 2021年02月01日

    • 模块
      • 模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用。
      • 创建自己的模块时,要注意:
        • 模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
        • 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。
      • 使用模块
      • 使用第三方模块
        • 在Python中,安装第三方模块,是通过包管理工具pip完成的。
        •  
  • 2021年02月01日

  • 2021年01月29日

    • 函数式编程
      • 高阶函数
        • map/reduce
          • map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:
          • 注:map转为tuple或list只能转一次如果转后再转其他类型会异常

          • map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
          • 再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
        • filter
          • filter()的作用是从一个序列中筛出符合条件的元素。由于filter()使用了惰性计算,所以只有在取filter()结果的时候,才会真正筛选并每次返回下一个筛出的元素。
        • sorted
          • sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。
      • 返回函数
        • 闭包
      • 匿名函数
        • 关键字lambda表示匿名函数,冒号前面的x表示函数参数(匿名函数lambda x: x * x)
        • 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
      • 装饰器
        • 现在,假设我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
      • 偏函数
        • Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。
        • 所以,简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。
        • 小结:当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。
# 测试filter
def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
# 测试map/reduce
def f(x):
    return x * x

L = [1, 2, 3, 4, 5, 6, 7, 8, 9]
r = map(Function.f, L)
print(f'map打印:{r}')

# 注:map转为tuple或list只能转一次如果转后再转其他类型会异常
L = tuple(r)
print(f'map转为元组{L}')
for i, item in enumerate(L):
    print(f'tuple - [i,item]=[{i},{item}]')

# L = list(r)
# print(f'map转为list{L}')
# for i, item in enumerate(L):
#     print(f'list - [i,item]=[{i},{item}]')
2021年01月29日
  • 针对昨天学习记录复习总结
  • Python教程
    • Python简介
  • 安装Python
    • Python解释器(VSCode/PyCharm-可以断点调试)
  • 第一个Python程序
    • 使用文本编辑器
    • Python代码运行助手
    • 输入和输出
  • Python基础
    • 数据类型和变量
    • 字符串和编码
    • 使用list和tuple
    • 条件和判断
    • 循环
    • 使用dic和set
  • 函数
    • 调用函数
    • 自/定义函数
    • 函数的参数
      • 参数组合:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
    • 递归函数
  • 高级特性
    • 切片
      • 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。注意:list和tuple均可以做切片操作!
    • 迭代
      • 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

      • 在Python中,迭代是通过for ... in来完成的,而很多语言比如C语言,迭代list是通过下标完成的,比如Java代码:

      • 因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

      • 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。

      • 如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断

      • 如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身

    • 列表生成式
      • 如果要计算1-100的整数之和,从1写到100有点困难,幸好Python提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数:eg:L = list(range(0, 5))
      • 而列表生成式则可以用一行语句代替循环生成上面的list:
        • eg:L = [x * x for x in range(1, 11)]
        • eg:L = [x * x for x in range(1, 11) if x % 2 == 0]
        • eg:[m + n for m in 'ABC' for n in 'XYZ']
        • eg:d = {'x': 'A', 'y': 'B', 'z': 'C' },d = [k + '=' + v for k, v in d.items()]
        • eg:L = ['Hello', 'World', 'IBM', 'Apple'],L = [s.lower() for s in L]
      • if...else
        • eg:>>> [x for x in range(1, 11) if x % 2 == 0]
        • eg:>>> [x if x % 2 == 0 else -x for x in range(1, 11)]
        • eg:>>> # if条件表达式里内容不做处理 else里是另外一种情况要做处理事 LN = [x if isinstance(x, str) != True else x.lower() for x in L]
    • 生成器
      • 「如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。」***在Python中,这种一边循环一边计算的机制,称为生成器:generator。
      • 斐波拉契数列
      • 要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
      • 同样的,把函数改成generator后,我们基本上从来不会用next()来获取下一个返回值,而是直接使用for循环来迭代:eg:for n in fib(6):print(n)
    • 迭代器
      • 可迭代对象-可以直接作用于for循环的对象统称为可迭代对象:Iterable。可以使用isinstance()判断一个对象是否是Iterable对象:

      • 生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。

      • 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

      • 可以使用isinstance()判断一个对象是否是Iterator对象:

 

标签:函数,迭代,Python,list,学习,进度,模块,Python3,2021
来源: https://blog.51cto.com/u_4955660/2842785

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有