一、学前准备
1.1 计算机常识
1.2 编程语言
1.2.1 概念
用来编写计算机程序的语言,是一种人和计算机沟通的标准。
1.2.2 作用
通过这些编程语言,编写一些程序,让计算机完成指定的任务。
1.2.3 编程语言的分类
机器语言
由0和1的二进制代码组成,可以由计算机直接执行,效率最高。汇编语言
用一些助记符来代替0和1,相对来说更好理解一些,效率次之。高级语言
接近于人类自然语言的单词和符号来表述低级语言(机器语言和汇编)。像C语言、python语言、Java语言等等。分类
- 编译型:直接编译完,然后运行。
- 解释型:说一句,做一句。
1.2.4 python的介绍
- 特点:简单、优雅、可移植性、代码规范性、运行效率低。
- 应用领域:web全站开发、大数据、人工智能、数据爬虫等等。
- python 解释器:将源码转换成为二进制代码进行运行。
1.2.5 pycharm软件的使用
- from css import test : 引用css文件下面的test
- ctrl+/ 注释
- pEp8 规范 通过ctrl+alt+l
- 命名规范采用驼峰命名法 对于类来说采用大驼峰,单词的首字母大写,其余小写
对于变量或者方法采用小驼峰命名法,第一个首字母是小写,其他的首字母都是大写。
驼峰命名法一般是用于变量名或函数名等多个单词连接在一起的情况,因为高低起伏像骆驼一样,所以名为驼峰命名法。
1.2.6 python程序执行机制
- 严格来说python是先编译成字节码,然后再解释执行的一门语言。
- .pyc文件的主要作用是持久化编译结果,提升下次的执行效率。
会不会被持久化是根据import机制,也可以通过命令手动编译&持久化 python -m py_compile test.py - .py 和 .pyc文件都可以交给解释器直接处理,只不过处理的步骤不太一样。
二、基础编程
2.1 python注释
2.1.1 单行注释
单行注释使用 “#”开头。 快捷键 ctrl+l
2.1.2 多行注释
- 单引号(‘’')
- 双引号(“”")
单行注释可以嵌套再多行注释中,不会引起语法错误。
而嵌套多行注释会导致语法错误。
2.1.3 特殊注释
1.在linux下面可以指明用那一个编译器
#!/usr/bin/python
#!/usr/bin/env python 尽量去使用这种
- python2的编译器采用的ascll码编码,不支持中文问题,我们可以设置为
# encoding=utf-8
# coding=utf-8
# _*_coding:utf-8_*_ 官方推荐
2.2 python中文乱码
使用一种字符编码进行存储,用另外一种编码进行读取。
解决方法:编码和解码都使用相同的一个字符。
2.3 python变量
- 特性:变量可以引用某个具体数值并且可以改变这个引用。
- 定义
// 直接赋值
num1 = 5
// 变量名1,变量名2 = 值1,值2
a,b=2,3
// 变量1=变量2=值
a=b=3
- 产生变量的原因:第一、方便维护;第二、节省空间。
- 变量的注意事项:一个变量只能引用一个数值;符合命名规范;变量名使用之前一定要赋值。
2.4 python的数据类型
- 区分数据类型,我们可以:第一、区分存储空间;第二、根据不同数据类型的特性,做不同的数据处理。
- 常用数据类型
2.5 python类型转换
面试补充:
- 动态类型和静态类型
答:动态类型指的是在运行时进行判定的,可以动态修改;静态类型指的是编译的时候确定的,后期无法进行修改。 - 强类型和弱类型
答:强类型指的是变量不轻易随着环境的变化而变化;弱类型指的是不同的环境下,很容易被改变。
总结:python是属于强类型的、动态类型的语言。
2.4 python运算符
2.5 python输入&输出
2.5.1 python输入
- 数据的来源:第一、程序内部写死的;第二、从文件里面读取;第三、网络服务器进行获取;第四、接收用户的输入。
- 数据处理完成之后,可以写回到文件里面保存;发送回服务器;打印到控制台,通过界面进行展示。
//
number1 = eval(input("Enter first number: "))
print(number1)
print(type(number1))
2.5.2 python输出
// 输出一个值
print(123)
// 输出一个变量
num=55
print(num)
// 输出多个变量,通过逗号进行分割
num2=44
print(num,num2)
// 格式化输出
name = "list"
age = 13
print("我的名字是%s,年龄是%d" % (name, age))
print("我的名字是{0},年龄是{1}".format(name, age)) // 参数里面索引是从 0 开始
print("我的名字是%(a)s,年龄是%(n)d" % ({"n":name,"a": age}))
print("%3d" % age) // 占3位 默认是右对齐
print("%-3d" % age) // 占3位 左对齐
pirnt("% d" % age) // 加一个空格
minute = 5
sec = 28
print("%02d:%02d" % (minute, sec))
num = 24.5
print("%.2f" % num)
num = 0x24
print("%d" % num)
num = 24
# 打印num%
print("%d%%" % num)
// 输出到文件里面
f = open("test.txt", "w")
print("asdfasdfas", file=f)
// 输出不自动换行
print("abc",end="")
// 输出各个数据,使用分隔符分开
print("1", "2", "3", sep="=")
2.6 分支循环
2.6.1 分支结构语法
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
2.6.2 循环结构语法
while 判断条件(condition):
执行语句(statements)……
# 遍历任何可迭代对象,如一个列表或者一个字符串。
for <variable> in <sequence>:
<statements>
else:
<statements>
# for...else 语句用于在循环结束后执行一段代码。
for item in iterable:
# 循环主体
else:
# 循环结束后执行的代码
2.7 常用数据类型操作
2.7.1 数值
整形(int) : 二进制(0b)、八进制(0o)、十进制、十六进制(0x)
这些进制转换的时候注意像八进制是逢八进一、十六进制是逢十六进一。浮点数(float):
2.1 由整数部分和小数部分组成 168.2
2.2 可以使用科学计数法表示 1.682e2复数(complex):
由实部和虚部组成,例如:a+bj , 用函数complex(a,b)
注意:a,b都是浮点数
注意:python3的整形,可以自动的调整大小,当做Long类型使用。
- 常用操作(适用于几乎所有的python运算符)
4.1 数学函数
1. 内置函数 :abs()、max(num1,num2)、min、pow(x,y)、round(num,n) 注意:返回一个浮点数,表示四舍五入后的结果
2. math模块的函数
2.1 ceil(x) 向上取整
2.2 floor(x) 向下取整
2.3 sqrt(x) 开平方
2.4 log(x,base) 求对数
4.2 随机函数(需导入random模块)
1. random() [0,1] 范围之内的随机小数
2. choice(seq) 从一个序列中随地挑选一个数值
3. uniform(x,y) [x,y] 范围之内的随机小数
4. randomint(x,y) [x,y] 范围之内的随机整数
5. randrange(start,stop=None,step=1) 给定区间内的一随地整数
4.3 三角函数
1. sin(x)、cos(x)、tan(x)
2. asin(x)、acos(x)、atan(x)
3. degrees(x) 弧度->角度
4. randians(x) 角度->弧度
4.4 数学常量
1. pi(数学中的Π,也就是3.1415926)
2.7.2 布尔
- bool True(1) or False(0)
- 是int类型的子类
- 应用场景
3.1 当做int类型,参与相关运算
3.2 比较表达式的运算结果
3.3 可以用于if判定条件和while循环条件
2.7.3 字符串
- 概念:由单个字符组成的一个集合。
- 形式:
1. 非原始字符串:使用单引号或者双引号
2. 原始字符串(里面是什么就打印什么):只需要在非原始字符串的基础上面加上r
补充转义符
3.1 概念:通过转换某个指定的字符,使它具有特殊的含义。
3.2 常用的转义符:(续行符)、'(单引号)、"(双引号)、\n(换行)、\t(横向制表符)。各个形式的特点
4.1 单/双引号- 混合使用可以避免使用引号转义符
- 一般内容需要写成一行,如果跨行的话,需要使用连接符\ 或者用小括号(name=(‘2’‘34’))
4.2 三引号:可以直接跨行书写,同时也可以用于注释。
字符串的一般操作
5.1 字符串拼接- 方式1(str1 + str2)
- 方式2(直接把两个字符串放在一块 str1 str2)
- 方式3(利用占位符)
- 方式4(字符串乘法)
5.2 字符串切片(获取一个字符串的某个片段)
1. 获取某一个字符
name[下标]
下标(从零开始,如果负数下标的话,则从尾部开始,最后一个字符为-1)
2. 获取一个字符片段
2.1 name[起始:结束:步长]
2.2 注意
获取范围:[起始,结束) (包含起始,结束不包含)
默认值:起始默认值:0,结束默认值:len(name) 整个字符串的长度,步长默认值:1。
获取顺序:步长 > 0(从左到右),步长 < 0(从右往左)。
3. 特殊案例:反转字符串(字符串[::-1])
5.3 字符串函数操作
使用方式:
- 小旗子代表的是内建函数,直接使用
- 不带小旗子的属于对象方法,用对象.方法(参数)
2.7.4 列表
- 概念:有序的可变的元素集合
- 定义方式
方式一
1 [元素1,元素2...] 例如:nums=[1,2,3,4]
方式二
1. 列表生成式(快速生成列表)
语法:range(stop) [0,1,2...,stop-1]
range(start,stop,step) step步长的默认值是1
注意:为了防止生成列表没有被使用, python3做出一些改变,不会立即生成列表
2. 列表推导式(从一个list里面推导出来另一个list)
语法:[表达式 for 变量 in 列表]
[表达式 for 变量 in 列表 if 条件]
例如:resultList = [num ** 2 for num in nums if num % 2 != 0]
注意:
- 列表的嵌套: 列表中的元素,可以是列表
- 和C语言中的数组不同,列表可以存放不同类型的数据,而C语言里面只能去存放相同类型的数据
3 . 常用操作
3.1 增
1. list.append(object) 往列表中,追加一个新的元素 是在最后面进行一个加入
2. list.insert(index,object) 往列表中,追加一个新的元素 在指定索引前面
3. list.extend(iterable) 往列表中,扩展另外一个可迭代序列
4. 乘法运算 list1*=2
5. 加法运算 list1+list2
3.2 删
1. del 语句(删除一个指定元素或者对象)
2. pop 语句(移除并返回列表中指定索引对应元素,默认情况下删除列表中最后一个元素 list.pop(index=-1))会返回被删除的元素
3. remove语句(list.remove(object) 移除列表中指定元素 返回值None) 如果存在多个值的画,则会删除最左边的一个
3.3 改
- 比如:names[index]=666
3.4 查
1. 获取单个元素:items[index] (注意负索引)
2. 获取元素索引:index=nums.index(56)
3. 获取多个元素(切片):
items[start:end:step]
pic=nums[::-1] 反转列表
4. 遍历:
根据元素进行遍历:for item in list
根据索引进行遍历
3.4 额外操作
1. 判定: in 或者 not in
2. 比较: 在python2的版本里面用cmp()内置函数,在python3里面用>、<、==这些
3. 排序
方式1
内建函数:可以对所有可迭代对象进行排序
语法: sorted(itrearble,key=None,reverse=False)
参数:
1. itrearble 可迭代对象
2. key(排序关键字):值为一个函数,此函数只有一个参数且返回一个值用来进行比较
3. reverse:控制升序降序,默认为False,升序
返回值:一个已经排好序的列表,不会修改原来的值
方式2
列表对象方法
语法: list.sort(key=None,reverse=False)
参数:
1. key(排序关键字):值为一个函数,此函数只有一个参数且返回一个值用来进行比较
3. reverse:控制升序降序,默认为False,升序
返回值:空,直接修改原列表
4. 乱序(可以随地打乱一个列表)
导入random模块, import random,random.shuffle(list)
5. 反转
list.reverse()
通过切片反转 list[::-1]
2.7.5 元组
- 概念:有序的不可变的元素集合,和列表的区别就是元组元素不能修改。
- 定义
1. 一个元素的写法:(666,)
2. 多个元素的写法:(1,2,3)
3. 多个对象,以逗号隔开,默认为元组:tuple=1,2,3,"sz"
4. 从列表转为元组:内建函数 tuple(seq)
5. 元组里面嵌套元组:(1,2,("a","b"))
- 常用操作
1. 增、删、改是不被允许
2. 查
获取单个元素:tuple[index](下标可以为负)
获取多个元素:tuple[start:end:step](进行切片)
3. 额外操作
获取
tuple.count(item) 统计元组中指定元素的个数
tuple.index(item) 获取元组中指定元素的索引
len(tup) 返回元组中元素的个数
max(tup) 返回元组中元素最大的值
min(tup) 返回元组中元素最小的值
判定
元素 in 元组
元素 not in 元组
比较
python2的话使用cmp()函数
python3的话使用> < ==
拼接
加法、乘法
拆包
a,b=(10,20) 这样直接给a,b赋值
a=1 b=2 b,a=(a,b)
2.7.6 字典
- 概念:无序的,可变的键值对集合。
- 定义
1.方式一:{key:value,key:value}
例如:{"name":"sz","age":18}
2. 方式二:fromkeys(s,v=None)
2.1 静态方法:类和对象都可以调用
2,2 类调用:dict.fromkeys("abc",666)
例如:{'a';666,‘c’:666,'b':666}
此处的dict,指的是字典类型
2.3 对象调用:dic.fromkeys("abc",666)
例如:{'a';666,‘c’:666,'b':666}
此处的dic,是实例化的字典对象
3. 注意
3.1 key值不能重复,如果重复,后面的会把前值覆盖。
3.2 key必须是任意不可变的类型
3.3 原因
python的字典利用哈希(hash)进行实现
简单存储过程:根据给定的key值,通过运算得到哈希表中索引位置,根据得到的索引位置,存储给定的”值“。
简单的查找过程:再次使用哈希函数将key转换为对应的列表的索引,并定位到列表的位置获取value。
存在意义
- 可以通过key,访问对应的值,使得这种访问更具意义.
- 查询的效率得到很大提升
常用操作
1. 增:dict[key]=value
当key在原字典中不存在时,即为新增操作
2. 删
2.1 del dic[key] key必须要存在
2.2 dic.pop(key,default)
删除指定的键值对,并返回对应的值
如果key不存在,那么直接返回给定的defalult值,不做删除动作;如果没有给定默认值,则会报错.
2.3 dic.clear()
删除字典内所有键值对,返回None,字典本身还存在,只不过内容被清空.
和del不同,del会删除整个字典,不光删除字典里面的元素
3. 改
3.1 只能改值,不能改key
3.2 修改单个键值对:dic[key]=value
直接设置,如果key不存在,则新增,存在则修改
3.3 批量修改键值对:oldDic.update(newDic)
根据新的字典,批量更新旧字典的键值对,如果旧字典中没有对应的key,则新增键值对
4. 查
4.1 获取单个值
方式一:dic[key] 如果key不存在,则会报错
方式二:dic.get(key,defalut)
如果不存在对应的key,则取给定的默认值defalut;如果没有默认值,则会None
该方法不会报错
方式三:dic.setdefault(key,default)
获取指定key的值,如果key不存在,返回指定的默认值,如果没有则返回None
4.2 获取所有的值:dic.values()
4.3 获取所有的键:dic.keys()
4.4 获取字典的键值对:dic.items()
4.5 遍历:
1. for in
2. for x,y in info.items()
5. 计算:len(info)
6. 判定:
x in dic:判定dic中的key,是否存在x
x not in dic: 判定dic中的key,是否不存在x
2.7.7 集合
- 概念
1.1 无序的,不可随机访问的,不可重复的元素集合
1.2 与数学中集合的概念类似,可以进行交,并,差,补等逻辑运算
1.3 分为可变集合和非可变集合
set(可变集合):增、删、改
frozenset(不可变集合):创建好之后,无法增、删、改
- 定义
2.1 可变集合set
1. s = {1,2,3,4}
2. s = set(iterable) 直接进行强转
3. 集合推导式
s=set(x**2 for x in range(1,10) if x%2==0)
s={推导式}
2.2 不可变集合frozenset
1. fs=frozenset(iterable)
其中iterable可以是字符串,列表,元组,字典等
但是为dict时,只会获取key作为set的元素
2. 集合推导式
s=frozenset(x**2 for x in range(1,10) if x%2==0)
3. 直接花括号就代表可变集合set
2.3 注意
1. 创建一个空集合时,需要使用set()或者frozenset(), 不能使用s={},否则会识别为字典
2. 集合中的元素,必须是可哈希的值
3. 如果集合中的元素值出现重复,则会被合并为1个
4. 字典可以进行去重操作
- 常用操作
1.单一集合操作
1.1 可变集合
增
s.add(item)
删
s.remove(element)
指定删除set对象中的一个元素,如果集合中没有这个元素,则返回一个错误
s.discard(element)
指定删除集合中的一个元素,若没有这个元素,则do nothing
s.pop(element)
随机删除并返回一个集合中的元素,若集合为空,则返回一个错误
s.clear()
清空一个集合中的所有元素
del s
直接删除所有元素及变量
改
元素为不可变类型,不能修改
查
无法通过索引或key进行查询
1. 通过for in 进行遍历
2. 通过迭代器进行访问
1.2 不可变集合
不能增删改
查:
1. 通过for in 进行遍历
2. 通过迭代器进行访问
2.集合之间的操作
2.1 交集
intersection(iterable) 和逻辑与 实现同样的效果
itersection_update() (交集计算完毕后,会再次赋值给原对象,会更改原对象,所以只适用于可变集合)
2.2 并集
union() 返回并集
逻辑或 ‘|’ 返回并集
update() 更新并集
2.3 差集
difference()
算术运算符减'-'
difference_update()
2.4 判定
isdisjoint() 两个集合不相交
issuperset() 一个集合包含另一个集合
issubset() 一个集合包含于另一个集合
3.注意
可变与不可变集合混合运算,返回结果类型以运算符左侧为主