正在学⬇️
清华尹成 和 《python学习手册》
1-590
P1-177
P260-275
P313-322
-
如何执行
-
传统 Py程序 运行顺序
-
*.py 源码
-
*.pyc 字节码
- 非二进制码,但可以提升速度
- 如果py进程有写入权限,执行
python3 *.py
后会在其旁边生成 *.pyc. 否则会在内存中生成,并在程序结束时丢弃 - 第二次运行程序时,如果字节码没有修改,python将会加载.pyc并跳过编译
-
PVM Python虚拟机
-
解释器的最后一步,用来迭代运行字节码,一个接一个地完成操作
-
速度介于传统的编译语言 和传统的解释语言之间
-
-
-
Py语言 的主流实现方式
-
CPython
- 标准的Python实现方式,是由C语言代码编写的
- 多数Linux 和Mac os 上自动安装的是这个
-
Jython
- Jython系统是将 (-> .pyc字节码 ->Py虚拟机) 替换为java等效实现
- 是Python语言的替代实现方式,为了与Java语言集成
- 包含了Java类,java类编译Py源代码,形成Java字节码,
- 字节码映射到Java虚拟机上(JVM)
-
其他
-
-
.py 执行工具
-
Psyco实时编译器
- 一个增强速度工具,不是标准Python的一部分,可能需要单独安装他
- 可以将部分字节码转换成底层二进机器吗,从而提升执行速度2~100倍
-
Shedskin C++转换器
- 一个引擎系统,采用不同方式执行Py代码,比Psyco的执行速度更快,处于实验项目,
- 将Python代码变为C++代码,使用机器上的C++编译器,将C++编译为二进机器代码
-
冻结二进制文件
- 一种让Python程序,生成独立可执行二进代码的方法,
- 就是将字节码,解释器,和所需的Python支持文件,混合在一起生成一个可执行程序
- eg: py2exe( Windows 下使用 ), PyInstaller( Linux及Unix上使用 )
- 好处:封装之后,可以作为一个程序进行发售,终端用户无需安装
-
-
运行程序
-
交互模式
-
开启方法: shell里使用命令
python3
-
关闭方法:
Control+d
-
注意事项:
- 如果python3所在的目录不在shell的PATH环境变量里,需要使用完整路径
/usr/bin/python3
- 数据自动print
- 如果python3所在的目录不在shell的PATH环境变量里,需要使用完整路径
-
➜ ~ where python3 /usr/bin/python3 ➜ ~ /usr/bin/python3 Python 3.7.3 (default, Dec 13 2019, 19:58:14) [Clang 11.0.0 (clang-1100.0.33.17)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> for ch in "abc": ... ch ... 'a' 'b' 'c' >>>
-
-
用命令行运行文件
-
python3 hello.py
执行文件-
好处:可以流定向
-
不好:会弹出另一个窗口
-
-
-
UNIX可执行脚本
-
文件顶端告诉系统Python解释器保存在哪
-
注: 需要程序有执行权限
-
注:不带扩展名
-
➜ ~ chmod a+x p1 p2 ➜ ~ ls -l -rwxrwxrwx@ 1 tianweiye staff 57 Mar 18 20:52 p1 -rwxrwxrwx@ 1 tianweiye staff 60 Mar 18 20:53 p2 ➜ ~
-
-
书写格式
-
1.直接 eg:
#!/usr/bin/python3
-
2.查询 eg:
#!/usr/bin/env python3
env
可以通缩系统的搜索PATH环境变量中的所有目录来找 python3
-
➜ ~ env SHELL=/bin/zsh HOME=/Users/tianweiye LOGNAME=tianweiye USER=tianweiye PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin PWD=/Users/tianweiye OLDPWD=/Users/tianweiye ZSH=/Users/tianweiye/.oh-my-zsh LC_CTYPE=UTF-8 _=/usr/bin/env ➜ ~ where python3 /usr/bin/python3 ➜ ~
-
-
eg:
➜ ~ cat p1 #!/usr/bin/env python3 print("\n p1 was executed \n ") ➜ ~ open p1 ➜ ~ /Users/tianweiye/p1 ; exit; p1 was executed [进程已完成] ➜ ~ cat p2 #!/usr/bin/env python3 print("\n p2.py was executed \n ") ➜ ~ open p2 ➜ ~ /Users/tianweiye/p2 ; exit; p2.py was executed [进程已完成]
-
-
IDE
- eg:PyCharm CE
-
-
.py文件
-
脚本
- python的顶层模版文件叫做脚本
-
模块
-
模块路径:Python会自动到
sys.path
中的路径寻找模块-
sys中会自动通过PYTHONPATH这个环境变量进行初始化目录
-
如果想加载模块,模块的目录必须在PYTHONPATH中列出
-
>>> import sys >>> for path in sys.path: ... path ... '' '/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python37.zip' '/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7' '/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload' '/usr/local/lib/python3.7/site-packages' >>> ➜ ~ ls -1 /usr/local/lib/python3.7/site-packages/ __pycache__ easy_install.py pip pip-20.0.2-py3.7.egg-info pkg_resources setuptools setuptools-46.0.0-py3.7.egg-info sitecustomize.py tk tk-0.1.0.dist-info wheel wheel-0.34.2-py3.7.egg-info yagmail yagmail-0.11.224.dist-info ➜ ~
-
-
构成: 模块就是一个
???.py
文件-
➜ ~ cat mo.py str = 'this
-
-
-
-