1. Python是这样一种语言
- Python是一门
跨平台、开源、免费
的解释型高级动态编程语言
。 - Python支持
命令式编程、函数式编程
,完全支持面向对象程序设计,拥有大量扩展库
。 胶水语言
:可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同应用领域的需求。
举个例子:(两种不同编程方式)
命令式编程:
问题解决:把列表中的所有数字都加5,得到新列表。(命令式编程)
>>> x = list(range(10)) #创建列表
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> y = [] #空列表
>>> for num in x: #循环,遍历x中的每个元素
y.append(num+5) #列表方法,在尾部追加元素
>>> y
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> [num+5 for num in x] #列表推导式
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
函数式编程
问题解决:把列表中的所有数字都加5,得到新列表。(函数式编程)
>>> x = list(range(10))
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> def add5(num): #定义函数,接收一个数字,加5后返回
return num+5
>>> list(map(add5, x)) #把函数add5映射到x中的每个元素
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> list(map(lambda num: num+5, x)) #lambda表达式,等价于函数add5
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
2. Python版本之争
- Python目前存在2.x和3.x两个系列的版本,互相之间
不兼容
。 - 在选择Python版本的时候,一定要先考虑清楚自己学习Python的目的是什么,打算做哪方面的开发,该领域或方向有哪些扩展库可用,这些扩展库最高支持哪个版本的Python。这些问题全部确定以后,再最终确定选择哪个版本。
- Python 2.x系列最迟将于2020年
全面放弃维护和更新
。
3. Python编程规范与代码优化建议
(1)缩进
- 类定义、函数定义、选择结构、循环结构、with块,行尾的
冒号
表示缩进的开始。 - python程序是依靠代码块的缩进来体现代码之间的逻辑关系的,
缩进结束就表示一个代码块结束了
。 - 同一个级别的代码块的缩进量必须相同。
- 一般而言,以
4个空格
为基本缩进单位。
(2)每个import语句只导入一个模块,最好按标准库、扩展库、自定义库
的顺序依次导入。
(3)最好在每个类、函数定义和一段完整的功能代码之后增加一个空行
,在运算符两侧
各增加一个空格
,逗号后面
增加一个空格。
(4)尽量不要写过长的语句。如果语句过长,可以考虑拆分成多个短一些的语句,以保证代码具有较好的可读性
。如果语句确实太长而超过屏幕宽度,最好使用续行符
(line continuation character)“\”
,或者使用圆括号将多行代码括起来表示是一条语句。
(5)虽然Python运算符有明确的优先级,但对于复杂的表达式建议在适当的位置使用括号
使得各种运算的隶属关系和顺序更加明确、清晰。
(6)注释
- 以
符号#
开始,表示本行#之后的内容为注释。 - 包含在一对
三引号
’’’…’’'或"""…"""之间且不属于任何语句的内容将被解释器认为是注释。
(7)在开发速度和运行速度之间尽量取得最佳平衡
。
内置对象运行速度最快
,标准库对象次之,用C或Fortran编写的扩展库速度也比较快,而纯Python的扩展库往往速度慢一些。- 在开发项目时,应
优先使用Python内置对象
,其次考虑使用Python标准库提供的对象,最后考虑使用第三方扩展库。
(8)根据运算特点选择最合适的数据类型
来提高程序的运行效率。
- 如果定义一些数据只是用来频繁遍历并且关心顺序,最好优先考虑
元组
。 - 如果需要频繁地测试一个元素是否存在于一个序列中并且不关心其顺序,尽量采用
集合
。 列表和元组的in操作的时间复杂度是线性的,而对于集合和字典却是常数级的
,与问题规模几乎无关。
(9)充分利用关系运算符以及逻辑运算符and和or的惰性求值
特点,合理组织条件表达式中多个条件的先后顺序,减少不必要的计算
。
(10)充分利用生成器对象或类似迭代对象的惰性计算特点
,尽量避免将其转换为列表、元组等类型,这样可以减少对内存的占用,降低空间复杂度
。
(11)减少内循环中的无关计算,尽量往外层提取
。
4. Anaconda3开发环境的安装与使用
- 默认编程环境:IDLE
- 其他常用开发环境:
- Eclipse+PyDev
- pyCharm
- wingIDE
- Eric
- PythonWin
- Anaconda3(内含Jupyter和Spyder):https://www.anaconda.com/download
- zwPython
5. 安装扩展库的几种方法
- pip在线安装(
命令提示符环境,建议切换至Python安装目录中的scripts文件夹执行
) - pip离线安装:https://www.lfd.uci.edu/~gohlke/pythonlibs/
- exe安装,不是每个扩展库都支持
- 如果机器上安装了多个Python开发环境,那么
在一个环境下安装的扩展库无法在另一个环境下使用,需要分别安装
。
pip命令示例 | 说明 |
---|---|
pip download SomePackage[==version] | 下载扩展库的指定版本,不安装 |
pip freeze [> requirements.txt] | 以requirements的格式列出已安装模块 |
pip list | 列出当前已安装的所有模块 |
pip install SomePackage[==version] | 在线安装SomePackage模块的指定版本 |
pip install SomePackage.whl | 通过whl文件离线安装扩展库 |
pip install package1 package2 … | 依次(在线)安装package1、package2等扩展模块 |
pip install -r requirements.txt | 安装requirements.txt文件中指定的扩展库 |
pip install --upgrade SomePackage | 升级SomePackage模块 |
pip uninstall SomePackage[==version] | 卸载SomePackage模块的指定版本 |
6.标准库与扩展库对象的导入与使用
- Python默认安装仅包含基本或核心模块,启动时也仅加载了基本模块,在需要时再
显式地导入和加载
标准库和第三方扩展库(需正确安装),这样可以减小程序运行的压力
,并且具有很强的可扩展性
。 - 从“木桶原理”的角度来看,这样的设计与安全配置时遵循的“最小权限”原则的思想是一致的,也有助于
提高系统安全性
。
(1)import 模块名 [as 别名]
>>> import math #导入标准库math
>>> math.sin(0.5) #求0.5(单位是弧度)的正弦
0.479425538604203
>>> import random #导入标准库random
>>> n = random.random() #获得[0,1) 内的随机小数
>>> n = random.randint(1,100) #获得[1,100]区间上的随机整数
>>> n = random.randrange(1, 100) #返回[1, 100)区间中的随机整数
>>> import os.path as path #导入标准库os.path,并设置别名为path
>>> path.isfile(r'C:\windows\notepad.exe')
True
>>> import numpy as np #导入扩展库numpy,并设置别名为np
>>> a = np.array((1,2,3,4)) #通过模块的别名来访问其中的对象
>>> a
array([1, 2, 3, 4])
>>> print(a)
[1 2 3 4]
(2)from 模块名 import 对象名[ as 别名]
>>> from math import sin #只导入模块中的指定对象,访问速度略快
>>> sin(3)
0.1411200080598672
>>> from math import sin as f #给导入的对象起个别名
>>> f(3)
0.1411200080598672
>>> from os.path import isfile
>>> isfile(r'C:\windows\notepad.exe')
True
(3) from 模块名 import
>>> from math import * #导入标准库math中所有对象
>>> sin(3) #求正弦值
0.1411200080598672
>>> gcd(36, 18) #最大公约数
18
>>> pi #常数π
3.141592653589793
>>> e #常数e
2.718281828459045
>>> log2(8) #计算以2为底的对数值
3.0
>>> log10(100) #计算以10为底的对数值
2.0
>>> radians(180) #把角度转换为弧度
3.141592653589793