前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第三章 函数与变量

第三章 函数与变量

作者头像
玩蛇的胖纸
发布2018-06-08 12:56:19
3210
发布2018-06-08 12:56:19
举报

第三章 函数与变量 第一课 集合及其运算 集合: 是一个无序的不重复的数据组合 作用: 1.去重: 代码块: lit=[2,3,3,3,3,] lit=set(lit) print(lit,type(lit)) 运行输出: {2, 3} <class 'set'> 2.关系测试: 代码块: lt1=set([1,2,3,4,5]) lt2=set([4,5,6,7,8]) print(lt1.intersection(lt2))#交集 print(lt1.union(lt2))#并集 print(lt1.difference(lt2))#差集 lt1里有lt2里没有的 print(lt2.difference(lt1))#差集 lt2里有lt1里没有的 print(lt1.symmetric_difference(lt2))#对称差集 并集-交集 lt3=set([2,3,4]) print(lt3.issubset(lt1))#判断lt3是否为lt1的子集 print(lt1.issuperset(lt3))#判断lt1是否为lt3的父集 #简便写法 print(lt1&lt2)#交集 print(lt1|lt2)#并集 print(lt1-lt2)#差集 print(lt1^lt2)#对称差集 运行输出: {4, 5} {1, 2, 3, 4, 5, 6, 7, 8} {1, 2, 3} {8, 6, 7} {1, 2, 3, 6, 7, 8} True True {4, 5} {1, 2, 3, 4, 5, 6, 7, 8} {1, 2, 3} {1, 2, 3, 6, 7, 8} 基本操作: 增: 代码块: lt=set([1,2,3]) lt.add(4)#用add方法一次只能增加一个元素 lt.update([666,777,888]) print(lt) 运行输出: {1, 2, 3, 4, 777, 888, 666} 删: 代码块: lt.remove(666)#一次只能删一个元素 print(lt) 运行输出: {1, 2, 3, 4, 777, 888} 常用增删,没有改查 第二课 文件的读与写 读: f=open('yesterday','r',encoding='utf8') data=f.read() print(data) f.close() 用迭代器解决内存读大文件的问题: for line in f: print(line) 写(从头写,将以前所有内容都覆盖): f=open('yesterday01','w',encoding='utf8') data1='红红火火恍恍惚惚\n' data2='2333333333' f.write(data1) f.write(data2) f.close() 追加: f=open('yesterday01','a',encoding='utf8') data3='拳打嘤嘤怪,脚踢竹鼠商' f.write(data3) f.close() 输出: yesterday 产生新文件yesterday01 内容为: 红红火火恍恍惚惚 2333333333拳打嘤嘤怪,脚踢竹鼠商 第三课 文件的操作 tell与seek: 代码块: f=open('yesterday','r',encoding='utf8') print(f.tell())#查看光标位置 print(f.readline())#读取一行文件内容 print(f.tell())#查看光标位置 f.seek(0)#将光标移回0位置 print(f.tell()) print(f.readline()) print(f.tell()) f.close() 运行输出: 0 Seems the love I've ever known

32 0 Seems the love I've ever known

32 flush()将内容从内存刷入硬盘,实现进度条 代码块: import sys,time for i in range(20): sys.stdout.write('#') sys.stdout.flush() time.sleep(0.1) 扩展: 不常用(硬盘内存机制中有很多坑): 读写模式:f=open('yesterday01','r+',encoding='utf8') 写读模式:f=open('yesterday01','w+',encoding='utf8') 加读模式:f=open('yesterday01','a+',encoding='utf8') 常用(图片歌曲电影等文件): 代码块: f=open('yesterday01','rb')#不能加编码参数encoding='x' print(f.readline()) 运行输出: b'\xe5\x91\xb5\xe5\x91\xb5\xe5\x93\x92... 文件的修改: 代码块: f=open('yesterday02','r',encoding='utf8') f_new=open('yesterday02new','w',encoding='utf8') for line in f: if '等待我去享用' in line: line=line.replace('等待我去享用','等待pangzi去享用') print(111) f_new.write(line) f.close() f_new.close() with语句:实现自动关闭句柄 with open('yesterday01','rb') as f: print(f.readline()) 第四课 字符编码与转码 在pychon3中查看的字符串,都是Unicode的。编码都转为byte。 utf8--(decode)-->unicode--(encode)-->GBK #utf8转GBK :文件以utf8解码(decode)为Unicode格式打开,再以GBK编码(encode) utf8<--(encode)--unicode<--(decode)--GBK #GBK转utf8 :文件以GBK解码(decode)为Unicode格式打开,再以utf8编码(encode) 第五课 函数与函数式编程 编程理念: 1.面向对象:华山派---》类----》class 2.面向过程:少林派---》过程----》def 3.函数式编程:逍遥派---》函数---》def 函数的定义:函数是逻辑结构化和过程化的一种编程方法 def 函数名(x): #文档描述 x+=1 return x 面向过程:利用函数体,不利用函数返回值 代码块: import time def logger(): time_format='%Y-%m-%d %X' time_current=time.strftime(time_format) with open('log','a')as f: f.write('%s end action\n' %time_current) def test1(): print('in the test1') logger() def test2(): print('in the test2') logger() def test3(): print('in the test3') logger() test1() test2() test3() 运行输出: in the test1 in the test2 in the test3 生成文件(log)内容: 2018-01-02 15:11:12 end action 2018-01-02 15:11:12 end action 2018-01-02 15:11:12 end action 函数: return 返回值:想要函数执行的结果 参数: def test(x,y,z=3): #x,y,z叫形参,不占内存的,3叫默认参数, #如果函数被调用时无对应实参传入,则3充当实参 print(x) print(y) test(1,2) #1,2叫实参,真正占内存空间的变量。 不定长参数: 代码块: def func1(*args):#形参写成*args 可以接收不定长的不同数据类型的实参 print(args) func1(1,2,3,[4,5,6],(7,8,9),'jqk') 运行输出:#将所有元素组成一个元组 (1, 2, 3, [4, 5, 6], (7, 8, 9), 'jqk') 代码块: def func2(**kwargs):#形参写成**kwargs 可以接收不定长键值对的实参 print(kwargs) func2(name='julisha',job='teacher',age=18,sex='female') 运行输出:#将所有键值对组合为一个字典 {'name': 'julisha', 'job': 'teacher', 'age': 18, 'sex': 'female'} 作用域: 代码块: name='红红火火' job='老师' #定义全局变量name='红红火火',job='老师' def change_name(name): global job #如果想要在函数体内修改全局变量需要加global修饰,且不能当形参 print('before change',name,job) name='恍恍惚惚' #局部变量的修改只在函数体内有效 job='护士'#对全局变量做了修改 print('after change',name) change_name(name) print('afetr function',name,job) 运行输出: before change 红红火火 老师 after change 恍恍惚惚 afetr function 红红火火 护士 #name没有被修改,job被函数体修改 提醒:虽然可以在函数里改全局变量,但极不推荐这样做 递归: 定义: 在函数体内部,可以调用其他函数。如果一个函数在内部调用自己,就是递归函数。 特性: 1.必须有一个明确的结束条件,默认保护程序设置的递归次数最高990次 2.每深一层递归,问题规模都应比上一次有所减小 3.递归效率不高,次数过高容易溢出栈(stack) 代码块: def func(n): print(n) if int(n)>0: return func(n/2) print('--->',n) func(10) 运行输出: 10 5.0 2.5 1.25 0.625 ---> 0.625 高阶函数: 定义: 一个函数接收另一个函数做参数,那么这个函数就称为高阶函数 代码块: def func(a,b,f): return f(a)+f(b) def func1(x): y=x**2 return y print(func(2,2,func1)) 运行输出: 8 作业: 程序1.实现简单的shell sed 替换功能 需求: 对指定路径下的文件进行内容替换 程序2.修改haproxy配置文件

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档