我的Python学习之路01-附练习题

Anaconda Jupyter Lab环境配置,安装及使用

简单介绍

官网:https://www.anaconda.com/
简单来说,Anaconda是包管理器和环境管理器,Jupyter notebook 可以将数据分析的代码、图像和文档全部组合到一个web文档中,事实上Anaconda 和 Jupyter notebook已成为数据分析的标准环境。
参考文章:初学 Python 者自学 Anaconda 的正确姿势是什么?
怎么在mac 系统上使用Python?怎么安装Anaconda?

正常安装及启动

Google免费Notebook CoLab

https://colab.research.google.com/notebooks/welcome.ipynb#scrollTo=-Rh3-Vt9Nev9

https://research.google.com/colaboratory/faq.html

Jupyter 和 Colaboratory 有什么区别?
Jupyter 是一个开放源代码项目,而 Colaboratory 是在 Jupyter 基础之上开发的。通过 Colaboratory,您可以使用 Jupyter 笔记本并与他人共享,完全不需要在您自己的计算机上下载、安装或运行任何内容,只要有浏览器就可以使用。

Docker方式安装及启动

  • 安装Docker
  • 拉取镜像:docker pull jupyter/datascience-notebook
  • 启动容器 docker run -p 8888:8888 jupyter/datascience-notebook

其它Python IDE

VSCODE,SPYDER,PYCHARME

Notebook的更多使用 More…

Latex in markdown cell

LaTex符号大全
LaTeX实现的原理类似于HTML,Notebook中的Markdown格式解释器中内置Latex渲染器,可以将由$与$包裹的内容进行渲染并产生最终效果。例如:

∫ a b f ( x ) d x \int_a^bf(x)dx abf(x)dx

希腊字母
希腊字母小写/大写LaTeX形式希腊字母小写/大写LaTeX形式
α A\alpha Aμ N\mu N
β B\beta Bξ Ξ\xi \Xi
γ Γ\gamma \Gammao Oo O
δ Δ\delta \ Deltaπ Π\pi \Pi
ϵ ε E\epsilon \varepsilon Eρ ϱ P\rho \varrho P
ζ Z\zeta Zσ Σ\sigma \Sigma
η H\eta Hτ T\tau T
θ ϑ Θ\theta \vartheta \Thetaυ Υ\upsilon \Upsilon
ι I\iota Iϕ φ Φ\phi \varphi \Phi
κ K\kappa Kχ X\chi X
λ Λ\lambda \Lambdaψ Ψ\psi \Psi
不同字体
mathbb:$\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}$   
mathscr:$\mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}$   
mathcal:$\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}$   
mathbf:$\mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz}$

输出结果为

mathbb: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z , a b c d e f g h i j k l m n o p q r s t u v w x y z \mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz} ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz
mathscr: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z , a b c d e f g h i j k l m n o p q r s t u v w x y z \mathscr{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz} ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz
mathcal: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z , a b c d e f g h i j k l m n o p q r s t u v w x y z \mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz} ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz
mathbf: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z , a b c d e f g h i j k l m n o p q r s t u v w x y z \mathbf{ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz} ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz

取消默认斜体

默认倾斜:$x_{z}$ x z x_{z} xz
取消默认倾斜$\rm x_{z}$ x z \rm x_{z} xz

特殊符号

$\bigcap_{i=1}^{n} \bigcup_{i=1}^n \binom{5}{3}$ ⋂ i = 1 n ⋃ i = 1 n ( 5 3 ) \bigcap_{i=1}^{n} \bigcup_{i=1}^n \binom{5}{3} i=1ni=1n(35)
$\forall$ ∀ \forall :全称量词,表示任意的
$\exists$ ∃ \exists :存在量词,表示存在/至少一个
$\partial$ ∂ \partial :偏导符号
$\propto$ ∝ \propto :正比符号
$\mathop{\lim}_{n \to \infty }f(x)$ lim ⁡ n → ∞ f ( x ) \mathop{\lim}_{n \to \infty }f(x) limnf(x):无穷符号及极限

简单公式

$y=x^2$ y = x 2 y=x^2 y=x2

$e^{i\pi} + 1 = 0$ e i π + 1 = 0 e^{i\pi} + 1 = 0 eiπ+1=0

$e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i$ e x = ∑ i = 0 ∞ 1 i ! x i e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i ex=i=0i!1xi

独占一行:$$\frac{n!}{k!(n-k)!} = {n \choose k}$$
n ! k ! ( n − k ) ! = ( n k ) \frac{n!}{k!(n-k)!} = {n \choose k} k!(nk)!n!=(kn)

矩阵
$A_{m,n} =
 \begin{pmatrix}
  a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\
  a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\
  \vdots  & \vdots  & \ddots & \vdots  \\
  a_{m,1} & a_{m,2} & \cdots & a_{m,n}
 \end{pmatrix}$

输出结果为

A m , n = ( a 1 , 1 a 1 , 2 ⋯ a 1 , n a 2 , 1 a 2 , 2 ⋯ a 2 , n ⋮ ⋮ ⋱ ⋮ a m , 1 a m , 2 ⋯ a m , n ) A_{m,n} = \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \cdots & a_{m,n} \end{pmatrix} Am,n=a1,1a2,1am,1a1,2a2,2am,2a1,na2,nam,n

Notebook中的Magic开关

  • 为实现一些快捷操作,提升效率。Notebook中提供了Magic开关,能极大得优化我们使用Notebook的体验。
  • Magic 开关分为两大类:%line magic & %%cell magic
Magic开关总览
%lsmagic
%quickref
Line Magic
%config ZMQInteractiveShell.ast_node_interactivity='all'
%whos
%reset
Cell Magic
%%timeit 50
for item in range(100):
    a=item
    del a
%%time 
for item in range(100000):
    a=item
    del a
%%SVG
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 450 400" width="500" height="200">
  <rect x="80" y="60" width="250" height="250" rx="20" style="fill:red; stroke:black; fill-opacity:0.7" />
  <rect x="280" y="110" width="250" height="250" rx="40" style="fill:blue; stroke:black; fill-opacity:0.5;" />
</svg>
%%javascript

alert("hey");
%%html
<table>
<tr>
<th>Header 1</th>
<th>Header 2</th>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
<marquee style='width: 30%; color: blue;'><b>Hey There!!!</b></marquee>
%%system
dir
!dir
%matplotlib inline
import numpy as np
from matplotlib import pyplot as plt

ys = 200 + np.random.randn(100)
x = [x for x in range(len(ys))]

plt.plot(x, ys, '-')
plt.fill_between(x, ys, 195, where=(ys > 195), facecolor='g', alpha=0.6)

plt.title("Fills and Alpha Example")
plt.show()
%matplotlib

Jupyter notebook扩展

Jupyter notebook功能扩展Nbextensions

python -m pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user --skip-running-check

添加对R语言的支持

在安装完R后,进行conda install -c r r-essentials,再新建notebook测试

添加对Julia语言的支持

先安装Julia,运行Julia,using Pkg;Pkg.add('IJulia');using IJulia;notebook()即可

添加对C的支持

conda install -c QuantStack -c conda-forge xeus-cling ,Try it Online

%%writefile a.py

for item in range(10):
    print(item)

Python简介,解释执行,运行方式

安装Python

官网:https://docs.python.org/3/download.html
教程:https://www.runoob.com/python3/python3-tutorial.html

Python简介

Python源码目录结构

  • Include: 这个目录包括了 Python 的所有头文件。
  • Lib:这里是 Python 标准库,都是用 Python 实现的。
  • Modules:用 C 语言编写的模块,比如 cStringIO / tkinter 高性能实现
  • Objects:Python 内建对象,如 int / list 的实现
  • Parser:Python 解释器的 Scanner 和 Parser
  • Python:Python 解释器的 Compiler 和执行引擎,运行核心

Python解释与运行

Python解释器interpreter

运行在系统线程上的C语言函数+超大循环。每个字节码指令均对应一个完全由C实现的逻辑。

Python解释器在执行过程

先对文件中的Python源代码进行编译,编译的主要结果是产生的一组Python的字节码(byte code),pyc文件是字节码在磁盘上的表现形式,是进行import module时对py文件进行编译的文件结果(如果之前编译过,且源文件又没有变化,则直接运行该pyc文件),而编译结果就是Python中的PyCodeObject对象,然后PyCodeObject对象交给Python虚拟机(Virtual Machine),由虚拟机按照顺序一条一条地执行字节码,从而完成对Python程序的执行动作。

python: .py -->(编译器)–>.pyc–>解释器(虚拟机)–>返回结果

在编译好的Python环境中,编译器和解释器都被封装进了python36.dll中,由python.exe调用

延伸阅读:Python解释器

默认用到的都是用C语言实现的对Python的解释器CPython。也有用Python实现的python解释器PyPy,.Net实现的IronPython

  • CPython解释器中的两个栈:
    1. 执行栈Evaluation Stack:存储指令操作数
    2. 块栈Block Stack:存储循环,异常等信息

字码基于栈式虚拟机,没有寄存器概念,转译简单,没有另类优化。不能被CPU执行,每条字节码对应C实现的机器指令。
Python 实现了栈式虚拟机 (Stack-Based VM) 架构,通过与机器⽆关的字节码来实现跨平台执⾏能⼒。
这种字节码指令集没有寄存器,完全以栈 (抽象层⾯) 进⾏指令运算。

Python的两种运行方式

1.解释式运行:如PyCharme,或命令行下python pyname.py
  • 下方新建py文件
%%writefile test.py
import sys
print('the file run name ',sys.argv[0],'The time that file should run:',sys.argv[1])
for i in range(int(sys.argv[1])):
    print(i,'times run')
!python test.py 2
2.交互式运行
  • 命令行Python,bpython,ipython,notebook
延伸阅读 PyCodeObject <module>

对Python编译器来说,PyCodeObject对象是其真正的编译结果,而pyc文件只是对象持久化表现形式
Python程序的字节码在运行时以PyStringObject的形式保存在PyCodeObject的co_code域里。co_code域只含有指令而不包含别的程序数据;变量名、常量等数据均放在别的域里。

#内置函数compile可以编译Python代码
#source_code为py源文件内容
source_code=\
'''
#this is documents
base_string='cccc.com'

def test1(a,b):
 return a+b

def test2(c):
 x=7
 print(c**2+x)
'''
co=compile(source_code,'test_compile8.py','exec')
exec(co)#类似于import test_compile.py,即执行了这个文件到当前会话

test1(2,6),test2(7)#可以看到test1,test2名称已经导入当前名字空间

type(co)#code code类对象
co#<code object <module> at 0x000001FC85732300, file "test_compile.py", line 3> 该对象的一些信息


co.co_names#返回这个PyCodeobject对象内符号名集合,('base_string', 'test1', 'test2')
co.co_consts#返回这个PyCodeobject对象内常量集合
co.co_code
#co_code是指令序列,是一串二进制流,co_code只含有指令而不包含其它数据,如变量名、常量,数据放在别的区域里。
#opcode-“字节码”:指令以字节为单位,最多表示256个不同的字节码指令。

dir(co)#co.__dir__() 更多PyCodeObject对象查看
co?
##也可以直接从文件读源码,然后用compile编译为PyCodeObject
src=open('test.py').read()
co1=compile(src,'test.py','exec')
co1
dir(co1)
co1.co_filename
co1.co_filename
#对co_code的翻译:opcode-“字节码”:指令以字节为单位,最多表示256个不同的字节码指令。

import opcode
print(opcode.opmap)
# dir(opcode)

#更好的翻译Disassembler
延伸阅读:使用Disassembler反汇编模块
  • 文档: https://docs.python.org/3/library/dis.html
  • Disassembler格式及解读
  • 第一列表示以下几个指令在py文件中的行号;
  • 第二列是该指令在指令序列co_code里的偏移量;
  • 第三列是指令opcode的名称,分为有操作数和无操作数两种,opcode在指令序列中是一个字节的整数;
  • 第四列是操作数oparg,在指令序列中占两个字节,基本都是co_consts或者co_names的下标;
  • 第五列带括号的是操作数说明。
opcodeopargopcodeopcodeoparg
1 byte2 bytes1 byte1 byte2 bytes
import dis
dis.dis(co)#反汇编module test_compile
# dis.dis(test1),dis.dis(test2)#反汇编module test_compile下的函数

Python内置及三方库的管理及使用

模块Module与包Package

  • 模块:一个模块就是一个Python源码文件(也可能是对c语言文件编译生成的pyd文件)
  • 包:组织一堆相关功能的模块,并包含__init__.py文件的目录。

模块的导入

一个模块本质上是一个py文件

%%writefile m.py
a=123
_b='str'#
def m_fun():
    return globals()
%whos
import m
m.__name__
__name__
#修改源码后不升效?试下reload
import m
from imp import reload

reload(m)
m.a
#一个进程只对应一个模块的实例,无论被导入多少次,每个模块在整个解释器进程仅有一个实例存在。
#在不同的命令行窗口,不同的notebook是不同的解释器进程
for i in range(5):
    import os
    print(id(os))
#reload也是一样
for i in range(5):
    import os
    print(id(reload(os)))
模块名为__main__???
__name__

正常情况下模块名__name__为对应的文件名,但当模块作为程序入口时,name__被修改名__main
因此使用if name=’main’:实现自适应。

if __name__=='__main__':
    dosomething
扩展阅读:使用type函数自定义模块(非从文件中导入)
import types
mm=types.ModuleType('MyModule')
type(mm),type(__builtins__)
mm.name='f'
mm.__name__
扩展阅读:模块与名字空间

每个模块都有一个全局名字空间。

如果直接在模块级别执行,那么当前名字空间和全局名字空间相同
globals()固定指向模块的名字空间

locals() is globals() #每个模块都有一个全局名字空间。如果直接在模块级别执行,那么当前名字空间和全局名字空间相同。
True
import m
globals() is m.m2_fun() #globals()固定指向模块的名字空间
False

包的导入 import 的使用

import this#Python之禅

Python内置包

import sys
list(sys.modules.keys())
import requests
r=requests.get('http://www.google.com')
html_code=r.text
import os
os.system('mkdir os_test')
使用浏览器查看内置包

cmd命令行下运行,python -m pydoc -p 1234

三方包的管理
!pip list #列出所有的package
批量安装Package

创建requirements.txt文件,将所需安装的包的名字都分行放在里

pip install -r ./requirements.txt

如何高效得使用帮助

str1='cccc.com'
str1.rjust?
help(exec)
?exec

延伸阅读: PEP- Python增强建议书

PEP是Python Enhancement Proposals的缩写。一个PEP是一份为Python社区提供各种增强功能的技术规格,也是提交新特性,以便让社区指出问题,精确化技术文档的提案。

https://www.python.org/dev/peps/
https://www.python.org/dev/peps/pep-3104/
https://blog.csdn.net/ratsniper/article/details/78954852

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值