Python 入坑指北

Python 入坑指北

1. 几个问题

  1. 使用Python2 还是Python3?
  2. 为什么安装Python package的时候出现各种莫名其妙的错误?
  3. 怎么增加一个第三方的package,很多包还有多级的依赖关系,如何更好解决?

2. 环境相关

2.1 Anaconda

什么是Anaconda,有什么优点?

  • Anaconda 是python的一个发行版,包含了conda、python和大量的数据科学相关的库,官方网站的主标题是:The Most Popular Python Data Science Platform;

  • 其中Conda是一个管理工具,可以管理多种语言的包、依赖和环境;包含Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN;如果开发中需要同时使用Python2和Python3,Conda可以轻松帮你搞定不同版本之间的环境切换,也可轻松管理不同版本的包,这下安装包的时候就so easy,再也不会出现特别多的莫名其妙的错误了;

  • Anaconda包含了Conda、Python和大量的数据科学相关的库,如果不需要那么多库,也可以选择Miniconda进行安装;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 安装一个package
    conda install pkg_name
    # 同时安装多个package
    conda install numpy scipy pandas
    # 安装指定版本的package
    conda install numpy=1.10
    # 移除一个package
    conda remove pkg_name
    # 升级
    conda update
    # 查看所有package
    conda list
  • 下面再看下用conda管理不同的python版本环境;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 创建一个python2.7版本的环境并安装pandas包
    conda create -n py2 python=2.7 pandas
    # 执行后你会发现,conda自动帮你把所有pandas依赖的包都装好了

    # 进入py2环境(windows使用 activate py2)
    source activate py2
    # 退出当前环境(windows使用 deactivate)
    source deactivate
    # 删除环境
    conda env remove -n py2
    # 列出所有创建的环境
    conda env list
    # 如果分享python代码需要分享同样的开发环境的时候,可以讲当前环境导出
    conda env export > environment.yaml
    # 从YAML文件创建环境
    conda env create -f environment.yaml

环境相关的内容就到此,有了Anaconda,基本就不用再操心所谓的版本冲突问题,包安装问题,集成好的管理环境,也就不再需要烦恼环境问题,把精力耗费在写代码吧。

2.2 IPython

IPython是一种基于Python的交互式解释器;相较于原生的Python Shell,IPython提供了更为强大的编辑和交互功能。拥有诸多优点:

  1. 帮助信息完善,且支持模糊匹配(print?, print??, np.*load*?);对象后面添加问号,一样能列出相关信息(称为对象的内省);
  2. 支持TAB补全代码,使用历史输入(%history/%hist/hist命令)
  3. %run运行外部python脚本,%load加载外部python脚本,%paste运行剪贴板内容;
  4. 支持shell的终端快捷键;
  5. magic command(%timeit, %debug?, %pwd, etc…);
  6. %matplotlib inline 可视化图内置显示;

2.3 Jupyter Notebook

Jupyter Notebook (此前被称为 IPython notebook)是个开源的Web应用,可以创建和分享包含代码、方程式、可视化界面和文本的文档,拥有以下优点:

  1. 可选择的语言:支持运行40 多种编程语言,包含Python、R、Julia、Scala等;
  2. 分享文档:可通过邮件、Dropbox、Github、Jupyter Notebook Viewer分享创建的文档;
  3. 交互式输出:代码可以生成丰富且带交互式的输出结果,包括HTML、图片、视频、LaTeX还有自定义的MIME格式;
  4. 大数据集成:通过Python、R或者Scala,使用例如Apache Spark等大数据工具,使用pandas、scikit-learn、 ggplot2、TensorFlow等对同一份数据进行处理;

Jupyter Notebook 还有很多可以探寻的功能,比如可以远程访问等,具体操作慢慢探索。

  • jupyter notebook —no-browser 启动时不自动启动浏览器
  • jupyter notebook —generate-config 生成配置,修改访问IP,增加密码登录等

3. Python语言基础

  1. 缩进分割(4个空格),不像C++、Java使用分号分割每一个执行语句

  2. 没有括号,循环及控制语句使用冒号(:)

  3. 不建议赋值语句写在同一行,例如a = 5; b = 6; c = 7

  4. 一切皆对象

  5. 注释:使用#开头

  6. 动态数据类型,a=5,在不用重新声明的情况下,a=’foo’也是对的

  7. 强类型,a=5;b=’5’; a+b就会报错,在弱类型语言中(php,js,perl)会进行隐式转换

  8. 可变和不可变对象

    • 可变对象
      • lists
      • dicts
      • NumPy arrays
    • 不可变对象
      • string
      • tuples
  9. 标量/原子类型

    • None
    • str
      • ‘hello’
      • “world”
      • 多行使用’’’或者”””
    • bytes
      • Bytes
      • Unicode
    • float 除法:3/2=1.5, 3//2=1
    • bool
      • True
      • False
    • int
    • 类型转换
  10. Dates and times

  11. 控制流

    • if, elif, and else
    • for loops
      • for value in collection:
      • for a,b,c in iterator:
    • while loops
    • pass
    • range
  12. 三元表达式(Ternary expressions)

    • value = true-expr if condition else false-expr
  13. 内置函数

    • __builtin__
    • 查看所有内置函数 dir(__builtin__)
    • 查看某个类的内置方法
      • dir(list)
      • dir(tuple)

4. 思维导图

以上内容整理简介的思维导图,以供后续复习:

img