官方文档教程 3.11.1 Documntation (python.org)
目录
1. bool型:
2. 整形
3. float
4. complex复数,可以进行复数运算
5.list序列 [ ] ,和数组类似,但它可添加元素
6. 字符串类型,
7. 结构控制语句
7.1 if 表达式 :
7.2 while语句:
7.3 for循环
8 .字典
8.1字典的定义
8.2字典的访问
8.3 字典里添加新的键值对
8.4 字典在内存中的访问原理
8.5 字典的遍历:
9. 函数的定义
9.1 函数参数传递
9.2 函数可变形参
9.3 函数的另一种调用方式:
9.4 函数名封装到列表中,
9.5 函数作为另一个函数的返回值
9.6 匿名函数:lambda
9.7 回调函数
9.8 闭包函数
10. 异常处理
11. 文件操作
11.1 文件打开和读取
11.2 文件的写入
11.3 文件的路径
12. 正则表达式
13. 浅拷贝和深拷贝
14.filter 和map方法
15. 装饰器函数
16 . 模块介绍和使用
16.1 模块的介绍编辑
16.2模块的导入方法
编辑
16.4 导入模块,并给它起别名
16.5 常见模块的使用
16.5.1 math模块 编辑
16.5.2 os模块
16.5.3 random模块
16.5.4 datatime模块
16.5.5 time模块
变量不需要像c语言先声明,再使用
True,False,首字母大写
除法要注意:‘/’ ‘//’
/ 除法带小数,如 7 / 2=3.5
// 除法是整除,如 7 // 2 = 3
求余‘%’,在python中float数是可以求余的,如 In [1]: 10.5%3
Out[1]: 1.5
float不做==等号判定,要比较两个float数大小,让它们相减的绝对值,结果小于一个很小的数,说明它们相等。
x = [1,2,3] ,s = [''abc'',''def'']
x.append(2), x = [1,2,3,2] 这里的x[1] 与x[3]指向同一个2,也就是说列表在内存中只有一个2,只是x[1] 与x[3]都指向这个内存
两个序列可以直接相加拼接起来,s+x = [1,2,3,''abc'',''def'']
并不是说把对象放进序列里,而是序列的元素指向这些对象,如s[0]指向 1
当我们把x=s+t 的[3] 元x[3]=‘xyz’,元素[3]就会指向另一个对象,不像数组是直接在内存中修改,原来的对象abc,会被自动释放
列表x*2会把元素翻一翻,多出来的元素还是按顺序指向原来的对象,并不会新创建对象
嵌套列表 x = [ [] ] 表示x是一个列表,它的第0个元素是一个空列表
列表切片
x[-1] 代表最后一个元素,x[-2] 倒数第二个元素
只取第1,第2 个元素,[1:3] 表示从第1开始,终于3,但不要3,并且这里是创建了新列表y,对y改变,原来的列表x不会改变
y = x[0:4:2],表示从0开始取,每次加2,到大于等于4为止,即只取x[0],x[2]
寻找列表中某个对象的下标:寻找3的下标为x[2]
元组tuple:用 (),元组的访问和列表一样,用x[0]访问第0个元素,但元组是只读的,一旦建立了引用关系,这个引用关系就不能动了
如 x定义为元组,第一个元素的引用关系是指向对象[0,1,2],修改x1只是新创建了对象[7,8,9],x1指向了新对象,并不会改变x,但元组指向一个可变的列表,列表元素增加,元组会发生变化,如下右图
要生成的数放在for前面
可用单引号‘a’、双引号"a",三引号"""a"""
想要在字符串中间嵌入‘ ’引号,需要加转义符号\
字符串加前缀‘r’,不把\当成转义字符,
...........
............ 同一级的if语句每行要有相同的缩进
elif 表达式 :
.........
else :
while 表达式 :
.....................
第一取1给item,第二次取2给item,依次类推......
for i in range(10)
for i in range(0,100,2)
score = [10, 20,30,40]
for score in enumerate(score) ,直接把索引和元素值拿出来
idx,sc = score , 每次循环把列表score 的索引给idx,元素值给sc
或者直接这样写
for idx,sc in enumerate(score) : #第一个索引赋值给inx,索引对应的元素值赋值给sc
for idx,sc in enumerate(score,1) :#第二个参数‘1’表示索引从‘1’开始
for name,score in zip(name,scores):
# zip的作用:表示每次循环分别从name、scores中各拿出一个元素组合成一个元组(78,Alice)
然后赋值给for循环的name,score
python中的同时给两个变量赋值
dic {key:value}, 如下:‘evan’就是key,这个key可以是字符串,也可以是其它的数据类型,访问字典时像访问数组那样,通过key值作为索引,用len来求字典有多少项。
key值必须是可以hash的数据类型,而value可以是任意类型
如果访问字典里不存在的项,直接用索引访问会报错,我们用.get()函数访问不会报错,返回的是空none。
使用.get()访问一个不存在的项时,会被声明为none,我们可以赋初始值。
scores['jack'] = 90 ,这样就可以了
删除
del scores['jack']
hash 哈希 ,可以把 int/float/Bool/str/Tuple元组等类型数据转化为整数,列表【】不能做hash运算
假设字典d长度为8,d['Mike'] = 23 , 在使用d['Mike']访问时,会先把hash(‘’Mike)的哈希值计算出来,再对长度8求余,得到0--7的余数,然后通过余数来定位d['Mike']指向23,如果有两个key的哈希值相同,那么会在原来字典空的位置拿出来用
指点不能通过下标在访问,而是用key来访问,因为字典元素的指向哪个对象,是通过哈希值求余来作为索引。
.key() 输出字典的所有key值
.values() 输出key值对应的value
.items() 输出key - value 对
def 函数名 (参数列表):
.................
.................. 函数内的语句保持相同的缩进
不管什么类型的参数,在 Python 函数中对参数直接使用“=”符号赋值是没用的,直接使用“=”符号赋值并不能改变参数。
如果需要让函数修改某些数据,则可以通过把这些数据包装成列表、字典等可变对象,然后把列表、字典等可变对象作为参数传入函数,在函数中通过列表、字典的方法修改它们,这样才能改变这些数据。
函数作用域:函数内部定义的变量,在函数外部不能使用,但是在if、for等分支语句内定义的变量,在外部是可以访问的。
Python 中函数的参数传递机制都是“值传递”。所谓值传递,就是将实参的副本(复制品)传入给函数的形参,而实参本身不会受到任何影响。
主程序中的x相当于一个指针,指向一个列表,x的值就是列表的地址值,函数调用时把列表的地址值传给形参x,所以在函数内部可以对列表元素修改,列表元素x[1]原来指向的是2 ,在函数foobar内部修改了指向100
当一个不可变的数作为参数传递时,外部的x指向1,x复制一份传给函数的形参x,函数内部x指向1,在函数内部修改了指向2,但外部的x还是指向1的.
python函数形参可以赋默认值,如果不传参,就使用默认值
函数参数可以使用可变的参数,*args表示可以使用多个参数,并把这些参数都封装到一个元组里,遍历这个元组就可以访问到参数。
如果还有不定项参数,还有默认赋值参数,就在形参上写**xxx, **xxx会把有默认值的参数打包成字典,参数名是字典的key值,参数的初始值是字典的value。形参列表的顺序必须是*xx,**xx。
函数本身是一个对象,让另一个变量指向它,可以用指向它的变量进行调用,类似于c语言的函数指针,如下,变量y(1) ,y指向函数,后面的1传给函数形参
把函数赋值给一个变量,这个变量就有了和这个函数一样的功能
函数求导:一个函数作为另一个函数的形参,delta = 1e-6, 一个非常小的数
通过遍历列表调用函数。
fun1调用时返回的类型是函数,返回的是fun2,a指向fun2,通过a调用函数fun2
还可以使用fun1(3)(5)调用,最终输出结果也是8,这里fun1(3)返回的是一个函数,再给函数传实参(5).
当函数体笔记简单时,直接使用关键字lambda定义:lambda 参数 :函数内容
lambda x: 2 * x ** 2 +3 与 def func(x): 效果一样
return 2 * x ** 2 +3
把函数a作为形参,传递给函数b,函数a就叫做回调函数
函数内部嵌套了一个函数,外部函数的返回值是内部函数,那么这样就构成了闭包。外部函数返回值返回的是函数体,不是函数调用。主要用于装饰器函数。
try :
可能发生异常的语句放到try内
except 捕捉异常
finally 定义在这里的语句,不管有没有异常都会被执行
这里会出现字符串转化为float异常,Exception as e 创建一个变量e,它指向异常信息
Exception 包含的异常信息有:
ValueError 是包含在Exception中的,如果Exception pass 了,后面的异常将不会再处理。
函数中有异常处理时,将返回值语句放到try中,放到except中会报错,因在try中报错,x变量未被创建,不能在except中使用。
使用 open(参数1,参数2,参数3), 参数1:打开的文件路径,字符串类型。
参数2 :表示打开方式,默认是只读'r',可以省略不写
参数3:编码方式 常用encoding = 'utf-8'
写入和读写时的编码方式要一致,注意readline() 和 readlines()的区别。
在处理文件对象时,最好使用 with 关键字。优点是,子句体结束后,文件会正确关闭,即便触发异常也可以。而且,使用 with
相比等效的 try-finally 代码块要简短得多:
如果没有使用 with 关键字,则应调用 f.close()
关闭文件,即可释放文件占用的系统资源。
f = open("doc.txt",'w',encoding='utf-8')
f.write('This is a test\n') #写入字符串
若打开的路径文件不存在,则创建文件,mode =’w‘ 时,写入数据,会把原来的内容覆盖。mode =’a‘,则是在文件末尾添加数据。
绝对路径:本来我们在windows里的文件路径是D:\SoftInstall\Microsoft VS Code\User_py\xxxx,由于python中'\'是转义字符,所有要使用'\\' 才能表示 目录的'\'
或者像Linux那样使用/..../...../也可以
相对路径:和Linux中一样 '.'表示当前路径,'..'表示上一层路径
主要用来检索\替换那些符合某个模式的文本,在python中使用正则表达式借助的是re模块
在python中一切皆是对象,变量是对象,数据也是对象,常量也是对象
下图中s1和s2同时指向列表对象[10,11,45,67],修改s1或者s2,列表元素都会发生变化,浅拷贝可以解决这个问题
浅拷贝:引入模块 copy,这里使用copy()复制列表,修改s1时,s2不会发生改变
深拷贝
当我们复制二维列表时,如下s1的第1个元素是列表,使用copy浅拷贝后s1,s2的第1个元素指向的是同一个列表对象,修改s1[1][0]时,s2的第1个元素列表也会发生改变,解决这个问题,需要深拷贝
filter 倾向于对一个对象进行筛选,map对一个对象进行处理
filter返回的是一个filter对象,所以需要对list1强制类型转化为列表,才能输出
对一个已存在的函数,增加新的功能,通常使用闭包函数,添加的新功能在装饰器函数的内部函数中添加。在内部函数中,先调用已存在的函数,再添加新功能。
一个装饰器可以修饰多个函数,还可以多个装饰器修饰一个函数
1. import 模块名,直接导入
2. from random import randint ,导入模块里面的一个方法使用from
import os os.rmdir('文件夹路径'),只能删除空文件夹