Python笔记
解释型的语言,则必须把源码发布出去
代码少的代价是运行速度慢
C语言适合开发那些追求运行速度、充分发挥硬件性能的程序
解释器或者编译器就是负责把符合语法的程序代码转化为CPU能够与执行的机器码,然后执行。
变量本身类型不确定的语言变量是`动态语言`,静态语言在定义变量时必须制定变量类型
一、介绍
Python之父Guido van Rossum(荷兰)龟叔
代码少的代价是运行速度慢
C语言适合开发那些追求运行速度、充分发挥硬件性能的程序,而Python是用来编写应用程序的高级编程语言。
Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池";除了内置的库外,Python还有大量的第三方库
- 应用:
首选是网络应用,包括网站、后台服务等等;
其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;
另外就是把其他语言开发的程序再包装起来,方便使用。
- 缺点:
第一个缺点就是运行速度慢。Python是解释型语言,代码在执行时会一行一行地翻译成CPU能理解的机器码。
第二个缺点就是代码不能加密。解释型的语言,则必须把源码发布出去。
退出python交互模式:exit()
或者ctrl+z
Python交互模式的代码是输入一行,执行一行,而命令行模式下直接运行.py
文件是一次性执行该文件内的所有代码
二、简单的数据类型和变量
1. 基本语法
1.在Python中严格区分大小写
2.Python中的每一行就是一条语句,每条语句以换行结束
3.Python中每一行语句不要过长(规范中建议每行不要超过80个字符)
4.一条语句可以分多行编写,多行编写时语句后边以\结尾
5.Python是缩进严格的语言,所以在Python中不要随便写缩进
6.在Python中使用#来表示注释,#后的内容都属于注释,注释的内容将会被解释器所忽略
我们可以通过注释来对程序进行解释说明,一定要养成良好的编写注释的习惯
注释要求简单明了,一般习惯上#后边会跟着一个空格
2. 编码问题
Unicode将所有语言都统一到一套编码里
ASCII码是一个字节,Unicode编码通常是两个字节
把Unicode编码转化为“可变长编码”的UTF-8编码,常用英文字母是一个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
ASCII编码可以看成UTF-8编码的一部分
计算机内存中,统一使用Unicode编码,在需要保存到硬盘或者传输的时候,就转化为UTF-8编码
ASCII码的范围是:0-255或-128-+127
纯英文的str
可以用ASCII
编码为bytes
,,中文的str
可以用UTF-8
编码为bytes
中文的编码超过了ASCII的编码范围,好像是句废话
3.变量命名
- 标识符中可以含有字母、数字、_,但是不能使用数字开头
- 标识符不能是Python中的关键字和保留字,不使用Python中的函数名作为标识符
- 命名规范:
-
在Python中注意遵循两种命名规范:
-
下划线命名法
所有字母小写,单词之间使用_分割
-
帕斯卡命名法(大驼峰命名法)
首字母大写,每个单词开头字母大写,其余字母小写
-
4. 注释
- 以
#
号开头,注释掉一行代码 - 以
"""
或者'''
三对引号,注释掉多行代码 - 中文注释
#coding = utf-8
python区分大小写,使用缩进来组织代码块(4个缩进)
Python的基本数据类型:数字、字符串、列表、字典、元组
5. 简单数据类型和变量
1、数值:
-
整数
Python的整数没有大小限制
如果数字的长度过大,可以使用下划线作为分隔符
-
浮点数(用e表示10,如:1.23e9)
Python中所有的小数都是float类型,没有大小限制,但超出一定范围就直接表示为
inf
(无限大) -
复数
2、字符串(在Python 3中,是以Unicode编码的)
-
以单引号或者双引号括起来的内容
-
ord()
函数:获取字符的整数表示 -
chr()
函数:把编码转换成对应的字符 -
转义字符\,python内部允许使用
r''
表示''
内的字符串默认不转义 -
允许用
'''...'''
的格式表示多行内容 -
输出格式化字符串
-
与c语言相同,用%引导
例:
print('Hi,%s have %d' %('you',1000))
%s会把任意数据类型转化为字符串
%%
表示一个% -
format()
函数它会用传入的参数依次替换字符串内的占位符
{0}
、{1}
……需要从0开始例:
print('{0} and {1}'.format(12,21))
-
3、布尔值(ture
和false
)
布尔值可以用and
(与运算)or
(或运算) not
(非运算) 运算
4、空值
空值用None表示
5、变量
变量名必须是数字、英文和下划_
线的组合,不能用数字开头
6、常量
通常用大写的变量名表示常量(实际仍是变量)
7、bytes
如果需要在网络上传输,或者保存到磁盘上,就需要把str
转换为以字节为单位的bytes
。
在网上或磁盘上读取数字流,读到的数据是bytes
。
bytes的每个字符都只占一个字节。
表示:b''
例:x = b'abc'
(1) 将str
转化为bytes
以Unicode表示的str
通过encode()
可以编码为指定的bytes
例:'abc'.encode('ascii')
(2) 将bytes
转化为str
通过decode()
方法
例:b'abc'.decode('ascii')
若bytes
中包含无法解码的字节,decode()
会报错,若bytes
中只有一小部分无效,可以传入 errors='ignore'
忽略错误的字节
计算字符数的长度
len()
函数,str
计算的是字节数,bytes
计算的是字节数
例:len('abc')
len(b'abc')
在保存源代码时,保存为UTF-8编码
取源代码时,为了让它按UTF-8编码读取,通常在文件开头加上
#!/usr/bin/env python3 //告诉Linux/OS X系统,这是一个Python可执行程序
#-*- coding: utf-8 -*- //告诉python解释器,按照UTF-8编码读取源代码
保存时也需保存为UTF-8编码
三、序列
list和tuple(内置的有序集合)
1. 列表:list:[]
有序列表(像数组与结构体的结合)
内置的一种数据类型,list是一种有序的集合,可以随时添加和删除其中的元素
列表里面的数据类型可以不同,也可以含有列表(看成多维数组)
操作:
-
增:
a.append(elem)
加到末尾a.insert(site,elem)
添加到指定位置 -
删:
a.pop(site)
不加位置,默认末尾 -
改:
赋值给对应的索位置
-
查:
索引与数组相同是从0开始
a[site]
,查看site处元素,site可以为-1,即查询最后一个元素
2. 元组: tuple:()
(有序列表)
tuple一旦初始化就不能更改,查询与list
相同
-
只有一个元素的tuple
==定义时必须加一个逗号
,
==以消除歧义a = (1,)
若
a = (1)
定义的是1
这个数 -
“可变的”tuple(实际是list在变):
tuple中包含list:a = tuple(‘a’,‘b’,[‘A’,‘B’])
tuple包含三个元素,
a,b和list
四、字典 dic:{}
1. 特点
- 字典是一种可变的容器,可以存储任意类型的数据
- 字典中每个数据都是用‘键’(key)进行索引,而不像序列可以用下标进行索引
- 字典的数据没有先后顺序关系,字典的存储是无序的
- 字典中的数据以键(key)-值(value)队进行映射存储,查找速度快
- 字典的键不能重复,且只能用不可变类型作为字典的键。
表示方法:用{}括起来,以冒号(:)分割键-值对,各键值对用分号分隔开
例:d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
2. 创建
**(1)创建空字典: **
d = {}
(2)创建非空字典:
d = {'name':'tarena','age':'15'}
(3)字典的构造函数 dict:
- dict() 创建一个空字典,等同于{}
- dict(iterable) 用可迭代对象初始化一个字典
- dict(**kwargs) 关键字传参形式生成一个字典
3. 增
即把数据放入dict的方法:
-
(1)除了初始化时指定外
-
(2)通过key放入
d['Adam'] = 67
一个key只能对应一个value
4. 删
删除一个key:
- 用
pop(key)
方法,对应的value也会从dict中删除
5. 要避免key不存在的错误:
-
(1)通过
in/not in
判断key是否存在:'Thomas' in d
#如果存在返回True,否则返回False;not in 与in返回值相反 -
(2)通过dict提供的
get()
方法,如果key不存在,可以返回None
,或者自己指定的value:d.get('Thomas', -1)
dict的key必须是不可变对象
通过key计算位置的算法称为哈希算法(Hash)
五、集合set
1. 特点
- 集合是可变的容器
- 集合内的数据对象是唯一的,即没有重复的key,重复元素在set中自动被过滤
- 集合是无序的存储结构,集合中的数据没有先后关系
- set的原理和dict一样,集合内的元素必须是不可变对象
- 集合是可迭代的
- 集合是相当于只有键没有值的字典(是一组key的集合,但不存储value)
对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容这些方法会创建新的对象并返回
2. 创建
要创建一个set,需要提供一个list作为输入集合
(1)创建空的集合:
set() #set()创建一个空的集合
(2)创建非空集合:
s = {1,2,3} #集合中的三个整数1,2,3
(3)集合的构造函数 set:
- set()创建空集合
- set(iterable) 用可迭代对象创建一个新的集合对象
3. 增
- 通过
add(key)
方法 s.add(4)
4. 删
- 通过
remove(key)
方法 s.remove(4)
5. 数学意义上的交集、并集等操作
- 交集:
s1 & s2
- 并集:
s1 | s2
五、判断
if语句
-
python的if没有括号,依靠缩进
-
if
与else
后有冒号:
if age >= 18: else:
-
elif
:(else if)
六、循环
1. for…in循环
for x in ...: #把每个元素带入变量x,然后执行缩进语句
print(x)
[x * x for x in range(1, 11)]
for循环后面加上if判断:[x * x for x in range(1, 11) if x % 2 == 0]
两层循环:[m + n for m in 'ABC' for n in 'XYZ']
for
循环其实可以同时使用两个甚至多个变量,比如dict
的items()
可以同时迭代key和value
for k, v in d.items(): print(k, '=', v)
2. while循环
与C语言同
3. 退出循环
- break:退出循环
- continue:退出当前循环
七、运算
1. 除法
10/3 #除法结果是浮点数
10//3 #除法结果是整数
10%3 #取余运算,结果是整数