python基础学习三
python基础学习3
1集合
2文件操作
3字符编码转换
4函数
5局部变量
6递归
7高价函数
1集合(set)
集合是一个无序的,不重复的数据组合
1.1 集合的表示形式
s = set(1,2,3,4) #创建一个数值集合 t = set("World")#创建一个唯一字符的集合
1.2 集合的作用
作用:
1)去重,把一个列表变成集合,就自动去重了
2)关系测试,测试两组数据之前的交集、差集、并集等关系
#去重 list_first = [1,2,3,6,5,4,3,2,1] set_first = set(list_first) print(set_first,type(set_first)) #{1,2,3,4,5,6} <class 'set'>数据类型为set #关系测试 set_second = set([3,23,4,12,24,31,6]) #取set_fisrt和set_second的交集 intersection = set_first.intersection(set_second) print(intersection) #{3,4,6} #或者可以用符号 “&” print(set_first & set_second) #{3,4,6}返回同样的结果 #并集 union = set_first.union(set_second) print(union) #{1, 2, 3, 4, 5, 6, 12, 23, 24, 31} #或者可以用符号 “|” print(set_first | set_second) #差集:只在set_fisrt当中有但在set_second中没有的元素 difference = set_first.difference(set_second) print(difference) #{1,2,5} #或者可以用符号 “-” print(set_first - set_second)#{1,2,5} difference2 = set_second.difference(set_first) print(difference2) #{24, 12, 31, 23} #子集 child = set_first.issubset(set_second) print(child) # False #父集 father = set_first.issuperset(set_second) print(father) #False set_three = set([3,6]) child2 = set_three.issubset(set_first) print(child2) #True #对称差集,就是把两个集合的交集部分去除后的结果 symmetric = set_first.symmetric_difference(set_second) print(symmetric) #{1, 2, 5, 12, 23, 24, 31} #或者可以用符号“^” print(set_first ^ set_second) #两个集合是否有交集,有交集返回False,无交集则返回True nu = set_first.isdisjoint(set_second) print(nu) #False
1.3集合de其他操作
#增、删、改 #添加操作 #1)添加一项 set_first.add(666) print(set_first) #将666这个数字添加到set_first当中 #2)添加多项 set_first.update([888,999]) print(set_first) #将这个列表当中的数添加到set_first #删除操作remove,指定删除某个元素 set_first.remove(1) print(set_first) #将1删除 #随机删除某个元素 pop()操作 print(set_fisrt.pop()) #列表的长度 print(len(set_first)) #6 set_first的长度 #in or not in 某个元素是否在集合当中 pirnt("a" in set_first) # False #discard()#删除某一个数字元素 set_first.discard(1)#Remove an element from a set if it is a member.If the element is not a member, do nothing.如果是集合当中的一个元素则删除,如果不是集合当中的元素则不做任何事情 print(set_first) set_first.discard("aaaaaaaaa") print(set_first)
2文件操作
2.1 文件操作的流程
1)打开文件,得到文件句柄并赋值给一个变量
2)通过句柄对文件进行操作
3)关闭文件
2.2 打开文件的方法
open("running.txt") #这样就打开running.txt这个文本文档了
2.3 打开文件的模式
打开文件模式的总结:
https://www.cnblogs.com/wzjbg/p/6383518.html
常用的几种模式的总结
#读模式,默认模式 f = open("goodtime","r",encoding="utf-8") #写模式 f = open("goodtime","w",encoding="utf-8") #追加模式 f = open("goodtime","a",encoding="utf-8") #读写模式 f = open("goodtime","r+",encoding="utf-8")
小括号里面的参数分别是:打开的文件的名字,打开的模式,以及编码格式
2.4 读取文件的方法
**read()、readline()、readlines()**这三个方法
1)read():可以在小括号里面写上读取的字节数,限制每次读取的数量。如果不写的话,就会读取真个文件。并将文件内容以字符串的形式存储(对于连续的面向航的处理,它是不必要的。文件大于内存,该方法也不行)
2)readline():每次只读取一行,效率较大,读取较慢
3)readlines(): 一次读取整个儿文件,readlines自动将文件按行处理成一个列表
2.5 写入文件的方法
**write()、writelines()**方法
1)write():这个方法想文件写入一个字符串,但不能写入list
2)writelines():这个方法可以写入列表(列表是有要求的,列表中的元素必须是字符串,否则会报错)
2.6 文件的修改
思路:把需要读取的文件,一行一行的读出来(文件有可能很大,会把内存占满,所以最好一行一行读出来),把需要更改的字符串替换掉,然后在写入到新的文件当中(当然也可以把原先的文件覆盖即文件的名字是一样的)
#修改文件的内容 f = open("goodtime",'r',encoding="utf-8") f_new = open("file.txt","w",encoding="utf-8") for line in f: if "今天心情特别好" in line: line = line.replace("今天心情特别好","今天我的心情特别好") f_new.write(line) f.close() f_new.close() #通过脚本传参数来修改文件的内容 import sys f = open("goodtime",'r',encoding="utf-8") f_new = open("file.txt","w",encoding="utf-8") find_str = sys.argv[1] replace_str = sys.argv[2] for line in f: if find_str in line: line = line.replace(find_str,replace_str) f_new.write(line) f.close() f_new.close()
下面是看到的一个比较好的,修改文件的几种方法,可以借鉴一下
https://www.cnblogs.com/wc-chan/p/8085452.html
2.7 with管理上下文
每当我们打开文件的时候,最后我们总是关闭的,但是关闭这个操作,我们总是忘记写,肿么办?可以用这种方式
#打开一个文件 with open("goodtime","r",encoding="utf-8") as file: text = file.read() print(text) #打开多个文件 with open("file.txt", "r", encoding="utf-8") as file1, \ open("file2.txt", "w", encoding="utf-8") as file2: content = file1.read() print(content) file2.write("我用的是with哦")
2.8 文件操作中的其他方法
seek():用于移动文件读取指针到指定位置。小括号里面写上数字,代表移动多少个字节
flush():Python 文件 flush() 方法是用来把文件从内存buffer(缓冲区)中强制刷新到硬盘中,同时清空缓冲区。
一般情况下,文件关闭后会自动刷新到硬盘中,但有时你需要在关闭前刷新到硬盘中,这时就可以使用 flush() 方法。
2.9 标准文件对象
import sys
sys 模块主要是针对与python解释器相关的变量和方法
sys.stdin 用于所有的交互式输入,包括input()函数
sys.stdout 用于print()的打印输出或者input()函数的提示符
sys.stderr 用于解释器自己的提示信息和错误信息
这三个就是标准输入、标准输出和标准错误流,他们返回的是一个“文件类型”的对象,支持read()、write()、flush()等方法
import sys print("请输入:") text_box = sys.stdin.readline() print(text_box) print("你好,阳光") print("你好,云朵") import sys sys.stdout.write("你好,阳光" + "\n") sys.stdout.write("你好,云朵" + "\n") import sys text = sys.stdout.write("你好,阳光") text2 = sys.stdout.write("你好,云朵") print(text) print(text2) #模拟进度条 import sys,time for i in range(20): sys.stdout.write("▉") sys.stdout.flush() time.sleep(0.5)
3字符编码yu转换
字符编码与转换详解,转载一篇写的非常好的文章,可以借鉴一下:
http://www.cnblogs.com/luotianshuai/articles/5735051.html
4函数
4.1 函数与函数式编程
我们数值的编程方式有两种:分别是面向对象和面向过程。其实无论哪种都是一种编程的规范或者教给我们如何变成的方法论。除了这两种外其实还有更加古老的一种编程方式,也就是函数式编程
4.2 函数
数学中的函数:如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数,自变量x的取值范围叫做这个函数的定义域
编程语言中函数的定义:函数是逻辑结构化和过程化的一种编程方法
#python中定义函数 def add(x): """这个函数是自身加一""" x += 1 return x
函数式编程就是:先定义一个数学函数,然后按照这个数学模型用编程语言去实现它。
4.3 函数的作用
作用:
1)减少重复代码
2)保持代码的一致性(改动的时候只需要改动一处即可)
3)使程序变得以拓展
4.4 函数的返回值
return的值
没有定义return,解释器会隐式的返回None
return返回多个值时,会把多个值放到一个元组当中的返回
def test(): print("这是test3") return 1,"hi",[1,2,3,4] test() #这是test3 (1,"hi",[1,2,3,4])
总结:
return数为0:返回None
return数为1:返回object(python当中任何一个数据类型都是object)
return数为多个:返回包含着多个元素的一个元组
为什么要有返回值呢?
因为我们要得到某个函数的执行结果,因为我后面的程序可能会用到这个函数得到的结果,所以要有返回值
4.5 函数的参数
def test(x,y):#x,y为形参 print(x) print(y) test(1,2) #1,2叫实参(占用空间) ''' 1) 形参和实参 实参:实际参数,调用函数是传给函数的参数,可以是常量,变量,表达式,函数等传给形参 形参:形式参数,不是实际存在,是虚拟变量,在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型与实参一一对应) 区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时猜分配内存单元,实参是一个 变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参 2) 位置参数和关键字 (标准调用:实参与形参位置一一对应) (关键字调用:位置无需固定) #关键字调用 def test(x,y): print(x) print(y) test(y = 2, x = 1) #和上面的结果是一样一样的 #那如果既有位置参数,又有关键字参数调用的话会怎么样呢? def test(x,y): print(x) print(y) test(2, x = 1) #会报错 TypeError: test() got multiple values for argument 'x',变量x有多个值
在这里一定要注意:关键字参数是不能写在位置参数的前面
3)默认参数:调用函数的时候,默认参数可传进去,也可以不传,如果传入则按传入的参数。例如安装软件的时候,可以默认安装某些东西
#默认参数 def test(x, y=2): print(x) print(y) test(1)#1,2 #当然也可以test(1,2)给它再次传参
4)参数组
*args:把位置参数转变为元组
def test(*args): print(args) test(1,2,3,4,5,6) #test(*[1,2,3,4,5,6])#也可以这样来调用 def test2(x,*args): print(x) print(args) test2(1,2,3,4,5,6) #1 #(2, 3, 4, 5, 6) 返回这两组值
**kwargs: 把关键字参数转化成字典的方式
def test(**kwargs): print(kwargs) print(kwargs["name"]) #最终会返回john test(name='john',age=18,gender="M") #test(**{name="john",age=18,gender="M"}) #{'name': 'john', 'age': 18, 'gender': 'M'} def test2(name, age=18, **kwargs): print(name) print(age) print(kwargs) test2('john',gender="f",like="YOU",age=4) #john #4 #{'gender': 'f', 'like': 'YOU'}返回这三组结果
5局部变量
在函数体内的变量我们称之为局部变量,反之则为全局变量
在整个程序中都可以访问到的变量,称之为全局变量
当然局部变量也可以变成全局变量,用关键字global来规定就可以了,但是不建议这样用……
#eg1 a = "全局变量" def test(): a = “局部变量” print(a) test() #局部变量 print(a)#全局变量 #eg2 def change_name(name): print("do not change ",name) name = "b" #这个函数就是这个变量的作用域,当这个函数运行完后,变量就会被销毁 print("change ",name) name = "a" change_name(name) print(name) #eg3 name = "john" 1bb8c def change_name(): name = "JOHN" print(name) change_name()#JOHN print(name)#john #eg4 names = ["john","jack","vlim"] def change_names(): names[0] = "JOHN" print(names) change_names()#['JOHN', 'jack', 'vlim'] print(names)#['JOHN', 'jack', 'vlim'] #字符串、数字在局部变量中不能修改全局的变量 #但列表、字典、集合都可以在局部变量中来修改全局的变量 #为什么这样设计呢? 因为列表、字典你可能现在用这么多数据就可以了,但是现在我们需要添加其他功能,就需要向列表、字典中添加数据了
6递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数
6.1 递归的特性
1)必须有一个明确的结束条件
2)每次进入更深一层递归时,问题规模相比上次递归应有所减少
3)递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会多一层帧,每当函数返回,栈就会减少一层栈帧,由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
def calc(n): print(n) if int(n/2) == 0: return n return calc(int(n/2)) calc(10) #返回的结果是10,5,2,1
附上一个写的特别好的讲解递归的网址,虽然是用java写的,但是思路非常棒
https://blog.csdn.net/sinat_38052999/article/details/73303111#commentBox
7高价函数
变量可以指向函数,函数的参数能接受变量,那么一个函数就可以接受另一个函数作为参数,这种函数就称之为高阶函数
eg1: def add(x,y,f): return f(x)+f(y) res = add(-3,6,abs) print(res) #9
- 【鱼C·零基础入门学习python】第16课到第22课习题答案
- python基础学习(一)
- 零基础入门学习Python(15)--格式化
- python学习之基础篇
- python基础学习笔记(三)
- python十点半游戏学习笔记:python类的基础运用
- python基础教程_学习笔记15:标准库:一些最爱——fileinput
- 零基础入门学习Python(6)--Python之常用操作符
- 零基础学习Python 作业 第25章
- python基础班学习-day1
- Python基础学习----正则匹配
- python基础学习-输入输出
- Python基础学习:关键字elif
- <<Python基础课程>>学习笔记 | 文章13章 | 数据库支持
- urllib.quote 分类: python python基础学习 2013-07-07 10:19 3436人阅读 评论(0) 收藏
- JAVA从菜鸟【入门】到新手【实习】一一Python基础学习完成【2016.09.27——2016.10.10】
- [Python学习] 专题三.字符串的基础知识
- python基础学习16----模块
- Python基础学习一:输入输出,标识符,字符串