day-3 小知识点补充 编码 集合 文件及函数初识

Posted junyingwang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day-3 小知识点补充 编码 集合 文件及函数初识相关的知识,希望对你有一定的参考价值。

1. 小知识点的补充

==数值比较

is比较两边的内存地址

id获取内存地址

 

小数据池str int,公用一个内存,目的节省内存空间。

要求:A. int范围是-5到256,指向一个地址空间

 

B. str: 1.不能含有特殊字符

     2.单个元素乘以数字不能超过21

 

2. 编码

字符:看到内容的最小单位。比如:

      abc:a一个字符

      中国:中

Ascii码:1个字节,字母,数字,特殊字符

Unicode:也称万国码,最开始2个字节表示一个字符,后升级到4个字节表示一个字节

Utf-8:最后用8位表示一个字符。英文字母:8位;欧洲:16位;亚洲中国:3个字节

Gbk:国际标准,英文和中文都占用2个字节

2  不同编码之间的二进制是不能识别的

2  对文件的存储及传输不能用unicode

编码之间的转换:python3

Str:内存中编码用unicode

   表现形式s1=’alex’ s2=‘中国

Bytes:拥有str所有的操作方法,但内部编码(不是unicode,可以是utf-8,gbk…..)

      如果使用utf-8编码,表现形式s1= b‘alex‘ s2= b‘\xe4\xb8\xad\xe5\x9b\xbd

Stràbytes

中文

s1=‘中国‘

b1=s1.encode(‘utf-8‘)

print(b1): b‘\xe4\xb8\xad\xe5\x9b\xbd‘

英文:

s1=‘english‘

b1=s1.encode(‘utf-8‘)

print(b1)   b‘english‘

 

bytes---> str  decode 解码

s2 = b1.decode(‘utf-8‘)

print(s2)--- English

 

在utf-8和gbk中,英文都是引用的ASCII的格式,所以可以识别

 

Unicode utf-8 gbk三者之间的转换关系

 

Utf-8转化为gbk

s4=‘中国‘-------unicode格式

b4=s4.encode(‘utf-8‘)

g4=b4.decode(‘utf-8‘).encode(‘gbk‘)

 

3.集合

主要用于关系测试和列表去重复

3.1列表去重复:

list1 = [1,2,2,3,3,4,4,5]

print(set(list1))-------------{1, 2, 3, 4, 5}

list1=set(list1)

list1=list(list1)

print(list(list1)) -------------[1, 2, 3, 4, 5]

3.2集合的增删改查

3.2.1#增

set1={‘wusir‘,‘oldboy‘,‘ritian‘}

set1.add(‘taibai‘)------ {‘ritian‘, ‘oldboy‘, ‘taibai‘, ‘wusir‘}(也可以看出来是无序的)

set1.update(‘abc‘)----- {‘a‘, ‘oldboy‘, ‘b‘, ‘c‘, ‘ritian‘, ‘wusir‘}  相当于无序

3.2.2#删

set1.pop()---------随机删除某一元素

set1.remove(‘ritian‘)---------按照元素删除

set1.clear()---------清空列表,返回值为空集合set()

del set1-------删除集合

3.2.3#改,集合是无序的,所以无法更改

3.2.4#查,只能用for循环

for i in set1:

print(i)

打印结果:

ritian

wusir

oldboy

3.3集合的关系测试

set1 = {1,2,3,4,5}

set2 = {4,5,6,7,8}

3.3.1交集:

print(set1&set2)# {4, 5}

print(set1.intersection(set2))# {4, 5}

3.3.2 并集

print(set1|set2)    # {1, 2, 3, 4, 5, 6, 7, 8}

print(set1.union(set2))  # {1, 2, 3, 4, 5, 6, 7, 8}

3.3.3 差集 set1独有的

print(set1-set2)  #{1, 2, 3}

print(set1.difference(set2)) #{1, 2, 3}

3.3.4 反交集

print(set1^set2)   #{1, 2, 3, 6, 7, 8}

print(set1.symmetric_difference(set2)) #{1, 2, 3, 6, 7, 8}

3.3.5 父子集  返回bool值

set1={1,2,3}

set2={1,2,3,4,5}

print(set1<set2) #True

print(set1.issubset(set2)) #True

3.3.6超集  返回bool值

set1={1,2,3}

set2={1,2,3,4,5}

print(set2>set1)    #True

print(set2.issuperset(set1)) #True

4.深浅copy

4.1赋值运算:公用一个内存地址

 

s1=[1,2,3]

s2=s1

s1.append(666)

print(s1,s2)# [1, 2, 3, 666] [1, 2, 3, 666]

4.2浅copy:第一层独立,第二层至第n层共用内存

 

s1=[1,2,3]

s2=s1.copy()

s1.append(666)

print(s1,s2)# [1, 2, 3, 666] [1, 2, 3]

 

s1=[1,2,3,[11,22]]

s2=s1.copy()

s1[-1].append(666)

print(s1,s2)# [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22, 666]]

4.3深copy,无论多少层都各自独立

需引入copy模块

import copy

s1=[1,2,3,[11,22]]

s2=copy.deepcopy(s1)

s1[-1].append(666)

print(s1,s2)# [1, 2, 3, [11, 22, 666]] [1, 2, 3, [11, 22]]

4.4 切片为浅copy

s1=[1,2,3,[11,22]]

s2=s1[:]

s1[-1].append(666)

s1.append(10)

print(s1,s2)# [1, 2, 3, [11, 22, 666], 10] [1, 2, 3, [11, 22, 666]]

5 文件操作

5.1 文件的打开

5.1.1 参数

文件路径:path

编码方式encoding:gbk,utf-8

操作方式mode:读,写,读写,写读,追加,改。。。。。

Open()调用操作系统(windows,linux,苹果)内部的open

f1=open(r‘E:/老男孩/day-3/test.txt‘,encoding=‘utf-8‘,mode=‘r‘)

#前面加r进行特殊字符转换,一般建议加上

print(f1.read())

f1.close()

5.1.2文件句柄

可用如下句柄:f,file,file_hander,f_h....

一切都文件的打开都是基于文件句柄

5.1.3执行流程

    1,打开文件,产生文件句柄。

    2,对文件句柄进行操作。

3,关闭文件句柄。

5.2 模式

5.2.1读写追加模式

读:r rb r+(读写) r+b

# Open()的默认模式,不指定mode的时候,则为r

写:w wb w+(写读)

追加:a ab a+ a+b

带b为操作为非文字文件比如视频,图片,不需指定编码,以bytes类型读取。

f1 = open(‘1.jpg‘, mode=‘rb‘)

5.3读的操作方法

5.3.1 read()全部读出来

5.3.2 read(n)

如果为文本文件,一次读n个字符

如果为非文本文件,一次读n个字节。也就是rb模式的时候。

5.3.3 readline() 读一行按行读取

5.3.4 readlines() 全部读出来,生成列表,每一行是一个元素

5.3.5 for循环

for line in f1:

print(line)

总结:方法read(),read(n),readline(),readlines(),都占用内存,如果文件比较大的时候,容易引起内存崩溃。建议用for循环。

5.4写的操作方法

只有write()一种操作方法,见写(w)就先清空文件

w模式,没有文件,新建文件然后写入;有原文件,则先清空再写入。

5.4.1文本文件的写

f1=open(‘log1.txt‘,encoding=‘utf-8‘,mode=‘w‘)

f1.write(‘oldboy\nSunday‘)

f1.close()

5.4.2图片的读写 wb

f1=open(‘1.jpg‘,mode=‘rb‘)

content=f1.read()

f2=open(‘2.jpg‘,mode=‘wb‘)

f2.write(content)

f1.close()

f2.close()

5.5追加 a

有文件,追加内容;无文件,创建文件

f1=open(‘log1.txt‘,encoding=‘utf-8‘,mode=‘a‘)

f1.write(‘\ntaibai‘)

f1.close()

5.6读写模式r+,读模式+写的功能

f1=open(‘log1.txt‘,encoding=‘utf-8‘,mode=‘r+‘)

f1.read()#读到最后,所以光标移动到最后,所以alex在最后添加

f1.write(‘alex‘)

f1.close()

5.7模式w+,写读模式,意义不大

5.8模式a+,先追加再写

5.9其它操作方法

flush写一部分就保存一部分

readable()判断文件是否可读,返回True或者False

writeable()是否可写

tell()获取光标在哪:f1.tell()

seek()获取光标的位置:f1.seek(0,2)光标调整到末尾

                     f1.seek(0)调整到开头

 f1.seek(n)光标调整到n

truncate()数据截取:安装字节对原文件进行截取,必须为a或者a+模式

f1=open(‘log1.txt‘,encoding=‘utf-8‘,mode=‘a+‘)

f1.truncate(5)

f1.close()

最后文件log1.txt只留下了前5个字节的内容

5.10 with open的使用

5.10.1

1.在一定时间内自动关闭句柄

2.可同时打开多个句柄

3. 有的时候对多个句柄同时进行操作的时候,容易出问题,建议人工关闭句柄

with open(‘log1.txt‘,encoding=‘utf-8‘,mode=‘r‘) as f1,\

    open(‘log2.txt‘,encoding=‘utf-8‘,mode=‘w‘) as f2:

    print(f1.read())

f2.write(‘6666‘)

5.11文件的改的流程

1,以读模式打开原文件。

2,以写的模式打开一个新文件。

3,将原文件读出按照要求修改将修改后的内容写入新文件。

4,删除原文件。

5,将新文件重命名原文件

import os

with open(‘file‘, encoding=‘utf-8‘) as f1,\

    open(‘file.bak‘, encoding=‘utf-8‘, mode=‘w‘) as f2:

    old_content = f1.read()

    new_content = old_content.replace(‘alex‘, ‘beijing‘)

    f2.write(new_content)

 

os.remove(‘file‘)

os.rename(‘file.bak‘, ‘file‘)

5.12模式w,为关闭句柄,不会清空内容,会一直写入

with open(‘log3.txt‘,encoding=‘utf-8‘,mode=‘w‘) as f1:

    f1.write(‘1111‘)

    f1.write(‘2222‘)

    f1.write(‘ssss‘)

log3.txt内容为11112222ssss

6.函数

6.1函数初识

6.1.1函数格式

def 关键字 函数名():

函数体

6.1.2函数执行:函数名()

函数:以功能为导向

6.1.3 return语句

1. 终止函数

2. 给函数的执行者返回值

   return 返回none

   return 单个值

   return 多个值,返回为元组,例如(‘alex’,666,[1,3])

6.2函数参数

形参 def my_len()

实参 my_len()

6.2.1实参

1. 位置参数:形参必须与之一一对应

def func1(a,b,c):

    print(a,b,c)

func1(1,2,‘alex‘)

 

2.关键字参数:func1(a=3,b=2)可以不按顺序,必须一一对应

def func1(a,b,c):

    print(a,b,c)

func1(a=1,b=2,c=‘alex‘)

3.混合参数:(位置参数,关键字参数)

           关键字参数必须放在位置参数后面

 

6.2.2形参

1.位置参数:按顺序与实参一一对应

def func1(a,b,c):

    print(a,b,c)

func1(1,2,‘alex‘)

2.默认参数:默认参数放在位置参数后面

def func2(a,b,c=‘3‘):

    print(a,b,c)

func2(1,2,5)或func2(1,2)

3.动态参数:也叫万能参数,约定俗称用这两个*args,**kwargs

 *args:所有位置参数,放在元组中

**kwargs:所有关键字参数,放在字典中

*代表聚合

def func3(*args,**kwargs):

    print(args)

    print(kwargs)

func3(1,2,3,a=1,b=2)

输出结果

(1, 2, 3)

{‘a‘: 1, ‘b‘: 2}

*在函数执行的时候代表打散

func3(*[1,2,3],**{‘name‘:‘alex‘},**{‘age‘:25})

输出结果:

(1, 2, 3)

{‘name‘: ‘alex‘, ‘age‘: 25}

6.3 形参的执行顺序

位置参数 *args,默认参数,**kwargs

def func4(a,b,*args,sex=’男’,**kwargs)

6.4补充 三元运算

def max(a, b):

    if a > b:

        return a

    else:

        return b

比较麻烦,可以进化为一句话

def max(a,b):return a if a>b else b

 

以上是关于day-3 小知识点补充 编码 集合 文件及函数初识的主要内容,如果未能解决你的问题,请参考以下文章

python基础小知识点补充及编码

Python_Day3-集合_文件处理_字符编码

Day 3 函数 及文件读写操作

python 基础篇 06 编码 以及小知识点补充

day06 --编码及知识点补充

PYTHON_DAY3