跨平台、开源、免费
的解释型高级动态编程语言
。命令式编程、函数式编程
,完全支持面向对象程序设计,拥有大量扩展库
。胶水语言
:可以把多种不同语言编写的程序融合到一起实现无缝拼接,更好地发挥不同语言和工具的优势,满足不同应用领域的需求。举个例子:(两种不同编程方式)
命令式编程:
问题解决:把列表中的所有数字都加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]
不兼容
。全面放弃维护和更新
。(1)缩进
冒号
表示缩进的开始。缩进结束就表示一个代码块结束了
。4个空格
为基本缩进单位。(2)每个import语句只导入一个模块,最好按标准库、扩展库、自定义库
的顺序依次导入。
(3)最好在每个类、函数定义和一段完整的功能代码之后增加一个空行
,在运算符两侧
各增加一个空格
,逗号后面
增加一个空格。
(4)尽量不要写过长的语句。如果语句过长,可以考虑拆分成多个短一些的语句,以保证代码具有较好的可读性
。如果语句确实太长而超过屏幕宽度,最好使用续行符
(line continuation character)“\”
,或者使用圆括号将多行代码括起来表示是一条语句。
(5)虽然Python运算符有明确的优先级,但对于复杂的表达式建议在适当的位置使用括号
使得各种运算的隶属关系和顺序更加明确、清晰。
(6)注释
符号#
开始,表示本行#之后的内容为注释。三引号
’’’…’’'或"""…"""之间且不属于任何语句的内容将被解释器认为是注释。(7)在开发速度和运行速度之间尽量取得最佳平衡
。
内置对象运行速度最快
,标准库对象次之,用C或Fortran编写的扩展库速度也比较快,而纯Python的扩展库往往速度慢一些。优先使用Python内置对象
,其次考虑使用Python标准库提供的对象,最后考虑使用第三方扩展库。(8)根据运算特点选择最合适的数据类型
来提高程序的运行效率。
元组
。集合
。列表和元组的in操作的时间复杂度是线性的,而对于集合和字典却是常数级的
,与问题规模几乎无关。(9)充分利用关系运算符以及逻辑运算符and和or的惰性求值
特点,合理组织条件表达式中多个条件的先后顺序,减少不必要的计算
。
(10)充分利用生成器对象或类似迭代对象的惰性计算特点
,尽量避免将其转换为列表、元组等类型,这样可以减少对内存的占用,降低空间复杂度
。
(11)减少内循环中的无关计算,尽量往外层提取
。
命令提示符环境,建议切换至Python安装目录中的scripts文件夹执行
)在一个环境下安装的扩展库无法在另一个环境下使用,需要分别安装
。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模块的指定版本 |
显式地导入和加载
标准库和第三方扩展库(需正确安装),这样可以减小程序运行的压力
,并且具有很强的可扩展性
。提高系统安全性
。(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