Python 基础-13 功能模块
Python2 和 Python3 并存
Python3 安装配置
参考链接:
https://www.cnblogs.com/gaoyuechen/p/8006365.html
安装完成后自带 pip 等
# 下载包
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
# 解压
tar xf Python-3.6.0.tgz
# 配置安装信息
./configure --prefix=/usr/local/python3/
# 编译
make && make install
# 配置环境变量
新建文件
vim /etc/profile.d/python3.sh
export PATH=$PATH:/usr/local/python3/bin/
执行一下下面命令
export PATH=$PATH:/usr/local/python3/bin/
# 验证
python3
Python 3.6.0 (default, Feb 1 2017, 14:56:52)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
pip3 安装配置
env3 安装配置
判断数据类型
第一种:types
import types
type(x) is types.IntType # 判断是否 int 类型
type(x) is types.StringType # 判断是否 string 类型
第二种: 超级恶心的模式,不推荐
type(x) == type(1) # 判断是否 int 类型
type(x) == type("1") # 判断是否 string 类型
第三种: isinstance
isinstance(对象,类型名或类型列表或元祖) --> True/False
例如:isinstance("lst",(int,str,list)) # True
判断类型 "lst" 在 类型列表中
Python 代码建议
from .. import
优先使用import a 使用a.B
有节制使用from a import B
避免使用 from a import *
Python -m xxx.py -m 使得一个模块像脚本一样运行
name
package
Python 的* __ xx的区别
①函数名 意味着,此函数用于类内部,不属于 api ,等同于私有函数
②函数名 ,用来避免子类覆盖其内容,意味着此函数不能被重写,继承等。仅仅用于类的内部使用,
③xx函数,用于 Python 调用
使用_one_underline 来表示该方法或属性是私有的,不属于 API;
当创建一个用于 python 调用或一些特殊情况时,使用two_underline;
使用*just_to_underlines,来避免子类的重写!
使用 join 连接字符 ,join 连接字符更高高效比+ ,尤其是大规模的字符串连接
join 使用:
'xx'.join([str1,str2]) = str1xxstr2
'xx'.join([str1,str2,str3]) = str1xxstr2xxstr3
时间测试,代码的性能分析
import timeit
生成测试所需的字符数组
格式化字符串优先使用.format,而不是%s 等
.format 的使用方法 1.位置符号
" select _ from {0} where 1=1 {2} ".format(xx,yy) 2.使用名称
" select _ from {xx} where 1=1 {yy} ".format(xx=1,yy=1) 3.同过属性
xx = 1
yy = 2
" select * from {xx} where 1=1 {yy} ".format 4.格式化元组的具体项
point = (1,3)
'x:{0[0]}; y:{0[1]}'.format(point)
.format 的优势
使用灵活,可以作为参数传递,简便直观,%s 处理需要注意被格式化字符的格式而。format 不需要
通过字符串调用对象属性
python 通过字符串调用对象属性或方法的实例讲解
有时候需要将属性或方法作为参数传入,这个时候可以通过以下几种方式用字符串调用对象属性或方法
1.eval
In [634]: def getmethod(x,char='just for test'):
...: return eval('str.%s' % x)(char)
...:
In [635]: getmethod('upper')
Out[635]: 'JUST FOR TEST'
2、getattr
In [650]: def getmethod2(x, char='just for test'):
...: return getattr(char, x)()
...:
In [651]: getmethod2('upper')
Out[651]: 'JUST FOR TEST'
获取目录下所有文件名称
file_dir = "sss"
for root, dirs, files in os.walk(file_dir):
print(root) #当前目录路径
print(dirs) #当前路径下所有子目录
print(files) #当前路径下所有非目录子文件
for filename in files:
file_path = os.path.join(file_dir,filename)
print file_path
uuid [唯一标识符]
UUID: 通用唯一标识符 ( Universally Unique Identifier ),对于所有的 UUID 它可以保证在空间和时间上的唯一性.
它是通过 MAC 地址、 时间戳、 命名空间、 随机数、 伪随机数来保证生成 ID 的唯一性,,有着固定的大小( 128 bit 位 ),通常由 32 字节的字符串(十六进制)表示。
它的唯一性和一致性特点,使得可以无需注册过程就能够产生一个新的 UUID;
UUID 可以被用作多种用途, 既可以用来短时间内标记一个对象,也可以可靠的辨别网络中的持久性对象。
import uuid
# uuid.uuid1 基于时间戳
uuid.uuid1([node[, clock_seq]])
node - 默认主机的硬件地址
clock_seq 默认随机14位序列号
# uuid.uuid3 基于名字的MD5散列值
通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,
和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。
uuid.uuid3(namespace, name)
# uuid.uuid4 基于随机数
由伪随机数得到,有一定重复概率,可以计算得到
# uuid.uuid5() 基于名称的SHA-1散列值
使用 Secure Hash Algorithm 1 算法
总结:
- 分布式环境: 建议 uuid1
- 名字唯一要求:建议 uuid3/uuid5
文字处理
Levenshtein 文字距离
import Levenshtein
str1 = 'qwer1235'
str2 = 'qwe1235r'
计算汉明距离,要求 str1 和 str2 必须长度一致。是描述两个等长字串之间对应位置上不同字符的个数
Levenshtein.hamming(str1, str2) #
Levenshtein.distance(str1,str2)计算编辑距离。是描述一个字符串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换。
Levenshtein.distance(str1, str2)
网友评论