简介
作者: “龟叔”Guido van Rossum 时间: 1989年圣诞节期间开发的 特点: “优雅”、“明确”、“简单” 语言类型: 解释型(高级) 优点:
- Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。
- 完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行。
缺点:
- 第一个缺点就是运行速度慢,和C程序相比非常慢,毕竟是解释型语言,运行时要一行行地翻译成cpu能理解的机器码 ,而 C 时编译型的 在运行前直接编译成CPU能执行的机器码,所以非常快。
- 代码不能加密。
使用场景: Python适合开发 网络应用,包括网站、后台服务等等如: 网络爬虫 Web应用开发 系统网络运维 科学与数字计算 图形界面开发 网络编程 自然语言处理(NLP) 人工智能 区块链 其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等; 另外就是把其他语言开发的程序再包装起来,方便使用。
安装
步骤如下:
点击安装后等待即可,最后可以点击 去除window最大路径长度限制
打开命令窗口 输入python 看到一个交互界面 即表示安装成功。 在linux上通过ctrl+D可退出,windows上输入exit()
或者直接关掉命令行窗口 即可退出交互界面
解释器
python是解释型语言,自然需要这个解释器去执行.py
文件 官网默认用 CPython解释器。 其他解释器:
- IPython : IPython只是在交互方式上有所增强 , CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
- PyPy:它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。 PyPy和CPython的不同点
- Jython: 运行在Java平台上,可以直接把Python代码编译成Java字节码执行。
- IronPython: 运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结:
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
基础
- 写法采用缩进格式
- 大小写敏感
- 注释 # 开头
当语句以冒号:结尾时,缩进的语句视为代码块。即if(){}大括号里面的代码要缩进如:
# print absolute value of an integer: a = 100 if a >= 0: print(a) else: print(-a) 复制代码
数据类型和变量
- 整数
- 浮点数(1.23x109就是1.23e9)
- 字符串
- 布尔值 (and、or和not运算)
- 空值 (用None表示)
- list和tuple
tip:
- 变量名必须是大小写英文、数字和_的组合,且不能用数字开头
- 在Python中,通常用全部大写的变量名表示常量
- 变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。 Java是静态语言(int a = 123)
- /除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:
9 / 3
3.0
- 还有一种除法是//,称为地板除,两个整数的除法仍然是整数:
10 // 3
3
字符串
转义
转义字符用\ , r' '
表示' '内部的字符串默认不转义,''' 内容 '''
的格式表示多行内容
字符编码
python3 默认 utf-8 , 通过 ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符ord('A') 65 chr(65) A
字节(bytes)
字符串由字符组成,一个字符由若干个字节组成。
Python对bytes类型的数据用带b前缀的单引号或双引号表示: x = b'ABC'
。
从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:
b'ABC'.decode('ascii') # 输出结果 ABC a= 'hello world' b=a.encode() print(b) # 输出结果 b'hello world' print(chr(b[0])) # 输出结果 h 复制代码
格式化
采用的格式化方式和C语言是一致的,用%实现
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.' 复制代码
len()
获取到字符串的长度,字节的长度
a= 'hello world中国' b=a.encode() print(len(a)) # 13 print(len(b)) # 17 一个中文占三个字节 11+6 复制代码
list和tuple
list
classmates = ['Michael', 'Bob', 'Tracy'] 复制代码
取最后一个元素 可以用 classmates[-1]
倒数第2个 classmates[-2]
- 添加数据
classmates.append('Adam')
['Michael', 'Bob', 'Tracy', 'Adam']
- 插入数据
classmates.insert(1, 'Jack')
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
- 删除末尾数据
classmates.pop()
['Michael', 'Jack', 'Bob', 'Tracy']
- 删除指定位置的元素,用pop(i)
classmates.pop(1)
['Michael', 'Bob', 'Tracy']
- 要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
classmates[1] = 'Sarah'
['Michael', 'Sarah', 'Tracy']
- list里面的元素的数据类型也可以不同, 如
L = ['Apple', 123, True, ['asp', 'php']]
tuple
元组,一旦初始化就不能修改但是如果元组里有list, 是可以改变这个list里面的数值的(应该是存储了这个对象地址,不改变它就可以了。其他类型储存的是数值) 写法用括号表示如下:classmates = ('Michael', 'Bob', 'Tracy')
注意点:
空的tuple,可以写成() 如 t=()
t=(1)
表示数学公式中的小括号t=(1,)
只有1个元素的tuple定义时必须加一个逗号,来消除歧义
a=(1) print(a[-1]) # TypeError: 'int' object is not subscriptable t=(1,) print(t[-1]) 复制代码
条件判断
if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4> # if 简写, 只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False。 (和 js的if判断条件差不多) if x: print('True') 复制代码
循环
for...in循环
names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name) 复制代码
range()函数,可以生成一个整数序列,如 range(5)
生成的序列是从0开始小于5的整数:list(range(5))
输出结果为 [0, 1, 2, 3, 4]
while循环
计算100以内所有奇数之和
sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum) 复制代码
dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} d['Michael'] #输出 95 复制代码
查
- 要避免key不存在的错误,有两种办法,一是通过in判断key是否存在
'Thomas' in d
输出 False
- 是通过dict提供的get()方法,如果key不存在,可以返回 None,或者自己指定的value:
d.get('Thomas') # None d.get('Thomas', -1) #输出 自己指定的value:-1 复制代码
删
要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
>>> d.pop('Bob') 75 >>> d {'Michael': 95, 'Tracy': 85} 复制代码
增
>>> d['Adam'] = 67 >>> d['Adam'] 67 复制代码
改
d={'aa':1,'bb':2} d['Adam'] = 67 print(d) d['Adam'] = 99 print(d) 复制代码
注意:
和list比较,dict有以下几个特点: 查找和插入的速度极快,不会随着key的增加而变慢; 需要占用大量的内存,内存浪费多。
而list相反: 查找和插入的时间随着元素的增加而增加; 占用空间小,浪费内存很少。 所以,dict是用空间来换取时间的一种方法。
dict的key必须是不可变对象。如字符串、整数等,而list是可变的,就不能作为key
通过key计算位置的算法称为哈希算法(Hash)。
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复
这个不管在es6 还是java 中 都是 无序唯一的 这些数据结构(数组,集合,键值对等等)的东西都是相通的。
例子: 要创建一个set,需要提供一个list作为输入集合:
s = set([1, 1, 2, 2, 3, 3]) s.add(4) # 添加元素 s.remove(4) # 删除元素 复制代码
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>> s1 = set([1, 2, 3]) >>> s2 = set([2, 3, 4]) >>> s1 & s2 {2, 3} >>> s1 | s2 {1, 2, 3, 4} 复制代码
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”
s=set([1,2,[1,2,3]]) print(s) # unhashable type: 'list'