博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python基础学习3——集合、文件、函数
阅读量:5136 次
发布时间:2019-06-13

本文共 4004 字,大约阅读时间需要 13 分钟。

一、集合

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

  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) # 将指针定位到5f. truncate(10) # 从文件头开始读取10个字符f.close() # 关闭文件句柄

 

 

5、输出不换行

import sys,timefor 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 0sayhi() #调用函数

 

 

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

 

 

 

 

 

 

 

 

   

 

转载于:https://www.cnblogs.com/hui0623/p/11143863.html

你可能感兴趣的文章
POJ 3280 Cheapest Palindrome
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
Objective-C非正式协议与正式协议
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
SPOJ DQUERY D-query(主席树 区间不同数个数)
查看>>
八 Civil3d常用显示样式的编辑与创建 ----点标签样式2
查看>>
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
生产阶段Webpack打包【基础打包】
查看>>
Cortex M3/M4 学习摘要(二)
查看>>
C#时间的味道——任时光匆匆我只在乎你
查看>>
(1)数据结构——线性表(数组)实现
查看>>
SpringMyBatis解析2-SqlSessionFactoryBean
查看>>
按照excel文档中的内容在当前cad图纸中自动排布实体
查看>>
Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework...
查看>>
C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
【概率】poj 2096:Collecting Bugs
查看>>