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

原文地址:https://www.cnblogs.com/junyingwang/p/9079419.html

时间: 2024-11-04 20:18:26

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

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

python2和python3的区别 1.编码: python2默认的编码是ascii码,python3默认的编码是utf-8 2.print: python2.7打印的时候可以不加括号,python3打印必须加括号 否则报错 3.range: python2中是xrange,python3是range 4.input: python2中是raw_input  python3中是input =,==和is的区别 =是赋值符号 ==是比较符号比较值是否相等 is比较的是内存地址 小数据池   (为

Docker容器学习梳理--小知识点补充

之前已经梳理了Docker的相关使用事项,这里再补充一些,以便加深掌握程度.1)docker run指令 [[email protected] ~]# docker run --help : docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container -a, --attach=[] Attach to STDIN, STDOUT or STDERR --add-host=[] Add a custo

python Day3 集合 文件处理 函数 字符编码 递归 高级函数

集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时

python之集合、深浅copy、文件操作、函数初识

本节内容:集合.深浅copy.文件操作.函数初识 1.小知识点补充 2.编码二 3.集合 4.深浅copy 5.文件操作 6.函数的初识 1.小知识点补充                                                                                           1.1 小数据池====str.int 小数据池存在的意义就是节省内存 节省内存,位多个变量开辟一个共享空间(str和int) int:-5--256 int===

Python之路3【知识点】白话Python编码和文件操作

Python文件头部模板 先说个小知识点:如何在创建文件的时候自动添加文件的头部信息! 通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View--选中Toolbar工具条 修改后的效果: 一.Python Script 模板第一行 这个很简单告诉系统用什么解释去解释,如果你直接用python python_file_name.py的话这个没什么影响可以不加. 但是如果想直接通过./python_file_name.py去运行的话就得加上!

Python-字典、集合、字符编码、文件操作整理-Day3

1.字典 1.1.为什么有字典: 有个需求,存所有人的信息 这时候列表就不能轻易的表示完全names = ['stone','liang'] 1.2.元组: 定义符号()t = (1,2,3)tuple 是元组的意思列表与元组不一样的地方是它 元组不可以修改元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表 语法 names = ("alex","jack","eric") 它只有2个方法,一个是count,一个

自己写的 根据编码搜索文件的小工具

文件.目录搜索的小工具 用正则式限制文件名.关键字.目录 开始是专门为了搜索GBK和UTF8两种编码的文件,现在可以制定多种编码方式来搜索文件 本科生,代码可能很不规范 因为windows下好像没有grep,win7默认的搜索用起来也不习惯,search my file也不支持搜索中文,所以开始试着按自己想法尝试写这个东西用来搜源码文件. https://github.com/wo4li2wang/MSearcher 参数 ? -f ?搜索的文件夹,可以用正则式表示? -k ?搜索文件包含的关键

文成小盆友python-num3 集合,函数,-- 部分内置函数

本接主要内容: set -- 集合数据类型 函数 自定义函数 部分内置函数 一.set 集合数据类型 set集合,是一个无序且不重复的元素集合 集合基本特性 无序 不重复 创建集合 #!/bin/env python s1 = {"1","2","3","4"} ##或者 s2 = set() set 提供的功能 1 class set(object): 2 """ 3 set() -> n

小项目创意大集合

每个程序员都可以入手的小项目创意大集合 我经常看有人发帖问关于软件项目创意点子的事,也看到了很多回帖,我自己也回了一些常见的软件项目创意.不过我觉得只列出三两个是远远不够的,因此就收集并这个软件项目创意列表,大家要找简单的编程软件项目创意学习练手的话,可以收藏并扩散本文.这些软件项目创意并不是论文级别的,只是想抛砖引玉让大家能从中受些启发. 下面你们会看到 120 多个个软件项目创意想法,都是我通过头脑风暴得来的.我将其根据主题分成了10 个分类,但有些软件项目创意其实涵盖了不止一个主题. 更新