
借鉴于其他多数语言中集合的 map/reduce 操作,也想总结一下在 Python 中如何对集合进行 map/reduce。而不是对于 Python 集合只会用简单的
for ... in遍历,处于之间的是 Python 的 Comprehension 操作,更倾向于译作推导; 在 Scala 中也有类似的for-comprehension语法。因此本文将涉及到三个方面的知识,基本的集合遍历操作,集合的推导,与 filter/map/reduce 操作。我无法写出诸如 掌握 Python 集体看这一篇就够了 的文章,但基本由本篇出发能了解到 Python 集合的基本遍历,转换操作。其余如切片,和更多能作用于 Python 集合的函数未有提及, 请查阅相关文档。
集合的基本遍历操作
这一块主要是复习功课, 希望由此熟练掌握常用的集合遍历操作方式 Read More
就在 2019 年 1 月份微软收购了 PostgreSQL 数据库的初创公司 CitusData, 在云数据库方面可以增强与 AWS 的竟争。AWS 的 RDS 两大开源数据库就是 MySQL(Aurora 和 MariaDB 是它的变种) 和 PostgreSQL。
而 PostgreSQL 跳出了普通关系型数据库的类型约束,它灵活的支持 JSON, JSONB, XML, 数组等类型。比如说字段类型可以是各种形式的数组,一维或多维。create table t1(
上面只是认识了一下 PostgreSQL 这一亮眼的特性,本篇重点不在如何定义操作数组类型的字段,而是对于普通的非数组字段类型如何用与数组相关的
address varchar(5)[3],
counter integer[3][3],
schedule text[][]
)unnest关键字进行记录的批量插入,更新以及合并操作。
在正式使用介入unnest之前先熟悉一下 PostgreSQL 的 upsert(update insert) 操作。受其他数据库的影响,总以后 PostgreSQL 也应该支持merge into语句,而且竟然 PostgreSQL 官方也有文档介绍 MERGE 有模有样的,然而试了一下根本就不支持merge into操作。 Read More
这几天一直浸淫在对 Python 的学习当中,对于一个更习惯 Java 语言的人来说,在接接触 Python 各种概念时会不停的与 Java 进行碰撞。譬如这里要说到的线程,Python 能如何像 Java 一样创建并执行单个线程,以及是否也能使用线程池来进行多作务的执行呢?
整个读完了《THE Quick Python Book》一书也只字未提多线程,然而对于有长时间的 IO 等待的程序,对于当今普及的多核以及核内超线程的 CPU 来说,不使用多线程来并行或并发处理任务是万万不能的,否则效率的差别是数量级的。
基于与 Java 多线程编程进行的比较,主要着力于两个问题:1)创建并执行新的线程,2)线程池中执行任务创建并执行新的线程
默认的,代码是在主线程中执行,主线程名称为MainThread。如果要创建一个子线程并执行需要用到模块threading。下面的是基本的代码 Read More
前两篇分别学习了 Python 如何进行依赖的管理,以及结合虚拟环境来使用pip进行依赖管理。而有人觉得把virtualenv与pip分开来操作太麻烦了,而且requirements.txt描述依赖的方式十分笨拙,所以在前两者之上创建了pipenv, 也谈不上重新发明了轮子吧。3. Pipenv: 新一代依赖管理与虚拟环境
倘若不是经由virtualenv,venv而来到pipenv,没有对比也就无法体会到pipenv的妙处的。pipenv在总结了virtualenv/venv的缺点之后由 Kenneth Reitz 于 2017 年 1 月发布的新型 Python 依赖管理器。- 它不再需要单独用
virtualenv和pip,只要一条命令pipenv完成所有的事 - 不用手动管理
requirements.txt文件,而是由pipenv自动维护Pipfile和Pipfile.lock文件 - 自动创建虚拟环境,并且虚拟环境与项目文件分离
- 更详尽的依赖图(例如
pipenv graph),像mvn dependency:tree那样显示依赖树 - 控制台下输出颜色更丰富
- 它不再需要单独用
原本想在一篇之内覆盖到 Python 的包管理以及各类虚拟环境的应用,没想根本就是一发不可收拾,恐怕两篇都完不了,所以也要进行重构。这里只涉及到 Python 的虚拟环境venv和virtualenv,至于标题的话,也不想再改了,只作一,二,三编号,必要时仍能连缀成长篇。最后一篇将单独学习pipenv的应用。
以下序号也是承接上一篇 Python 包管理及虚拟环境的应用(一)。2. Python 虚拟环境
关于创建 Python 项目的虚拟环境,有三个工具可用,venv,virtualenv, 以及后面单独要学到的pipenvvenv, 即python3 -m venv命令,Python 3.3 及新版本自带了,为 Python 3.4 及以后的版本创建的虚拟环境会有pip和setuptools命令virtualenv需要单独安装,但是它支持 Python 2.7 和 Python 3.3+, 创建的虚拟环境中带有pip,setuptools和wheel命令- 另外,
pyvenv脚本也可用来创建 Python 虚拟环境,不过它自 Python 3.6 不推荐使用,建议用python3 -m venv命令
Read More
话说 Python 的哲学之一就是: 用一种方法,最好是只有一种方法来做一件事。可以用python -m this或在 python 交互界面下import this看到The Zen of Python有一句:There should be one-- and preferably only one --obvious way to do it.
然而 Python 在关于包管理(依赖管理)一事上却让人面临了众多的选择。
即使是 Java 日趋发展庞大的今天,包管理工具也没有如今的 Python 复杂,Java 的包管理工具经历了手工下载 jar 包,Maven, Ant+Ivy, Gradle, sbt, 但主流的也就 Maven 和 Gradle, 并且它们兼具项目构建的功能。
这里有一个 Python 包管理工具变迁的视频: Kenneth Reitz - Pipenv: The Future of Python Dependency Management - PyCon 2018。再更早的 Python 依赖管理的方式不说,视频中提到了 Read More
Web 编程中由于需要用 Form 或 URL 来传递参数,所以必然会有 urlencode 和 urldecode 的操作,Python Web 也不例外。Python 对 URL 的编解码操作提供了
urllib模块,下面例子中所使用的 Python 版本是 3.6.7,不同的 Python 版本可能略有差异。简面言之本文就是关于以下六个函数的使用,更多关于
urllib的用法请自行进一步研究。from urllib.parse import urlencode, parse_ql, quote, quote_plus, unquote, unquote_plus
为什么两个 urlencode 和 urldecode 操作会涉及到六个函数的应用呢,分别来讲述
1. urlencode
Python 的
urllib直接提供了urlencode函数,它的操作数是一个字典 Read More
在使用 Python 进行数据库查询,通常情况下cursor的fetchall,fetchmany返回的是元组(Tuple) 的列表,所以对查询到的结果只能用索引下标来访问,而无法通过字段名来获取值。对 Java JDBC 的 ResultSet 操作,我们有两种获取值的方式,resultSet.getString(1) 和 resultSet.getString('name')。
其实只要能用数字索引访问到字段值也就足够了,查询后字段名可以由cursor.description获得。通过字段名来访问值唯一的好处估计是出错的概率小些罢了,比如 result['firstname'], result['lastname'] 总是比 result[1], result[2] 更不容易搞混,错误定位也会更轻松。
假如有下面的数据库表与两条记录 Read More
作为一个 Java 为母语的程序员来讲,学习起其他新的语言就难免任何事都与 Java 进行横向对比。Java 7 引入了能省去许多重复代码的
try-with-resources特性,不用每回 try/finally 来释放资源(不便之处有局部变量必须声明在 try 之前,finally 里还要嵌套 try/catch 来处理异常)。比如下面的 Java 代码1try(InputStream inputStream = new FileInputStream("abc.txt")) { 2 System.out.println(inputStream.read()); 3} catch (Exception ex) { 4}它相应的不使用 try-with-resources 语法的代码就是 Read More

上一篇 Python 的模块搜索路径,介绍了 Python 的模块搜索路径,最终起作用的是
sys.path路径列表。如果要自定义自己的搜索路径,就是要怎么定制sys.path的内容。可以简单的用PYTHONPATH环境变量前向添加,这儿将要说的是用.pth文件的方式。也可由此进一步理解 Python 依赖管理工具,像virtualenv等的工作原理。.pth文件名是什么,无所谓,Python 只认扩展名。.pth文件中每行指定一个路径 -- 绝对或相对路径(相对于本.pth文件所在的目录),另外还可以空行或#开始的注释行,还能有import语句,大概只用来校验是否能导入成功,程序代码中还是需要显示的 import 模块。.pth文件放在哪里.pth文件创建好后应该放到哪里去呢?不是sys.prefix指示的位置,也不是sys.path中任意一个目录,而是sys.path中属于 site.packages 的某一个目录中。可以用1>>> import site 2>>> site.getusersitepackages() 3>>> site.getsitepackages()查看到, 看我在 Ubuntu Linux 中看到的内容(为便于阅读,显示列表内容时进行了换行处理) Read More