Python基础学习3——集合、文件、函数

一、集合

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

  1. 去重,把一个列表变成集合,就自动去重了
  2. 关系测试,测试两组数据之前的交集、差集、并集等关系

 常用操作:

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中,但不会同时出现在二者中) 

 

t.add('x')            # 添加一项 

s.update([10,37,42])  # 在s中添加多项 

# 使用remove()可以删除一项: 

t.remove('H') 

len(s)  # set 的长度 

x in s  # 测试 x 是否是 s 的成员 

 

x not in s  # 测试 x 是否不是 s 的成员 

s.issubset(t)  # s <= t  测试是否 s 中的每一个元素都在 t 中 

s.issuperset(t) # s >= t  测试是否 t 中的每一个元素都在 s 中 

s.union(t)  # s | t  返回一个新的 set 包含 s 和 t 中的每一个元素 

s.intersection(t)  # s & t  返回一个新的 set 包含 s 和 t 中的公共元素 

s.difference(t)  # s - t  返回一个新的 set 包含 s 中有但是 t 中没有的元素 

s.symmetric_difference(t)  # s ^ t 返回一个新的 set 包含 s 和 t 中不重复的元素   

s.copy()  # 返回 set “s”的一个浅复制

 

 

二、文件操作

1、对文件操作流程

(1)打开文件,得到文件句柄并赋值给一个变量

(2)通过句柄对文件进行操作

(3)关闭文件

代码:

f = open('lyrics') #打开文件

first_line = f.readline()

print('first line:',first_line) #读一行

print('我是分隔线'.center(50,'-'))

data = f.read()# 读取剩下的所有内容,文件大时不要用

print(data) #打印文件

f.close() #关闭文件

 

 

2、文件打开的模式:

 

r,只读模式(默认)。

w,只写模式。【不可读;不存在则创建;存在则删除内容;】

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

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

 

r+,可读写文件。【可读;可写;可追加】常用

w+,写读 清空追加写

a+,同a

 

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

rU

r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

rb

wb

ab

3、循环读取文件:

f = open(‘file’,encoding=’utf-8’,’r’)

for line in f :

      print(line)

 

4、常用的方法

f = open(‘file’,encoding=’utf-8’,’r’)

f.tell()  # 获得文件指针位置

f.seek(5) # 将指针定位到5

f. truncate(10) # 从文件头开始读取10个字符

f.close() # 关闭文件句柄

 

 

5、输出不换行

import sys,time

for i in range(20)

sys.stdout.write(‘#’)

      time.sleep(0.1)

 

6、with语句

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

with open('log','r') as f:

      xxxxxx

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

with open('log1') as obj1, open('log2') as obj2:
        

 

 

三、函数

1、定义方式

def sayhi():#函数名

  print("Hello, I'm nobody!")

  return 0

sayhi() #调用函数

 

 

2、位置参数、默认参数、关键字参数、可变参数

位置参数:调用函数时根据函数定义的参数位置来传递参数。

def print_hello(name, sex):

print 'hello %s %s, welcome to python world!' %(name, sex)

# 两个参数的顺序必须一一对应,且少一个参数都不可以

# print_hello('huihui', ‘男’)

 

 

关键字参数:用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

# print_hello(‘huihui’, sex=’男’)

# print_hello(‘男’, name= huihui’)

# print_hello(name= huihui’, sex=’男’)

# print_hello(sex=’男’, name= huihui’)

 

以上都是可以的

有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的

 

默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

# 正确的默认参数定义方式--> 位置参数在前,默认参数在后

def print_hello(name, sex=’男’):

      xxxxx

# 调用时不传sex的值,则使用默认值1

# print_hello(‘huihui’)

# 调用时传入sex的值,并指定为2

# print_hello(‘huihui’, ‘女’)

 

可变参数:定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

*args

def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式

    print(name,age,args)

stu_register("Alex",22)

#输出

#Alex 22 () #后面这个()就是args,只是因为没传值,所以为空

stu_register("Jack",32,"CN","Python")

#输出

# Jack 32 ('CN', 'Python')

**kargs

def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式

    print(name,age,args,kwargs)

stu_register("Alex",22)

#输出

#Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空

stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong")

#输出

# Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}

 

同时使用*args和**kwargs时,必须*args参数列要在**kwargs前

 

3、返回值

要想获取函数的执行结果,就可以用return语句把结果返回

注意:

函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束

如果未在函数中指定return,那这个函数的返回值为None

 

4、递归

def calc(n):

    print(n)

    if int(n/2) ==0:

        return n

    return calc(int(n/2))

calc(10)

 

递归特性:

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

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

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

5、匿名函数

匿名函数就是不需要显式的指定函数

#这段代码

def calc(n):

    return n**n

print(calc(10))

#换成匿名函数

calc = lambda n:n**n

print(calc(10))

冒号:之前的表示这个函数的参数。

匿名函数不需要return来返回值,表达式本身结果就是返回值。

6、高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

def add(x,y,f):

  return f(x) + f(y)

res = add(3,-6,abs)

print(res)

结果:9

 

 

 

 

 

 

 

 

   

 

posted @ 2019-07-06 19:29  Python路上的小学生  阅读(209)  评论(0编辑  收藏  举报