Python特点
完全面向对象,函数、模块、数字、字符串都是对象
标准库
第三方模块
常见错误
SyntaxError,invalid syntax,语法错误
indentationError,缩进错误
解释器版本
python,python3 xxx.py
shell:ipython
交互式方式执行小的python代码
支持自动补全,Linux下的命令
ipython3,ipython
PyCharm
编辑,调试功能
项目,会新建一个.idea目录,用于保存项目相关信息
第一次打开项目,耐心等待,
想运行的话需要右键,然后run(Ctrl shift F10)
正常一个项目就一个可执行的
解释器版本设置,File/setting-project...
项目文件名:小写字母,数字,下划线
代码规范
复杂的操作,开始前若干行"""若干行"""
不是一目了然的,2空格#注释
算数运算符
/除
//整除
%取余数
**乘方
*可运用于字符串
程序执行原理
运行之前保存于硬盘
要执行需要加载到内存
1.CPU把Python解释器复制到内存中(3.4m)
2.解释器根据语法规则,从上向下让CPU翻译Python代码
3.CPU执行翻译完成的代码
变量的使用
使用前必须赋值,赋值以后才会被创建
type可以查看一个变量的类型
3.0版本只有int型
变量间的计算
True对应数字1,False对应数字0
字符串变量之间,+用于拼接,*重复
数字型和字符串之间,* 以外的都不能用
变量的输入输出
字符串变量 = input("提示信息")
int(x),float(x)
格式化输出:
print("格式化字符串"%变量)
print("格式化字符串"%(变量1,变量2....))
%s
%d,%06d整数位数,不足用0补全
%f,%.2f小数点后显示两位
%%,输出%号
变量命名
区分大小写
= 左右各保留一个空格
word1_word2即user_name
if判断语句,tab和空格不要混用
if(空格)判断条件:
条件成立时,要做的事情
elif(空格)判断条件:
条件成立时,要做的事情
else:
and,or,not
随机数
random.randint(12,20)#生成的随机数n:12<=n<=20,整数
while循环语句
while(空格)判断条件:
循环内容
修改计数器
i = 0,判断条件,i < n,即循环n次
break与continue
print不想换行,end=""
转义字符\
函数
def 函数名():
函数封装的代码
PyCharm调试工具
F8 stepover 把函数看做一行代码
F7 stepinto 如果是函数会进入函数内部
函数的文档注释
函数定义上方和其他代码保留两个空行
注释,
函数定义下方连续三对引号
选中函数名——小灯泡——Insert d s stub
-文档说明在三个引号后面,以及针对各个形参的说明
在函数调用的位置,CTRL+Q可以查看函数的说明信息
函数的参数和返回值
函数的嵌套调用
一个函数调用另一个函数
模块
每个py结尾的源文件都是一个模块
import导入这个模块
模块名.变量/模块名.函数的方式使用
模块名也是一个标识符
pyc文件,import导入的文件,生成的字节码
列表
List,最频繁,即数组
name_list = ["zz", "aa", "ss"]
1.取值,0,1,2,name_list[0]
2.取索引
.index()#不存在会报错
3.增加
.appedn()#末尾增加数据
.insert(1,"")#指定索引位置,增加参数
.extend()#把其他列表的完整内容,追加到列表末尾
4.删除
.remove("数据")#删除指定数据,会删除第一个出现的数据
.pop()#默认删除最后一个
.pop(3)#指定要删除元素的索引
.clear()#清空列表
del方法,本质上是把一个变量从内存中删除
del 列表[1]
建议使用列表提供的方法
5.统计
len(列表变量名)#列表中元素的总数
.count("查询数据")#查询数据在列表中出现的次数
6.排序
.sort()#升序
.sort(reverse=True)#降序
.reverse()#逆序,即反转
7.迭代遍历,顺序的从列表中依次获取数据,
for my_name in 列表变量:
循环体
8.应用场景
存储同一种类型的数据(当然,列表可以存不同类型数据)
通过迭代遍历,在循环体内部,针对每一项元素执行相同的操作
元组tuple
多个元素序列,与列表类似,不过元素不能修改
一串信息,数据之间用,分隔
用()定义
只包含一个元素的元组,info_tuple = (50,)#数据后跟上一个逗号
1.取值,使用索引,0,1,2,t_tuple[0]
2.方法:.count()#统计出现次数
.index()#取索引,已经知道数据内容,希望知道数据在元组中的索引
3.统计元组中包含元素个数
len(eg_tuple)
4.循环遍历,针对元组的循环遍历,需求并不是很多
除非准确的知道其中的数据类型
5.应用场景
函数的参数和返回值,接收任意多个参数,一次返回多个数据
格式字符串,格式化字符串后面的()本质上就是一个元组
"%s年龄是%d" % info_tuple
让列表不可以被修改,保护数据安全
list(元组)#把元组转换成列表,希望对元组进行修改
tuple(列表)#把列表转换成元组
字典
除列表以外,最常用的数据类型
通常用于描述一个物体的相关信息
列表事有序(序:索引)的对象集合,字典是无序的对象集合
使用print函数输出字典时,通常输出的顺序和定义的顺序不一致
用{}定义,键值对(key: value),
多个键值对用,分隔,键唯一,键常用字符串类型
定义的时候,最好一个键值对一行,
1.取值
eg_dict["key"]
取值的时候,如果指定的key不存在,程序会报错
2.增加/修改
eg_dict["new_key"] = new_value#增加
eg_dict["exist_key"] = new_value#修改
如果key不存在,会新增键值对,如果key存在,会修改已存在的键值对
3.删除
.pop("key")
删除指定键值对的时候,key不存在程序会报错
4.统计键值对的数量
len(eg_dict)
5.合并字典
.update(temp_dict)
如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对
6.清空字典
.clear()
7.循环遍历,这种需求不多
K是每次循环中,获取到的键值对的key
for k in eg_dict:
eg_dict[k]
8.字典和列表的应用场景
用一个字典的多个键值对,来描述一个物体的所有相关信息
把多个字典放到同一个列表中,通过一个循环遍历,
在循环体内部,针对每一个字典进行相同的操作
字符串
用一对双引号定义(单引号也可以),以及转义\
如果内部需要使用双引号,通常使用单引号定义
索引,str[索引值]
也可以使用for循环遍历每一个
for char in str:
print(char)
1.常用操作
len(字符串)#字符串长度
.count("little")#统计某一个小字符串出现的次数
.index("llo")#子字符串出现的位置,不存在程序报错
2.判断是否只包含数字,常用.isdecimal()只包含数字返回True,
3.查找和替换
.startswith(str)#以指定的字符串开始
.endswith(str)#以指定的字符串结束
.find(str)#出现的索引位置,不存在返回-1
.replace("old", "new")#会返回一个新的字符串,不会修改原有字符串的内容
4.文本对齐
.center()#注意,中文使用中文空格填充
.ljust()
.rjust()
5.去除空白字符:空格,\r,\n,\t
前面还有后面的空白字符去掉,只保留中间部分
.strip()#去除左右
.lstrip()#去除左侧
.rstrip()#去除右侧
6.拆分和连接
.split()#默认使用空白字符
.join()# " ".jion()
7.字符串的切片
字符串[开始索引:结束索引:步长]
包含开始索引的,不包含结束索引的
截取到起始位置,或者末尾,就不需要指定
倒数第一个字符索引为-1
步长为-1,就是向左开始截取
实现字符串的逆序:num_str[::-1]
容器类型公共方法:列表、元组、字典
1.Python内置函数
len(item)#容器中元素的个数
del(item)#删除变量,关键字方式亦可
max(item)#容器中元素最大值
min(item)#容器中元素最小值"0"<"A"<"a"
cmp(item1, item2)#3.0中被取消
2.切片
字典不支持
3.运算符
+,拼接,字符串、列表、元组,会生成一个新的列表
.extend(item)在之前后面追加
.append(item)item整个当成独立的元素插入
*,重复,字符串、列表、元组,字典不支持因key唯一
in成员运算符,字符串、列表、元组,字典判断的是字典的键
not in
<等符号,字符串、列表、元组
4.完整的for循环语法
for 变量 in 集合:
循环体代码
else:
没有通过break退出循环,循环正常结束之后,会执行代码
变量的引用以及是否可变
1.引用
变量记录数据的地址,叫做引用
数据在内存中,id(XX)查看内存地址
函数的实参/返回值,是通过引用来传递数据的
2.可变与不可变类型:内存中的数据能否被修改
不可变类型:数字类型,字符串,元组
可变类型:列表、字典
不再对之前的数据的引用,改为对新赋值的数据引用
字典中的key,只能使用不可变类型的数据
因为要对key进行哈希,确保
3.哈希(hash),hash(参数)
提取数据的特征码
接受一个不可变类型的数据作为参数
局部变量和全局变量
1.函数不能直接修改全局变量的引用,
如果函数内,定义同全局变量名称相同的变量,就创建一个局部变量,即Python中不允许直接修改全局变量的值
不推荐使用全局变量
2.修改全局变量
global关键字告诉解释器后面的变量是一个全局变量
global num
num = 99
3.全局变量定义的位置
注意,在开发时,应该把模块中所有全局变量定义在所有函数上方,这样可以保证所有的函数都能够正常访问到每一个全局变量
4.全局变量命名建议
变量名前加g_或者加gl_前缀
5.shift F6,全局修改变量名
代码结构示意图
shebang#标识用哪一个解释器
import 模块
全局变量
函数定义
执行代码
函数的返回值和参数进阶
1.函数返回元组
让函数一次返回多个值,元组可以包含多个数据,
return (val1, val2)
返回的类型是元组,小括号可以省略
return val1, val2
2.函数接收元组
result = func()
result[0]
可以使用多个变量,一次接受函数的返回结果
注意变量的个数和元组中元素的个数保持一致
val1, val2 = func()
3.面试题,交换两个数字
解法一
a = a + b
b = a - b
a = a - b
解法二,Python专有
a, b = (b, a)
a, b = b, a#等号右边是元组,只不过把小括号省略
4.函数内部通过方法修改可变参数
通过列表调用列表的方法
重要!!!
5.面试题 +=
列表变量调用 += 本质上是在执行列表变量的extend方法,不会修改变量的引用
而 = + 就是先相加,再赋值
6.缺省参数
func(val=默认值)
缺省参数之后不能再定义没有的,即带有默认值的缺省参数在参数列表末尾
调用函数时,有多个缺省参数,需要指定参数名
7.多值参数,参数的个数是不确定的
参数名前增加一个*,可以接受元组,*args
参数名前增加两个*,可以接受字典,*kwargs
demo(num, *args, **kwargs)
8.多值函数案例,计算任意多个数字的和
def sum_num(*args):
num = 0
for n in args:
num += n
return n
9.元组和字典的拆包
将元组变量传递给*args
将字典变量传递给 **kwargs
def demo(*args, **kwargs):
print()
demo(元组, 字典)#这样会都传给args
demo(*元组, **字典)#拆包语法,简化参数的传递
相当于demo(把元组和字典里的东西全部拿出来)
递归
1.结构
循环条件
递归出口
2.使用
在处理不确定的循环条件时格外有用,
比如遍历整个文件目录的结构