Frank的学习之路

Day_3_总结_数据类型

数据类型总结:

1.可变不可变:

         可变类型:listdict

         不可变类型:intfloatstrtuple

         存储的格式:

                   存一个值:intfloatstr

                   存放多个值:listdicttunple

         访问方式:

                   只能通过变量名直接访问:intfloat

                   可以通过索引(有序/序列):strlisttunple

                   可以通过key访问:dict

2.字符编码

         内存中统一使用unicode,特点是:

1、  兼容万国字符

2、  与其他国家的编码都有对应关系

保证不乱码的关键:

1、  采用的字符编码能够兼容你要存放的字符

2、  字符用什么编码标准存放的,就应该用什么编码去解码

Python2:ASCII

Python3:utf-8

在文件头:

         #conding:gbk

Python3:

         str类型是unicode编码的

Python2:

         Str类型是uniconde.encode(‘文件指定的编码’)之后的结果

         X=u’:存成unicode

1、  文件处理(*****

2、  函数(*****

1.       什么是函数

2.       为何用函数

3.       函数的分类,如何用函数

4.       定义函数

5.       调用函数

6.       形参与实参的详细使用

7.       函数对象

8.       函数嵌套

9.       名称空间与作用域

01集合:

集合(****

集合的类型:

作用:

需要优先掌握:

1、  集合的定义已经3个注意点

2、  集合的关系运算

3、  Leninnot  in

4、  For循环遍历集合

需要掌握的:

1、  集合的去重以及局限性

2、  往集合内添加或删除元素,addupdatepopremovediscard

注意:

1.       每一个元素都是不可变类型

2.       集合内元素不能重复

3.       集合的元素是无序的

集合的关系运算

#有如下两个集合,pytoners是报名python课程的学员名字集合,linuxers是报名linux课程的学员名字集合

pytoners={'frank','emma','cherry','sunny','franksunny'}

linuxers={'frank','emma','cherry','eva','joy','nacy'}

# 1.求出即报名python又报名linux课程的学员名字集合

print(pytoners & linuxers)

print(pytoners.intersection(linuxers))

# 2.求出所有报名的学生名字集合

print(pytoners | linuxers)

print(pytoners.union(linuxers))

# 3.求出只报名python课程的学员名字

print(pytoners - linuxers)

print(pytoners.difference(linuxers))

# 4.求出没有同时这两门课程的学员名字集合

print(pytoners ^ linuxers)

print(pytoners.symmetric_difference(linuxers))

#5.==

s1={1,2,3}

s2={3,2,1}

print(s1 == s2)

#6.父集 > >=

s1={1,2,3}

s2={1,2}

print(s1 >= s2)

print(s1.issuperset(s2))

#7.长度len()

print(len(s1))

print(len(pytoners))

s1={1,2,3,4}

s2={3,4}

s1.difference_update(s2)

print(s1)

列表去重方法:
info=[

    {'name':'frank','age':'18'},

    {'name':'sunny','age':'19'},

    {'name':'shine','age':'18'},

    {'name':'frank','age':'18'},

    {'name':'frank','age':'18'}

]

l=[]

for dict in info:

    if dict not in l:

        l.append(dict)

info=l

print(info)

For循环遍历集合

s={'frank','sunny','franksunny',1,1,2}

for item in s:

print(item)

文件处理

1.       什么是文件

文件是操作系统为用户或者应用程序提供一个操作硬盘的虚拟单位

2.       为什么要用文件

应用程序需要把内存的数据永久保存下来,应用程序无法直接操作硬盘,需要通过操作系统虚拟单位操作硬盘

3.       如何要用文件

open操作做了哪些事情

1、  向操作系统发送打开文件的请求

2、  在应用程序中拿到一个返回值,并指向操作系统打开文件

F=>应用程序中的一个值=>打开操作系统的文件a.txt=>硬盘的一个空间

f.close #向操作系统发送关闭文件请求

总结:文件处理的步骤

1、  打开文件

2、  读/写文件

3、  关闭文件

With可用使用上下文,可以同时打开两个文件,并且程序结束自动发送关闭操作系统打开文件请求

with open('a.txt',mode='wt',encoding='utf-8') as f,\

    open('b.txt',mode='wt',encoding='utf-8')as f1:

#文件处理代码块

Pass    #占位

4.       文件打开的模式三种

r:只读模式

w:只写

a:只追加

5.       控制文件内容的模式有两种(不能单独使用,必须与rwa连用)

ttext文本模式,该模式下操作文件内容的单位都是字符串,该模式只能是文本文件

           强调:该模式下必须指定enconding=’字符编码

bbytes二进制模式,该模式下操作文件内容的单位是bytes,该模式适用所有类型文件

1、  r模式

文件不存在,则报错

文件存在,并且文件的指针调到文件的开头

2、  w模式:只写模式

文件不存在则创建一个空文档,并且文件指针跳转到文件的开头

文件存在,会将内容清空,并且文件指针跳转文件开头

如果在文件打开不关闭的情况,连续写入,本次写入会基于上一次指针的末端继续写入

with open('a.txt',mode='w',encoding='utf-8')as f:

    l=['11\n','22\n','33\n']

    # for item in l:

    #     f.write(item)

f.writelines(l)

3a模式:只追加写模式

文件不存在则创建一个文件,并且文件指针跳转到文件末尾

文件存在,会将文件指针跳转

6. bbytes二进制模式,该模式下操作文件内容的单位是bytes,该模式适用所有类型文件

         强调:一定不能指定enconding参数

with open('c.txt',mode='rb') as f:

    data=f.readline()

    print(data)

    res=data.decode('utf-8')

print(res)

cp拷贝文件需求:

1.       遍历文件内容方式

with open('c.txt',mode='rt',encoding='utf-8')as f:

    for item in f:

        print(item,end='')

with open('c.txt',mode='rb')as f:

    print(f.readline())

print(f.readline())

执行结果:


Import使用:

import  sys

print(sys.argv)

结果显示:

import  sys

print(sys.argv[1])

print(sys.argv[2])

显示结果:

Cp直接写死方法

with open(r'E:\Python_exercise\day3\1.mp4',mode='rb') as read_f,\

        open(r'E:\1.mp4',mode='wb') as write_f:

    for line in read_f:

        write_f.write(line)

增加灵活输入地址修改方法:

src_file_path=input('原文件路径>>>').strip()

dst_file_path=input('目标文件路径>>>').strip()

with open(r'%s' %src_file_path,mode='rb') as read_f,\

        open(r'%s' %dst_file_path,mode='wb') as write_f:

    for line in read_f:

        write_f.write(line)

import  sys

src_file_path=sys.argv[1]

dst_file_path=sys.argv[2]

with open(r'%s' %src_file_path,mode='rb') as read_f,\

        open(r'%s' %dst_file_path,mode='wb') as write_f:

    for line in read_f:

        write_f.write(line)

文件内指针操作(掌握)

f.seek(3,2):单位统一是字节

第一个参数:控制移动的字节数

第二个参数:控制移动的参照物,值可以为0,1,2

0:参照文件开头(在t模式和b模式下都能使用)

         强调:除了0模式以外的模式都只能再b模式下使用

1:参照当前位置(只能在b模式下使用)

2:参照文件末尾(只能在b模式下使用)

with open('c.txt',mode='r',encoding='utf-8') as f:

    f.seek(3,0)

print(f.read())

执行结果:

read(n)

readnt模式下代表的是字符个数

readnb模式下代表的是字节个数

其余所有文件内指针移动都是以字节为单位

with open('c.txt',mode='rb')as f:

    print(f.read(3))

print(f.read(3).decode('utf-8'))

执行结果:

参照文件末尾(只能在b模式下使用)

with open('c.txt',mode='rb')as f:

    f.seek(-3,2)

print(f.read().decode('utf-8'))

执行结果:

修改文件直接内存修改方法::

文件编辑器修改文件原理:

1、  先将文件内容全部读入内存

2、  在内存中修改完毕

3、  将修改的结果覆盖会写硬盘

缺点:占用内存过高

优点:在修改期间,硬盘同一时刻只有一份数据

with open('d.txt',mode='rt',encoding='utf-8')as f :

    data=f.read()

    new_data=data.replace('frank','sunny')

    print(new_data)

with open('d.txt',mode='wt',encoding='utf-8') as f:

f.write(new_data)

修改文件临时文件覆盖方法:

1、  一行一行读,一行一行该

2、  以读的模式打开文件,以写的模式打开另外一个文件

3、  然后用for循环读取一行一行内容,每读一行修改一行,将修改结果写入

临时文件,直到把文件遍历完成

4、  删除源文件,将临时文件修改源文件

优点:同一时刻在内存中只存在一行内容

缺点:在修改期间,硬盘同一数据会保留两份

import os

with open('db.txt',mode='rt',encoding='utf-8') as src_f,\

         open('.db.txt.swap',mode='wt',encoding='utf-8') as temp_f:

    for line in src_f:

        if 'frank' in line:

            line=line.replace('frank','sunny')

        temp_f.write(line)

os.remove('db.txt')

os.rename('.db.txt.swap','db.txt')

1、  什么是函数

函数就是具备一功能的工具

函数必须遵循先定义,后调用原则

事先准备的工具即函数定义

拿来就是即函数调用

函数分为两大类:

           内置函数

           自定义函数

2、  为什么要用函数

2.1、程序的组织结构不清晰、可读性差

2.2、日记月累冗余代码过多

2.3、程序可扩展性差

3、  怎么用

1、  定义函数

1.1、语法:

Def 函数名(参数1,参数2…

“””

文档注释

“””

code1

code2

……….

renturn 返回值

1.2定义函数阶段发生的事:只检测语法,不执行代码

def foo(): #foo函数内存地址

    print('hello1')

    print('hello2')

    print('hello3')

print(foo)

foo()

# 示范一

def bar():

    print('from bar')

def foo():

    print('from foo')

    bar()   

foo()

执行结果显示:

1.3定义函数的三种形式

1.3.1无参函数

def func1():

            print(‘hello1’)

print(‘hello2’)

print(‘hello3’)

1.3.2有参函数

def fuc2(x,y):

    if x>y:

        print(x)

    else:

        print(y)

fuc2(1,3)

1.3.3空函数

def func3():

            pass

2、  调用函数

2.1、语法函数名()

2.2调用函数发生什么事

2.2.1根据函数名找到函数内存地址

2.2.2函数地址加上括号可以触发函数体执行代码

2.3调用函数的三种方式:

def f1():

    print('from 1')

f1()

表达式形式:

def fuc2(x,y):

    if x>y:

        return x

    else:

        return y

res=max(1,2)

print(res)

1、什么事函数的返回值

         函数的返回值是函数体运行代码的成果

2、什么时候用返回值

        

3、如何用返回值

return 值:

1、  返回值没有类型限制

2、  返回值没有个数限制

逗号多个值:返回一个元组

一个值:返回一个值

没有return:默认返回None

return是函数结束的标志:

函数内可以有多个return,但只要执行一次,整个函数就会立即结束,并且将return后的值当做本次调用结果的返回

返回顶部