python学习笔记

What

Python是一种面向对象的解释型计算机程序设计语言。1989年发明,

特点:

  • 解释型
  • 面向对象
  • 简单易读
  • 跨平台

开发准备

  • 安装 python
  • 配置环境变量
  • 安装开发工具 pycharm
    1
    2
    3
    brew install pyenv
    brew install pyenv-virtualenv
    brew cask install rabbitmq

python版本

  • 显示可安装python版本 pyenv install -l
  • 安装指定Python版本 pyenv install 3.7.2
  • 卸载指定python版本 pyenv uninstall 3.7.2
  • 显示已安装python版本 包括虚拟环境 pyenv versions
  • 设置当前目录python版本 pyenv local 3.7.2
  • 设置当前会话python版本 pyenv shell 3.7.2
  • 重置版本设置
    1
    2
    pyenv shell --unset
    pyenv local --unset

虚拟环境

  • 创建某个Python版本的虚拟环境 pyenv virtualenv 3.7.2 wb-venv
  • 激活和停用虚拟环境: pyenv activate wb-venv pyenv deactivate
  • 列出当前所有的虚拟环境: pyenv virtualenvs
  • 删除虚拟环境: pyenv virtualenv-delete wb-venv

数据基本类型

  • 字符串(String)
  • 数字型(Numbers)包括四种
    • (整形(int)
    • 长整形(L)
    • 浮点型(float)
    • 复数(j)
  • 布尔
  • 元组(Tuple) 定长、内容不可变、元素类型多样
  • 列表(List) 队列结构、可变长度、元素的数据类型多样
  • 字典(Dictionary) 键值对结构、key唯一,数据类型多样、valuey数据类型多样

命名规范

https://www.python.org/dev/peps/pep-0008/

命名类型 说明 例子
模块名 小写字母,单词之间用_分割 ad_stats.py (业务类型域_操作域_周期域)
包名 小写字母,单词之间用_分割 sys_user
类名 驼峰 AdStats、ConfigUtil
全局变量名(类变量,在 java 中相当于 static 变量 大写字母,单词之间用_分割 NUMBER、COLOR_WRITE
普通变量 小写字母,单词之间用_分割 this_is_a_var
实例变量 以_开头,其他和普通变量一样 _price、_instance_var
私有实例变量(外部访问会报错) 以__开头(2 个下划线),其他和普通变量一样 __private_var
专有变量 __开头,__结尾,一般为 python 的自有变量,不要以这种方式 __doc____class__
普通函数 小写字母,单词之间用_分割 get_name()、count_number()、 ad_stat()
私有函数(外部访问会报错) 以__开头(2 个下划线),其他
和普通函数一样 __get_name()
  • 以双下划线开头的(__foo)代表类的私有成员;
  • 以双下划线开头和结尾的(foo)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。
  • 变量名、包名、模块名 变量名通常由字母、数字、下划线组成,以字母或下划线开头,包名、模块名通常采用简短的小写字母,提高可读性模块名中也可以包含下划线,包命中不推荐使用下划线。
  • 类名、对象名 类名首字母大写,其他字母采用小写。对象名用小写字母。内部使用的类在类名前加单下划线。
  • 函数名 函数名通常采用小写,必要时使用下划线区分单词以提高可读性。
  • 异常名 因为异常也是类,所以类的命名习惯在这里也适用。不同的是,如果异常实际上是个错误,则需要在异常名字的后面使用Error后缀
  • 全局变量名 我们假设这些变量都是在模块内部使用的。命名所遵循的规则跟函数的命名规则基本相同。

Python之父Guido推荐的规范

编码

  • 如无特殊情况, 文件一律使用 UTF-8 编码
  • python2 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识

语法

python 字符串拼接

  • 普通拼接 “str ” + var 性能低
  • 占位符有序传参 website = '%s%s%s' % ('python', 'tab', '.com')
  • key-value传参 不考虑顺序

取子字符串

strr = "testsubstr"

  • 取下标1的字符 strr[1]
  • 取下标1开始到3结束 左闭右开
  • 取下标0到2 左闭右开 strr[:2]
  • 取下标2开始到结束 strr[2:]

dict字典转json数据

j = json.dumps(dict)

获取变量类型

type(varname)

迭代元祖

1
2
for x in tup:
print "元素:"+ str(x)

Python Number 类型转换

表达式 说明
int(x [,base ]) 将 x 转换为一个整数
long(x [,base ]) 将 x 转换为一个长整数
float(x ) 将 x 转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效 Python 表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为 Unicode 字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串

Python 数学函数

表达式 说明
abs(x)
ceil(x)
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
exp(x) 返回e的x次幂
fabs(x) float的绝对值
floor(x) 返回下舍整数
log(x)
log10(x) 10的x对数
max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
modf(x) 回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表 示。
pow(x, y) x**y 运算后的值。
round(x[,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数
sqrt(x) 返回数字 x 的平方根

Python 随机数函数

表达式 说明
choice(seq) 从序列的元素中随机挑选一个元素,比如 random.choice(range(10)),从 0 到 9中随机挑选一个整数。
randrange ([start,] stop [,step]) 从指定范围内,按指定基数递增的集合中获取一个随机数, 基数缺省值为 1
random() 随机生成下一个实数,它在[0,1)范围内。
seed([x]) 改变随机数生成器的种子 seed。如果你不了解其原理,你不必特别去设定 seed Python 会帮你选择 seed。
shuffle(lst) 将序列的所有元素随机排序
uniform(x,y) 随机生成下一个实数,它在[x,y]范围内。

函数式编程

变量作用域

1
global varname

方法体内使用 关键字global 可使用全局变量,否则使用的是局部变量

匿名函数

异常处理

1
2
3
4
5
6
try:
正常的操作
except 异常名称, 数据:
发生以上多个异常中的一个,执行这块代码
else:
如果没有异常执行这块代码

  • finally

    1
    2
    3
    4
    5
    6
    try:
    print list[1]
    except(TypeError, IndexError), message:
    print "异常来了", message
    finally:
    print "执行finally"

  • 自定义异常

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    class ParamException(RuntimeError):

    def __init__(self, *args):
    self.args = args



    def check_params(age):
    if (age < 15):
    raise ParamException("年龄不能小于15")


    def register(age):
    try:
    check_params(age)
    except ParamException,error:
    print error

文件操作

  • 获取控制台内容 raw_input()函数
  • access_mode:access_mode 决定了打开文件的模式
    • 'r':读
    • 'w':写
    • 'a':追加
    • 'r+' == r+w(可读可写,放在指针开头,文件若不存在就报错(IOError)
    • 'w+' == w+r(可读可写,文件若不存在就创建)
    • 'a+' ==a+r(可追加可写,文件若不存在就创建) 对应的,如果是二进制文件,就都加一个 b 就好啦: 'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'
  • 中文utf-8 一个字符3个字节,其它一个字节

判断空

  • pandas df = df[(df['file_name'].isnull() | (df['file_name'] == ''))]

面向对象

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每 个对象所共有的属性和方法。对象是类的实例。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 实例变量:定义在方法中的变量,只作用于当前实例的类。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一 个 Dog 类型的对象派生自 Animal 类,这是模拟"是一个(is-a)"关系(例图,Dog 是一个 Animal)。
  • 实例化:创建一个类的实例,类的具体对象。
  • 方法:类中定义的函数。
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
  • 多继承
  • 同方法名,写后面的方法生效

Where

https://www.python.org/

参考

https://blog.csdn.net/youngbit007/article/details/61616241 https://www.cnblogs.com/lclq/p/5542902.html https://blog.csdn.net/warm77/article/details/78353632 https://blog.csdn.net/xun527/article/details/76180493

  • 常用的相似度计算方法原理及实现
    • https://blog.csdn.net/weixin_38225797/article/details/81021691
    • https://blog.csdn.net/guojingjuan/article/details/50396254
  • https://mp.weixin.qq.com/s/WsUAtZhhaYo5R-oXOubvjg
Juforg wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!