python学习笔记-(七)python基础--集合、文件操作&函数

本节内容

1.集合操作

2.文件操作

3.字符编码与转码

4.函数操作



1.集合操作

集合是一个无序的、不重复的数据组合;

1.1 常用操作

它的作用是:

1)自动去重:列表变成集合,自动去重;


1

2

3

4

>>> list_1 = [1,4,4,5,6,7,9,10]

>>> list_1 =set(list_1)

>>> print(list_1)

{14567910}

2)关系测试:测试两组数据之间的关系,交集、并集、差集、对称差集、父集、子集等


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

#交集 intersection          &

>>> list_1 = set([1,4,4,5,6,7,9,10])

>>> list_2 = set([2,45,6,11])

>>> print(list_1.intersection(list_2)) #list_1和list_2的交集

{6}

>>> print(list_1 & list_2)

{6}

#并集 union    |

>>> list_1 = set([1,4,4,5,6,7,9,10])

>>> list_2 = set([2,45,6,11])

>>> print(list_1.union(list_2))

{1245679101145}

>>> print(list_1 | list_2)

{1245679101145}

#差集 in list_1 but not in list_2   ----difference

>>> list_1 = set([1,4,4,5,6,7,9,10])

>>> list_2 = set([2,45,6,11])

>>> print(list_1.difference(list_2))

{1457910}

>>> print(list_1 - list_2)

{1457910}

#对称差集 symmetric_difference ----去掉两者相同的数据后合并

>>> list_1 = set([1,4,4,5,6,7,9,10])

>>> list_2 = set([2,45,6,11])

>>> print(list_1.symmetric_difference(list_2))

{124579101145}

>>> print(list_1 ^ list_2)

{124579101145}

#子集 issubset

>>> list_1 = set([1,2,3,4,5,6])

>>> list_2 = set([1,4])

>>> print(list_1.issubset(list_2))

False

>>> print(list_2.issubset(list_1))

True

#父集 issuperset

>>> list_1 = set([1,2,3,4,5,6])

>>> list_2 = set([1,4])

>>> print(list_1.issuperset(list_2))

True

>>> print(list_2.issuperset(list_1))

False

#没有交集则为true,有交集为false

>>> list_1 = set([1,2,3,4,5,6])

>>> list_2 = set([1,4])

>>> print(list_1.isdisjoint(list_2))

false

1.2 基本操作

  • 添加

1

2

3

4

5

6

7

8

9

#添加一项

>>> list1 = set([1,3,4,6,7])

>>> list1.add(10)

>>> print(list1)

{1346710}

#添加多项

>>> list1 = set([1,2])

>>> list1.update([6,8,10])

{812106}

  • 删除

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#remove ---删除不存在的元素会报错

>>> list1 = set([1,2,6,8,10])

>>> list1.remove(2)

>>> print(list1)

{81106}

>>> list1.remove(11)

>>> print(list1)

Traceback (most recent call last):

  File "C:/Users/Administrator/PycharmProjects/cc/day3/set_test.py", line 2in <module>

    list1.remove(11)

KeyError: 11

#discard ---remove的友好版本,删除不存在的元素不会报错

>>> list1 = set([1,2,6,8,10])

>>> list1.discard(2)

>>> print(list1)

{81106}

>>> list1.discard(11)

>>> print(list1)

{812106}

#pop ---随机删除

>>> list1 = set([1,2,6,8,10])

>>> list1.pop()

>>> print(list1)

{12106}  ---因集合是无序的,故随机删除某一项

2.文件操作

对文件操作流程:

  • 打开文件,得到文件句柄并赋值给一个变量
  • 通过句柄对文件进行操作
  • 关闭文件

2.1 打开文件


1

#文件句柄 = open(‘文件路径‘, ‘模式‘)

文件名:yesterday


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Somehow, it seems the love I knew was always the most destructive kind

不知为何,我经历的爱情总是最具毁灭性的的那种

Yesterday when I was young

昨日当我年少轻狂

The taste of life was sweet

生命的滋味是甜的

As rain upon my tongue

就如舌尖上的雨露

I teased at life as if it were a foolish game

我戏弄生命 视其为愚蠢的游戏

The way the evening breeze

就如夜晚的微风

May tease the candle flame

逗弄蜡烛的火苗

The thousand dreams I dreamed

打开文件的模式有:

  • r ,只读模式【默认】


    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    >>> f = open("yesterday,‘r‘,encoding="utf-8")

    >>> a = f.read()

    >>> print(a)

    >>> f.close()

    Somehow, it seems the love I knew was always the most destructive kind

    不知为何,我经历的爱情总是最具毁灭性的的那种

    Yesterday when I was young

    昨日当我年少轻狂

    The taste of life was sweet

    生命的滋味是甜的

    As rain upon my tongue

    就如舌尖上的雨露

    I teased at life as if it were a foolish game

    我戏弄生命 视其为愚蠢的游戏

    The way the evening breeze

    就如夜晚的微风

    May tease the candle flame

    逗弄蜡烛的火苗

    The thousand dreams I dreamed

  • w,只写模式【不可读;不存在则创建;存在则清空内容;】

    1

    >>> f = open("1.txt",‘w‘,encoding="utf-8")

  • a, 追加模式【可读;   不存在则创建;存在则只追加内容;】

    1

    >>> f = open("1.txt",‘a‘,encoding="utf-8")

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】


    1

    >>> f = open("1.txt",‘r+‘,encoding="utf-8")

  • w+,写读【可读,可写】

    1

    >>> f = open("1.txt",‘w+‘,encoding="utf-8")

  • a+, 写读【可读,可写】

    1

    >>> f = open("1.txt",‘a+‘,encoding="utf-8")

"b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

2.2 操作文件

  • read()

read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

>>> f = open("yesterday,‘r‘,encoding="utf-8")

>>> a = f.read()

>>> print(a)

>>> f.close()

Somehow, it seems the love I knew was always the most destructive kind

不知为何,我经历的爱情总是最具毁灭性的的那种

Yesterday when I was young

昨日当我年少轻狂

The taste of life was sweet

生命的滋味是甜的

As rain upon my tongue

就如舌尖上的雨露

I teased at life as if it were a foolish game

我戏弄生命 视其为愚蠢的游戏

The way the evening breeze

就如夜晚的微风

May tease the candle flame

逗弄蜡烛的火苗

The thousand dreams I dreamed

  • readlines()---适合读小文件

一次读取整个文件,象 read() 一样,readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

>>> f = open("yesterday","r",encoding="utf-8")#文件句柄

>>> for index,line in enumerate(f.readlines()):

>>>     if index == 9:

>>>         print(‘---我是分割线---‘)

>>>         continue

>>>     print(line.strip())

>>> f.close()

Somehow, it seems the love I knew was always the most destructive kind

不知为何,我经历的爱情总是最具毁灭性的的那种

Yesterday when I was young

昨日当我年少轻狂

The taste of life was sweet

生命的滋味是甜的

As rain upon my tongue

就如舌尖上的雨露

I teased at life as if it were a foolish game

---我是分割线---

The way the evening breeze

就如夜晚的微风

May tease the candle flame

逗弄蜡烛的火苗

The thousand dreams I dreamed

  • readline()

readline() 每次只读取一行


1

2

3

4

5

>>> f = open("yesterday","r",encoding="utf-8")#文件句柄

>>> a = f.readline()

>>> print(a)

>>> f.close()

Somehow, it seems the love I knew was always the most destructive kind

  • 高效读取文件方法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

>>> f = open("yesterday","r",encoding="utf-8")#文件句柄

>>> for line in f:

>>>      print(line.strip())

>>> f.close()

Somehow, it seems the love I knew was always the most destructive kind

不知为何,我经历的爱情总是最具毁灭性的的那种

Yesterday when I was young

昨日当我年少轻狂

The taste of life was sweet

生命的滋味是甜的

As rain upon my tongue

就如舌尖上的雨露

I teased at life as if it were a foolish game

我戏弄生命 视其为愚蠢的游戏

The way the evening breeze

就如夜晚的微风

May tease the candle flame

逗弄蜡烛的火苗

The thousand dreams I dreamed

2.3 管理上下文--with语句

上面我们可以看到,每次打开后都需要关闭文件,十分繁琐。。。

为了避免打开文件后忘记关闭,可以通过管理上下文,即:


1

2

>>> with  open("yesterday","r",encoding="utf-8") as f:

>>>     .....

2.4 其他扩展


1

2

3

4

5

6

7

8

9

10

11

12

13

14

#告知当前光标的位置

>>> f = open(‘yesterday‘,‘r‘,encoding=‘utf-8‘)

>>> print(f.tell())

0

#光标回到首位

>>> f.seek(0)

#判断是否可移动

>>> f.seekable

#判断文件是否可读

>>> f.readable()

#判断文件是否可写

>>> f.writable()

#文件描述符

f.flieno()

3.字符编码与转码

详细文章:http://www.cnblogs.com/luotianshuai/articles/5735051.html

Python3.0中默认的编码类型就是Unicode

encode:字符编码

decode:字符解码

Q:为什么要用到字符编码和解码?

A:有些文档可能采用的是某种编码方式(如utf-8)来存储文本,但如果我们展现的工具是另外一种编码方式(如gb2312),若我们不做些转码的工作,那么在此工具中显示的将会是乱码。

4. 函数操作

4.1 函数基本语法及特性

定义:

函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

函数能提高应用的模块性,和代码的重复利用率。

特性:

  1. 减少重复代码
  2. 使程序变的可扩展
  3. 使程序变得易维护

函数定义规则:

你可以定义一个由自己想要功能的函数,这被叫做用户自定义函数。以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

1

2

3

4

5

def 函数名(参数):

    ...

    函数体

    ...

    返回值

4.2 函数调用

4.2.1 调用方法:

test()执行,()表示调用函数test,()内可以有参数,也可没有。


1

2

3

4

5

6

7

# x为函数的参数

>>> def num(x):

...  print(x)

...

# 123456等于x

>>> num("123")

123

4.2.2 参数

4.2.2.1 形参和实参

形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)

实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参。

区别:

形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元;

实参是一个变量,占用内存空间;

数据传送单向,实参传给形参,不能形参传给实参。

4.2.2.2 位置参数和关键字参数

  • 位置参数:

传入参数的值按照顺序依次赋值(与形参一一对应)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

def func_2(x,y):

    print(x)

    print(y)

    return

func_2(2,1)

#打印2,1

#超出或不足则报错

def func_2(x,y):

    print(x)

    print(y)

    return

func_2(2,1,3)

#TypeError: func_2() takes 2 positional arguments but 3 were given

  • 关键字参数:

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

1)关键字参数与形参顺序无关;

2)关键字参数不能写在位置参数前面;


1

2

3

4

5

6

7

8

9

10

11

12

13

>>> def func_2(x,y):

    print(x)

    print(y)

    return

func_2(x=2,1)

#SyntaxError: positional argument follows keyword argument

>>> def func_2(x,y):

    print(x)

    print(y)

    return

func_2(2,y=1)

4.2.2.3 默认参数

如果我们在创建函数的时候给函数定义了值,那么在调用函数的时候如果不填写值程序就会报错:


1

2

3

4

def func_2(x):

    print(x)

    return

func_2()

如果要解决这个问题就可以给函数的值指定一个默认值,指定函数的默认值需要在def这一行指定,制定之后,当调用这个函数的时候就不需要输入函数值了。


1

2

3

4

def func_2(x=1):

    print(x)

    return

func_2()

PS:有多个参数时,记得遵循以上原则,关键字参数不能放在位置参数前

4.2.2.4 参数组

  • 位置参数转换成元组存放(*args)

1

2

3

4

def func_2(*args):

    print(args)

    return

func_2(*[1,2,3,4,6])

  • 关键字参数转换成字典存放(**keyargs)

1

2

3

4

5

def func_2(**keyargs):

    print(keyargs)

    return

func_2(name = ‘cc‘,age = 18)

#打印结果:{‘age‘: 18, ‘name‘: ‘cc‘}

4.2.3 局部变量与全局变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。


1

2

3

4

5

6

7

8

9

10

total = 0;

def sum(x,y):

    ‘‘‘返回两个参数的值‘‘‘

    total = x+y;

    print("函数内是局部变量:%s" % total)

sum(4,10)

print("函数外是全局变量:%s" % total)

#函数内是局部变量:14

#函数外是全局变量:0

4.3 返回值

函数的返回值需要使用到return这个关键字,返回值主要是用来接受函数的执行结果。

函数return后面是什么值,re就返回什么值,如果没有指定return返回值,那么会返回一个默认的参数None

在函数中,当return执行完成之后,return后面的代码是不会被执行的。---也可以理解为return就是函数的结束。

4.4 递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

递归特性:

1. 必须有一个明确的结束条件;

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少;

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出);


1

2

3

4

5

6

def calc(n):

    print(n)

    if int(n/2) > 0:

        return calc(int(n/2))

    print(n)

calc(10)

4.5 高阶函数

高阶函数:能接收函数作为参数的函数。

时间: 2024-08-01 10:45:00

python学习笔记-(七)python基础--集合、文件操作&函数的相关文章

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

python学习笔记七:条件&循环语句

1.print/import更多信息 print打印多个表达式,使用逗号隔开 >>> print 'Age:',42 Age: 42   #注意个结果之间有一个空格符 import:从模块导入函数 import 模块 from 模块 import 函数 from 模块 import * 如果两个模块都有open函数的时候, 1)使用下面方法使用: module1.open()... module2.open()... 2)语句末尾增加as子句 >>> import ma

Day3: Python学习笔记之计算机基础——网络片

Day3: Python学习笔记之计算机基础--网络片 什么是互联网协议以及为何要有互联网协议? ?互联网协议本质上是为了方便连接两台计算机而指定的一系列统一的标准. osi五层模型 计算机之间要实现数据传输必须要经过以下五层协议: ? 模型 ,协议 ,硬件 ? 应用层, http协议.用户自定义协议 ? 传输层, TCP/UPD协议 ,四层交换机.四层路由器 ? 网络层, IP协议, 三层交换机.路由器 ? 数据链路层, 以太网.电信号分组, 网桥.以太网交换机.网卡 ? 物理层, 传递电信号

python 学习笔记 7 -- Python关键字总结

0.写在前面的话 学习一门语言最重要的功课是练习与复习,在<笨方法学Python>中第三十七节虽然没有教你任何内容,但是它提醒我们:"学了这么多,你还能记得多少?该复习了!" 下面我们就对这一节的第一部分"关键字"来做个复习: Python中的关键字包括如下: and       del        from      not      while    as        elif       global    or       with     

Python学习笔记七:文件操作

文件操作 对照一个word文件的操作方式,来体会文件操作的内容 打开文件:f=open("file"),提示编码错误,windows默认是GBK f=open("file",encoding="utf-8) 输出全部内容:print(f.read()) 文件打开模式:默认为"r",只读:"w",写,创建新文件写,原文件内容被覆盖: "a",append,附加在文件最后 读.写只能有一种操作 关闭文

Python学习笔记day1【基础介绍】

Alex博客:http://www.cnblogs.com/alex3714/articles/5465198.html 一.本节主要内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc文件 数据类型初识 数据运算 表达式if ...else语句 表达式for 循环 break and continue 表达式while 循环 作业需求 二.具体内容 1.python介绍 python的创始人为吉多·范罗苏姆(Guid

Python学习笔记之语言基础与流程控制

Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. Python的特点 Python 优点 1.简单.优雅.明确 2.强大的模块第三方库 3.易移植 4.纯面向对象语言 5.可扩展性良好(c\java\c#...) Python缺点 1.代码不能加密 2.执行速度慢 Python能做什么 1.软件开发 1.游戏后台.搜索.图形界面 2.

Python学习笔记四--字典与集合

字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={} dict2={'name':John,'age':24} 使用dict()函数创建字典. dict()函数接受序列,或关键字参数作为参数创建字典.若不提供参数则创建空字典. dict1=dict([['x',1],['y',2]])#接受list作为参数创建字典 dict2=dict(x=1.y

python学习笔记2 Python文件处理

import tab #支持tab补全 import fileinput # 支持基于文件的字符串替换 for line in fileinput.input('filepath',inplace=1):  #1表示完成后回到行首 line=line.replace(oldstr,newstr) import os 得到当前的工作目录,即当前python脚本工作的目录路径:os.getcwd() 返回制指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remov

Python学习笔记(二十五)操作文件和目录

摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431925324119bac1bc7979664b4fa9843c0e5fcdcf1e000 Python内置的os模块也可以直接调用操作系统提供的接口函数. >>> import os >>> os.name # 操作系统类型 'nt' 如果是posix,说明系统是Linux.Unix或M