400-800-8975

python学习重点

为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版本号。例如在CPython 发行版3.4中,fibo.py文件的预编译文件就是:__pycache__/fibo.cpython-34.pyc。这种命名规则可以保证不同版本的模块和不同版本的python编译器的预编译模块可以共存。以下是小编为你整理的python学习重点

脚本在运行之前会首先检查python文件的最后编辑日期和预编译模块的编译时间,从而决定是否需要重新编译。预编译模块也是跨平台的,所以不同的模块是可以在不同的系统和不同的架构之间共享的。

Python在两种情况下不检查缓存。第一种,从命令行中直接加载的模块总是会重新编译并且结果不保存。第二种,如果没有源模块,则不会检查缓存。为了支持无源代码的部署方式,应该将预编译模块放在源代码文件夹中而不是__pycache__中,并且不要包含源代码模块。


python学习重点

你可以使用-O和-OO参数来降低预编译模块的大小。-O开关会去除assert语句,-OO开关会去除assert语句和__doc__字符串。因为有些模块要依赖这些语句,因此只有当你确认模块的内容时才去使用这些开关。优化模块的后缀名是.pyo。

.pyo和.pyc文件的执行速度不会比.py文件快,快的地方在于模块加载的速度。compileall模块可以用来把某个文件夹的中的所有文件都编译成为.pyc或者.pyo文件。

lambda

lambda通常是匿名函数的代名词,我们用到lambda的时候就是创建一个匿名函数:举个简单的例子:x代表了输入,x**2代表计算方法,也代表返回内容,也就是说这个函数输入一个数,返回这个数的平方。但是因为这个函数没有函数名,所以无法在其他地方调用

除非我们将这个函数起一个名字:但通常我们不会这么做,匿名函数只是作为匿名使用。

filter函数用法是:filter(fuction,list):将list中每一个元素带入到function中,计算返回值,将返回值为True的list中的元素形成一个新的list,当然也可以是tuple。

对于上面这个函数,我们可以用lambda来简化:它的意思是,如果alist中的值的平方小于5,就返回这个值,形成一个新的list

python的由来

Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python是纯粹的自由软件,源代码和解释器CPython遵循GPL(GNU General Public License)协议[1] 。Python语法简洁清晰,特色之一是强制用空白符(w作为语句缩进。

首先从Python官网(https://www.python.org/downloads/)下载Python安装程序,本文以Python 3.5.2为例:


关于python

web-based installer 需要通过联网完成安装2、executable installer 通过可执行文件(*.exe)方式安装3、embeddable zip file 嵌入式版本,可以集成到其它应用中

笔者开发环境是Windows所以选择红框选中的版本,Mac用户下载红框标注的版本,下载完成后,找到相应的软件包,

NumPy入门详解

什么是NumPy?

NumPy是Python中一个用于科学计算的包,提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。

NumPy基础

Numpy的主要对象是同种元素的多维数组。一个数组中的所有元素都是同一种类型,通过正整数元组索引的元素表格(通常元素是数字)。在Numpy中dimensions-纬度叫做axes-轴,轴的个数叫做rank-秩(zhì)。

例如,下面的例子中,这个数组的秩为2(它是二维的)。它的第一纬度(轴)长度为2,第二纬度的长度为3。

[[ 1, 1., 1], [ 2, 2, 2]]

Numpy提供的最重要数据类型有:

1.float64 64位浮点数

2.float32 32位浮点数

3.int64 64位整数

4.int32 32位整数

5.bool 8位 True 或者 False

(查询当前多维数组可以用Python内嵌的type()函数)

转换数据类型

可以通过ndarray的astype方法显式地转换其dtype。

arr = np.array([1,2,3])

print(arr.dtype)

float_arr = arr.astype(np.float32)

print(float_arr.dtype)

(一类数据在位数切换时只能表示近似的分数值,在复杂计算中,由于可能会积累一些浮点错误,因此比较操作只能在一定小数位以内有效。)

Numpy的基本对象:ndarray&func

标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。这样为了保存一个简单的[1,2,3],需要有3个指针和三个整数对象。对于数值运算来说这种结构显然比较浪费内存和CPU计算时间。

此外Python还提供了一个array模块,array对象和列表不同,它直接保存数值,和C语言的一维数组比较类似。但是由于它不支持多维,也没有各种运算函数,因此也不适合做数值运算。

NumPy的诞生弥补了这些不足,NumPy提供了两种基本的对象:ndarray(N-dimensional array object)和 ufunc(universal function object)。ndarray(下文统一称之为数组)是存储单一数据类型的多维数组,而ufunc是一种能对数组的每个元素进行操作的函数。NumPy内置的许多ufunc函数都是在C语言级别实现的,因此它们的计算速度非常快。

常用ndarray属性:

dtype 描述数组元素的类型

shape 以tuple表示的数组形状

ndim 数组的维度

size 数组中元素的个数

itemsize 数组中的元素在内存所占字节数

T 数组的转置

flat 返回一个数组的迭代器,对flat赋值将导致整个数组的元素被覆盖

real/imag 给出复数数组的实部/虚部

nbytes 数组占用的存储空间

常用ndarray方法:

reshape(…) 返回一个给定shape的数组的副本

resize(…) 返回给定shape的数组,原数组shape发生改变

flatten()/ravel() 返回展平数组,原数组不改变

astype(dtype) 返回指定元素类型的数组副本

fill() 将数组元素全部设定为一个标量值

sum/Prod() 计算所有数组元素的和/积

mean()/var()/std() 返回数组元素的均值/方差/标准差

max()/min()/ptp()/median() 返回数组元素的最大值/最小值/取值范围/中位数

argmax()/argmin() 返回最大值/最小值的索引

sort() 对数组进行排序,axis指定排序的轴;kind指定排序算法,默认是快速排序

view()/copy() view创造一个新的数组对象指向同一数据;copy是深复制

tolist() 将数组完全转为列表,注意与直接使用list(array)的区别

compress() 返回满足条件的元素构成的数组

多维数组ndarray内存结构:

如下图所示,关于数组的描述信息保存在一个数据结构中,这个结构引用两个对象:一块用于保存数据的存储区域和一个用于描述元素类型的dtype对象。

12 12 分享:

相关课程

发表评论

登录后才能评论,请登录后发表评论...
提交评论

最新文章