python study day03


1、推荐的书:追风筝的人、白鹿原、林达看美国

2、集合操作:集合是一个无序的,不重复的数据组合,它的主要作用:

1)可以去重:把一个列表变成集合,就自动去重了

2)关系测试 :测试两组数据之间的交集、差集、并集等关系
list_1 = [1,4,5,7,3,6,7,9]
list_1 = set(list_1)
print(list_1,type(list_1)) 结果:{1,3,4,6,7,9} <class ‘set’>
取交集:
list_2 = set([2,6,0,66,22,8,4])
print(list_1.intersection(list_2))
结果:{4,6}
并集:
print(list_1.union(list_2))
结果:{0,1,2,3,4,5,6,7,66,9,8,22}
差集:in list_1 but not in list_2
print(list_1.difference(list_2))
结果:{1,3,5,9,7}
子集:
print(list_1.issubset(list_2))
结果:返回False 因为list_2不是list_1的子集
父集:
print(list_1.issuperset(list_2))
结果:返回False
对称差集:把两个集合都没有的元素取出来
print(list_1.symmetric_difference(list_2))
结果:{0,1,2,66,3,5,7,8,9,22}

3)判断两个集合是否有交集
isdisjoint()
如果两个集合有交集则返回False,若是没有交集则返回True

4)用运算符表示集合的关系
A= t | s #求t和s的并集
B = t & s #求t和s的 交集
C= t – s #求差集
D= t^ s #对称差集(项在t 或s中,但不会同时出现在二者中)

5)基本操作(无序的)
1添加:add
list_1.add(999)
print(list_1)
结果:{1,3,4,5,6,7,999,9}
2添加多项:s.update{[10,37,42]}
3删除:remove() 可以删除一项:
t.remove(‘H’) 删除这个元素,如果这个元素不存在,会报错
t.pop() 删除任意一项,并且返回删除的项
t.discard(‘H’) 删除这个元素,如果这个元素不存在,不会报错
4 长度:len(s)
5 x in s (列表、集合、字符串全部都是这种写法)
测试x是否是s 的成员
6 x not in s
测试x是否不是s 的成员

3、文件操作

对文件操作流程:
1)打开文件,得到文件句柄并赋值给一个变量
2)通过句柄对文件进行操作
3)关闭文件
打开文件的时候encoding = “utf-8” 这是因为程序需要用utf-8的编码,如何操作系统用的不是utf-8的编码时,需要转换一下
在这里插入图片描述

打印data2时不会有数据,这是因为data读后,文件有个位置指针,已经在文件最后,所以,在data2读的时候指针在文件最后,即不会有数据的。
文件在打开的时候默认是以读的形式,

1) f = open(“yesterday”,’r’,encoding=”utf-8”) w是写模式 就是重新创建一个文件
data = f.read()
print(data)

2)f = open(“yesterday”,’w’,encoding=”utf-8”) w是写模式 就是重新创建一个文件
f.write(“我爱北京天安门,\n”) \n是换行的意思
f.write(“天安门上太阳升”)

3)f = open(“yesterday”,’a’,encoding=”utf-8”) a append 写在文档后面,即不覆盖
f.write(“我爱北京天安门,\n”) \n是换行的意思
f.write(“天安门上太阳升”)

4)读固定的行数:
f.readline() 每次读取一行 然后存储在内存中
f.readlines() 只适合小文件读取所有的,然后存储在内存中,并且返回一个列表,每一行是一个元素,并且元素后面有换行符,可以通过strip()来消除空格和换行符
需要消耗大量的内存:这两种方法都是读到内存中,形成一个列表,然后需要占取内存空间。
for index,line in enumerate(f.readlines()):
if index == 9:
print(‘----我是分割线----‘)
continue
print(line.strip())

可以读取一行,然后执行之后,删除这一行
for line in f:
print(line)

这种方式是迭代器的方式,不是个列表的方式
Count =0
for line in f:
if count ==9:
print(‘----我是分割线----‘)
count +=1
continue
print(line)
count +=1

5)读取文件光标位置
f.tell() 返回文件光标的位置,
f.read(),可以指定读取多少字符
f.readable() 判断文件是否可读
f.seek(0) 把光标位置移动到文件开始
f.seekable() 判断光标位置能否移动

6)f.encoding 打印文件的编码格式

7)f.flush() 强制刷新 系统在写文件的时候,首先会写到缓存中,当缓存达到一定的大小时,才会写入到硬盘中,所以用flush()可以实时的写进硬盘中。
import sys,time
for i in range(50):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(1)
可以实时的打印进度条

8)f.closed() 判断文件是否关闭

9)f.truncate() 截断,从文件开始截断多少个字符,若是没有参数,则是直接清空。

  1. r+ 读写模式 这是以读和追加的模式打开文件,进行写文件的时候,只能写在文件的后面。常用

  2. w+ 写读模式 这是以读和追加的模式打开文件,即先创建一个新的文件,然后,进行写文件的时候,只能写在文件的后面

  3. a+ 追加读写模式
    13)rb 二进制模式读 (网络传输时只能用二进制,视频)

14)wb 二进制写模式 字符串要用encode()来转换

  1. window下换行是 \r\n linux下换行是\n
    ‘U’表示在读取时,可以将\r\n自动转换为\n(与r或r+模式同时使用)
    rU r+U

16)文件修改:
硬盘里的文件是不能够修改的(只能覆盖),内存里的文件是可以修改的
1)把文件加载到内存中,然后修改
2)把文件重新写到另外一个新的文件夹中
f1 = open(‘yesterday’,‘r’,encoding=‘utf-8’)
f2 = open(‘yesterday1’,‘w’,encoding=‘utf-8’)
for line in f1:
if “天安门上太阳升” in line:
line = line.replace(“天安门上太阳升”,“我爱你”)
f2.write(line)
print(type(line))
f1.close()
f2.close()
line 是字符串类型

17)with 语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open(‘log’,’r’) as f:
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源

4、 字符编码与转码

 Unicode(万国编码) 默认是大小两个字节,16位,ASCII是八位	
Utf-8是默认英文是八位,一个字节,中文是三个字节 

在这里插入图片描述
这是在python2中:
在这里插入图片描述
最后一条语句是: 先解码为unicode,然后在编码为UTF-8

在python3中默认的是Unicode编码

5、函数基本语法与特性

面向对象:class
面向过程:def
函数式编程:def
编程语言中函数的定义:函数式逻辑结构化和过程化的一种编程方法
过程就是没有返回值的函数:
函数:
Def fuc1():
“””testing1”””
Print(‘in the func1’)
Return 0
过程:是没有返回值得函数
Def fuc2():
“””testing2”””
Print(‘in the func2’)
X=fuc1()
Y=fuc2()
则x=0 y=None
写函数的时候一定要写文件描述:就在函数开始的时候
Time_format = ‘$Y-%m-%d %X’ 年月日 时分秒
Time_current = time.strftime(Time_format)
函数的三大优点:代码重用、保持一致性、可扩展性
1)函数的返回值
返回值数=0;返回为None
返回值数=1;返回为object
返回值数>1;返回为tuple(元组)
可以返回函数名,其返回的是函数的地址
2)函数的形参和实参
形参和实参是一一对应的
位置参数调用:形参和实参位置一一对应
关键字参数调用:与顺序无关
关键参数是不能写在位置参数前面的
在这里插入图片描述
3)参数组的定义:把参数处理为元组的形式
*args:接受N个位置参数,转换成元组形式
def test(args):
print(args)
test(1,2,3,4,5)
test(
[1,2,3,4,5]) # args= tuple([1,2,3,4,5])
结果:(1,2,3,4,5) (1,2,3,4,5)
和位置参数结合
def test1(x,*args):
Print(x)
print(args)
test(1,2,3,4,5)
结果:1
(2,3,4,5)

和关键字参数结合,然后转换为字典格式
**kwargs 接收N个关键字参数,然后转换为字典格式
def test2(**kwargs):
print(kwargs)
test2(name=’alex’,age=8,sex=’F’)
结果:{'name’:’alex’,’age’:8,’sex’:’F’}

4)局部变量和全局变量
在代码刚开始定义的变量是全局变量
函数里面定义的变量,其作用域就是这个函数,然后在函数里面声明 global 则就可以成为全局变量。(不用在函数里面声明全局变量)
字典 列表 集合 类等可以直接在函数里面直接更改全局变量。但是字符串 整数不可以

5)递归
在函数内部,可以调用其他函数,如果一个函数在内部调用自身,则这个函数就是递归函数。
递归特性:
1、必须有一个明确的结束条件
2、每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3、递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack),这是数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

6)函数式编程
Python对函数式编程提供部分支持,由于python允许使用变量,因此,python不是纯函数式编程语言 (不是我们编程的语言)

7)高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
def add(a,b,f)
return f(a)+f(b)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值