Python学习

84 阅读5分钟

Anaconda

  • 推荐使用。集成了数据分析、科学计算相关的几乎所有常用安装包;比如Numpy, Scipy, Matplotlib, sklearn等

  • 镜像

    # http://pypi.douban.com/simple/ 豆瓣
    # http://mirrors.aliyun.com/pypi/simple/ 阿里
    # http://pypi.hustunique.com/simple/ 华中理工大学
    # http://pypi.sdutlinux.org/simple/ 山东理工大学
    # http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
    # https://pypi.tuna.tsinghua.edu.cn/simple 清华
    # 命令如下  pip install -i 镜像网站 包名 让linux系统信任的命令--trusted-host
    pip install -i http://pypi.douban.com/simple/ flask --trusted-host=pypi.douban.com
    
  •  pip install//安装
     pip uninstall//卸载
     pip freeze > require.txt//将所有安装的包以及版本号输出到require.txt中
    
  • 典型的模块文件样式

    #!/usr/bin/python
    # encoding: utf-8 | #-*-coding:utf8-*- | #coding:utf8
    # 三种方式选一种即可
    

变量和数据类型

  • python语言是弱类型,使用之前不需要声明类型
  • 定义    变量名 = 值
  • 变量名字区分大小写
  • 命名规则,以字母或下划线开头,可以同时定义多个变量并赋值

数字类型

  • 整型、长整型
  • 浮点
  • 复数

布尔类型

  • true、false
  • 空的列表、None的布尔值都是false
  • 字符串
  • None

运算符

数字运算符

  • +、-、*、/
  • 除法取余 :%
  • 除法取整 ://
  • 乘方:** (如果是3次方  **3)
  • 不支持:++/--
  • 支持:+=/-=
  • 比较操作符:>、<、>=、<=、!=、==

逻辑运算符

  • and
  • or
  • not
  • 不支持 ||、&&

代码块和缩进

  • Python用缩进表示代码块,等价其他语言的大括号
  • 缩进是强制检查,整个代码缩进必须一致,否则无法运行
  • 用4个空格或者Tab进行缩进
  • IDE自动保证缩进的一致

内置数据结构

  • 列表
  • 元组
  • 字典
  • 集合

列表的使用

  • 列表能够保存不同数据类型的元素,因为他存储的是指向元素的指针
  • 用[]或list()声明一个列表变量
  • 用下标访问元素
  • 下标从0开始
  • 列表长度可以动态扩展
  • 下标从0开始,可以是负数
  • 切片操作  [begin:end:step]
  • 切片是左闭右开的半开区间,不包含右边界

元祖

  • 类似于列表
  • 元组内容不能修改
  • 长度不能动态修改
  • 用()定义一个元组

字典

  • 键值对集合(key->value)
  • 定义方式:{key1:value,key2:value}
  • 用[key]访问元素
  • 可以用 key in dict方式判断字典中是否有key
  •  key必须是不可变的对象(hash),对value没有要求

集合

  •  用set()创建集合对象
  •  集合中的元素不重复
  •  支持数学集合操作
  •  集合是无序的
  •  集合里的元素是不可变的(能够hash的)
  •  不支持索引和切片操作

集合运算

  •  s|t :并集
  •  s&t :交集
  •  s-t:差集
  •  s^t:对称差集
  •  s|=t :把t的元素并入s
  •  s<t:s是否为t的子集
  •  s>t:s是否为t的超集
  •  s.isdisjoint(t):s和t是否有交集

语法结构

  • 顺序执行
  •  条件执行
  •  循环执行

条件语句

  •  if
  •  if…else
  •  if…elif…else
  •  没有switch、case语法
  •  空的列表、元组、字符串都被评估为False
  •  None被评估为False

循环语句

  • while 当条件表达式为False时停止循环
  • for 遍历一个序列中所有的元素;for item in collection

break和continue

  •  break:跳出整个循环
  •  continue:停止本次迭代,继续下一轮迭代
  •  正常退出循环:continue
  •  非正常退出循环:break
  •  while和for都支持一个else分支,正常终止的循环,会执行else 分支中的代码

遍历列表中的每个元素

result = []
for value in collection:
    if condition:
        result.append(expression)

解析推导式

列表解析式

  • 根据一个列表生成一个新的列表
  • 列表解析比for循环遍历好,代码紧凑
  • [expr for iter in iterable [if condition]]

例子

  • 一个字符串列表,要求过滤掉长度小于3的字符串,并将剩下的 转换成大写样式
names = ['bak','Tom','alice','Jerry','wendy','Smith']
s = [name.upper() for name in names if len(name) > 3]
print(s)

生成器表达式

  •  (expr for iter in iterable [if condition ] )
  •  生成器是迭代的生成结果,而不是立刻对表达式求值
  •  得到的是个生成器对象,而不是列表
  •  不能用索引、append等列表操作
  •  可以用list()工厂函数转换为列表对象
  •  不占用内存空间

函数

  •  关键字:def
  •  参数 分为 位置参数 和 关键字参数,我们可以将参数列表(p1,p2)里面的p1和p2在调用的时候指定,p1=33,p2=43
  •  函数体
  •  返回值
  •  第二种方式:lambda表达式

函数类型

  •  参数没有类型,Python不做类型检查
  •  没有重载,Python不会区分参数名字和个数
  •  多个同名函数时,后一个会覆盖前一个
  •  位置参数和关键字参数(函数调用时)
  •  参数传递的是“引用”,函数内部的修改会影响外部

函数参数

  • 任意数量的参数:* 、**
  • def fun(*args,**kwargs)
  • *args用于收集位置参数,形成一个列表
  • *kwargs用于收集位置参数,形成一个字典

函数的返回值

  • 函数可以有多个返回值
  • 可以用一个对象接收返回值
  • 也可以用多个变量接收

迭代器

  • 可迭代对象 :Iterable
  • 如果一个对象可以用 for … in …的方式遍历其内容,这个对 象就是一个可迭代对象。
  •  yield语法,不使用return,使用yield就变成了迭代函数
def myopen(filenmae):
    f = open (filenmae)
    for line in f:
        result = line
        yield result
    f.close()
logs = myopen('hello.py')
for line in logs:
    print(line)

 

函数式编程

  •  函数是一类对象
  •  函数可以有属性
  •  文档属性:定义函数的第一个没有赋值的字符串,可以通过 __doc__访问
  •  lambda表达式

OOP

  • 面向过程、面向对象、面向函数三种编程范式
  • 面向过程:C
  • 面向对象:C++、Java、Python
  • 面向函数:Scala、Clojure、Python
  • 面向对象的思想,就是用类和对象对现实世界进行抽象
  • 类:是对事物的抽象,比如狗、羊
  • 对象:是类的一个实例,比如旺财、喜羊羊
  • 用class关键字定义类
  • 类有变量和函数组成
  • 变量:又称为属性、成员属性,是对数据的封装
  • 函数:又称为方法、成员方法,是对行为的封装
  • 方法:self做第一个参数,被绑定到对象本身,self指向对象本身的指针
  • 也分为公有方法和私有方法,私有方法也是以__开头
  • 特殊方法: __init__、__str__、__cmp__等等

继承和重用

注意事项

  • range:占据内存
  • xrange:不占内存
  • 使用from xxx文件 import xxx函数
  • xxx文件添加if __name__ == '__main__'则引用他的包,不会输出被引用的主函数的内容
  • with替代使用open,最后不需要使用f.close函数关闭文件,避免了异常处理
with open('xxx.txt') as f:
    for line in f:
        pass