第二模块·函数编程-第1章 函数装饰器迭代器内置方法
Posted 天晴天朗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二模块·函数编程-第1章 函数装饰器迭代器内置方法相关的知识,希望对你有一定的参考价值。
- 01-鸡汤之人丑就要多读书
- 02-三元运算
- 03-文件处理
- 04-文件处理-二进制模式
- 05-文件处理-智能检测编码的工具
- 06-文件处理-写模式操作文件
- 07-文件处理-追加模式操作文件
- 08-文件处理-混合操作文件
- 09-文件操作其他功能
- 10-文件处理-文件修改功能
- 11-函数-基本介绍
- 12-函数-默认参数
- 13-函数-关键参数
- 14-函数-非固定参数
- 15-函数-非固定参数2
- 16-函数-返回值
- 17-函数-局部变量
- 18-函数-在函数里修改全局变量
- 19-函数-在函数里修改列表数据
- 20-函数-嵌套函数
- 21-函数-作用域
- 22-函数-匿名函数
- 23-函数-高阶函数
- 24-递归介绍
- 25-递归与栈的关系
- 26-递归的作用
- 27-递归的特性总结
- 28-递归的作用
- 29-尾递归优化
- 30-函数-内置方法1
- 31-函数-内置方法2
- 32-函数-内置方法3
- 33-函数-内置方法4
- 34-函数-内置方法5
- 36-函数-函数进阶-鸡汤
- 37-函数-函数进阶-命名空间
- 38-函数-函数进阶-作用域的查找空间
- 39-函数-函数进阶-闭包
- 40-函数-函数进阶-装饰器
- 41-函数-函数进阶-装饰器流程分析
- 42-函数-函数进阶-装饰器带参数的函数
- 43-函数-函数进阶-装饰器带参数2
- 44-函数-函数进阶-列表生成式
- 45-函数-函数进阶-生成器
- 46-函数-函数进阶-斐波那契数列
- 47-函数-函数进阶-生成器调用方法
- 48-函数-函数进阶-函数写生成器
- 49-函数-函数进阶-生成器send方法
- 50-函数-函数进阶-迭代器
- 51-函数-函数进阶-作业需求
01-鸡汤之人丑就要多读书;
1、一个好的讲师,不光传授知识,也能给学生带来心灵上的成长,鸡汤也是要喝的;
2、读书“真的”可以改变一个的气质,真的可以变得有内涵;
3、去豆瓣网上看书评、影评;
给豆瓣图书打个小广告——豆瓣图书TOP250:https://book.douban.com/top250?icn=index-book250-all
4、读书推荐《追风筝的人》、《白鹿原》;
5、任何有收益的事情,都不是“短平快”获取来的,“慢”是一种生活姿态;
6、套用钱钟书夫人杨绛(jiang)的一句话,我们大多数人的窘境都是:想法太多,读书太少!
7、我们的人生Level一定程度上可以由读书来决定,由内而外的感知到变化;
8、改变人生的几种方式:读书、看电影、去旅行、经历一些“别样的”事情;
9、电影推荐——《阿甘正传》、《辛德勒的名单》;
10、我们大多数人都不会觉得自己LOW,百分之八十的人都会觉得自己还“凑合”,但实际上结果,你懂得...;
02-三元运算
1、三元运算初识;
三元运算又称“三目运算”,是对简单条件语句的简写,如:
03-文件处理
1、我们大家日常如何操作文件呢;
- 1、安装文本编辑器软件,如windows自带记事本工具、notepad++;
- 2、选中鼠标右键,利用文本编辑器软件打开文件;
- 3、查看 or 写入内容;
- 4、保存、关闭;
2、文本的操作分为读、写、修改;
1)读;
1 #! /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #__author__ = "tqtl" 4 # Date:2018/5/14 21:57 5 #f = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'r\')#UnicodeDecodeError: \'gbk\' codec can\'t decode byte 0xaf in position 9: illegal multibyte sequence 6 file = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'r\',encoding=\'utf-8\')#打开文件; 7 file_data = file.read()#阅读文件内容; 8 print(file_data)#打印文件内容; 9 file.close()#一定要关闭文件;
总结:以什么样的编码格式存储文件,一定要使用相同的编码格式打开;
兼职白领学生空姐模特护士的联系方式.txt
王心颜 上海 169 46 13813234424
马纤羽 深圳 173 50 13744234523
乔亦菲 广州 172 52 15823423525
罗梦竹 北京 175 49 18623423421
刘诺涵 北京 170 48 18623423765
岳妮妮 深圳 177 54 18835324553
贺婉萱 深圳 174 52 18933434452
叶梓萱 上海 171 49 18042432324
杜姗姗 北京 167 49 13324523342
black girl 河北 167 50 13542342233
04-文件处理-二进制模式
1、那么问题来了,如果我们事先不知道文件的编码格式怎么办?!
1 #! /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #__author__ = "tqtl" 4 # Date:2018/5/14 22:22 5 # E-Mail: tqtl911@163.com 6 file = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'rb\')#b是binary的缩写,以二进制的形式打开文件,用于网络传输,给机器看,适用于不知道文件编码格式的场景; 7 file_data = file.read()#阅读文件内容; 8 print(file_data)#打印文件内容; 9 file.close()#一定要关闭文件;
05-文件处理-智能检测编码的工具
1、chardet工具(动态监测编码的可能类型);
1 #! /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #__author__ = "tqtl" 4 # Date:2018/5/14 22:36 5 # E-Mail: tqtl911@163.com 6 # Wechat:cxz19930911 7 #pip 安装第三方模块chardet,类似于yum安装第三方软件; 8 9 import chardet 10 f = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'rb\') 11 data = f.read() 12 print(data) 13 f.close() 14 print(chardet.detect(data))#{\'encoding\': \'utf-8\', \'confidence\': 0.99, \'language\': \'\'}#0.9表示相似程度;
2、chardet工具的pip安装;
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # __Author__:Administrator 4 # Version:python3.6.5 5 # Date:2018/5/19 0019 10:29 6 import chardet#导入模块; 7 file = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'rb\') 8 data = file.read() 9 print(data) 10 print(chardet.detect(data))#{\'encoding\': \'GB2312\', \'confidence\': 0.823045267489712, \'language\': \'Chinese\'} 11 print(data.decode(\'GB2312\'))#解码操作,显示中文;
1 C:\\Users\\Administrator\\PycharmProjects\\LFXC2018\\venv\\Scripts\\python.exe C:/Users/Administrator/PycharmProjects/LFXC2018/文件操作&函数/05-文件处理-智能检测编码的工具.py 2 b\'\\xcd\\xf5\\xd0\\xc4\\xd1\\xd5 \\xc9\\xcf\\xba\\xa3 169 46 13813234424\\n\\xc2\\xed\\xcf\\xcb\\xd3\\xf0 \\xc9\\xee\\xdb\\xda 173 50 13744234523\\n\\xc7\\xc7\\xd2\\xe0\\xb7\\xc6 \\xb9\\xe3\\xd6\\xdd 172 52 15823423525\\n\\xc2\\xde\\xc3\\xce\\xd6\\xf1 \\xb1\\xb1\\xbe\\xa9 175 49 18623423421\\n\\xc1\\xf5\\xc5\\xb5\\xba\\xad \\xb1\\xb1\\xbe\\xa9 170 48 18623423765\\n\\xd4\\xc0\\xc4\\xdd\\xc4\\xdd \\xc9\\xee\\xdb\\xda 177 54 18835324553\\n\\xba\\xd8\\xcd\\xf1\\xdd\\xe6 \\xc9\\xee\\xdb\\xda 174 52 18933434452\\n\\xd2\\xb6\\xe8\\xf7\\xdd\\xe6 \\xc9\\xcf\\xba\\xa3 171 49 18042432324\\n\\xb6\\xc5\\xe6\\xa9\\xe6\\xa9 \\xb1\\xb1\\xbe\\xa9 167 49 13324523342\\nblack girl \\xba\\xd3\\xb1\\xb1 167 50 13542342233\' 3 {\'encoding\': \'GB2312\', \'confidence\': 0.823045267489712, \'language\': \'Chinese\'} 4 王心颜 上海 169 46 13813234424 5 马纤羽 深圳 173 50 13744234523 6 乔亦菲 广州 172 52 15823423525 7 罗梦竹 北京 175 49 18623423421 8 刘诺涵 北京 170 48 18623423765 9 岳妮妮 深圳 177 54 18835324553 10 贺婉萱 深圳 174 52 18933434452 11 叶梓萱 上海 171 49 18042432324 12 杜姗姗 北京 167 49 13324523342 13 black girl 河北 167 50 13542342233
06-文件处理-写模式操作文件
1、如何不占用全部内存读取文件内容?!
- 循环文件,即每次只读取一部分;
1 #! /usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #__author__ = "tqtl" 4 # Date:2018/5/14 23:04 5 # E-Mail: tqtl911@163.com 6 # Wechat:cxz19930911 7 file = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'r\',encoding=\'utf-8\') 8 for lines in file: 9 print(lines) 10 file.close() 11 # 王心颜 上海 169 46 13813234424 12 # 13 # 马纤羽 深圳 173 50 13744234523 14 # 15 # 乔亦菲 广州 172 52 15823423525 16 # 17 # 罗梦竹 北京 175 49 18623423421 18 # 19 # 刘诺涵 北京 170 48 18623423765 20 # 21 # 岳妮妮 深圳 177 54 18835324553 22 # 23 # 贺婉萱 深圳 174 52 18933434452 24 # 25 # 叶梓萱 上海 171 49 18042432324 26 # 27 # 杜姗姗 北京 167 49 13324523342 28 # 29 # black girl 河北 167 50 13542342233 30 #为什么会有空行,如何消除文件之间的空行?! 31 #No.1文件中本身隐藏着\\n换行符; 32 #No.2 print语句本身会换行,所以呈现的效果是换了两行;
2、写文件操作;
1 #写文件操作 2 file = open(file=\'兼职.txt\',mode=\'w\',encoding=\'utf-8\') 3 file.write(\'北大本科美国留学一次50,微信号:cxz19930911\')#write方法; 4 file.close()#注意,一定要关闭文件;
1 file = open(file=\'兼职write.txt\',mode=\'wb\') 2 file.write("路飞学城!".encode(\'gbk\')) 3 file.close()#输出:路飞学城!
1 file = open(file=\'兼职write.txt\',mode=\'wb\') 2 file.write("原子二号!".encode(\'gbk\')) 3 file.close()#输出:原子二号!
小结:
1、注意write模式操作文件,永远都不是修改,而是创建新文件;
2、如若原来文件与新文件名称相同,就是清空文件内容,再重新写入新内容;
3、So,使用write时候,一定要慎重!防止把源文件内容清空,过程不可逆;
07-文件处理-追加模式操作文件
1、追加模式,将内容追加至文件的尾部;
#!/usr/bin/env python # -*- coding:utf-8 -*- # __Author__:Administrator # Version:python3.6.5 # Date:2018/5/19 0019 18:20 file = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'ab\')#b代表binary,二进制模式追加; file.write(\'\\n杠娘 北京 167 55 135585834333\'.encode(\'gbk\')) file.close()#如果不是使用with方法,记得一定要关闭文件;
08-文件处理-混合操作文件
1、混合模式之r+读写模式;
#!/usr/bin/env python # -*- coding:utf-8 -*- # __Author__:Administrator # Version:python3.6.5 # Date:2018/5/19 0019 18:28 file = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'r+\',encoding=\'gbk\')#读写模式操作文件; data = file.read() print("content",data) file.write("\\nnewline 1哈哈") file.write("\\nnewline 2哈哈") file.write("\\nnewline 3哈哈") file.write("\\nnewline 4哈哈") print("\\nnew content",file.read()) file.close()
PS:先读取内容,然后写入,再次去读取,内容在写入后读取,所以未打印出来,但文件中的确已经写入新的内容;
1、混合模式之w+写读模式;
#!/usr/bin/env python # -*- coding:utf-8 -*- # __Author__:Administrator # Version:python3.6.5 # Date:2018/5/19 0019 18:28 #w+写读模式 file = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'w+\',encoding=\'gbk\')#写读模式操作文件; data = file.read() print("content",data) file.write("\\nnewline 1哈哈") file.write("\\nnewline 2哈哈") file.write("\\nnewline 3哈哈") file.write("\\nnewline 4哈哈") print("\\nnew content",file.read()) file.close()
总结:
1、r+读写模式,即先读后写,相当于以“读”的模式打开,支持向后面追加内容至文件中;
2、w+写读模式,以写的模式打开,支持读取,我们知道,写模式是以创建的模式打开文件,会把之前的内容先覆盖掉,然后再写入,但可以读取到后续写入的内容,使用场景:几乎用不到;
09-文件操作其他功能
1、文件操作的其他方法;
1)手工将buffer刷入硬盘中,file.flush()方法;
1 C:\\Users\\Administrator\\PycharmProjects\\LFXC2018\\venv\\Scripts\\python.exe "C:\\Program Files\\JetBrains\\PyCharm 2018.1.3\\helpers\\pydev\\pydevconsole.py" 50524 50525 2 import sys; print(\'Python %s on %s\' % (sys.version, sys.platform)) 3 sys.path.extend([\'C:\\\\Users\\\\Administrator\\\\PycharmProjects\\\\LFXC2018\', \'C:/Users/Administrator/PycharmProjects/LFXC2018\']) 4 PyDev console: starting. 5 Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32 6 file = open(file=\'file_flush_test.txt\',mode=\'w\',encoding=\'gbk\') 7 file.write(\'\\n测试文件的flush操作\') 8 13 9 file.write(\'\\n再次测试文件flush操作2\') 10 15 11 file.flush()
2)Linux中一切皆文件,在Linux系统中判断文件的属性是否可读,返回值为布尔值,buffer中的内容不可读取;
C:\\Users\\Administrator\\PycharmProjects\\LFXC2018\\venv\\Scripts\\python.exe "C:\\Program Files\\JetBrains\\PyCharm 2018.1.3\\helpers\\pydev\\pydevconsole.py" 50583 50584 import sys; print(\'Python %s on %s\' % (sys.version, sys.platform)) sys.path.extend([\'C:\\\\Users\\\\Administrator\\\\PycharmProjects\\\\LFXC2018\', \'C:/Users/Administrator/PycharmProjects/LFXC2018\']) PyDev console: starting. Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32 file = open(file=\'file_flush_test.txt\',mode=\'w\',encoding=\'gbk\') file.write(\'\\n测试文件的flush操作\') 13 file.write(\'\\n再次测试文件flush操作2\') 15 file.flush() file.readable() False
3、file.readline()每次只读一行;
4、seek及tell方法,读取以及跳转至制定光标的位置;
seek方法找到的是字符吗?
总结:
1、tell与seek方法是按照字节来读取内容的,而read是按照字符来读取;
2、具体内容的展示,与编码格式有关,比如gbk占2个字节,utf-8占用3个字节(中文情况下);
5、truncate方法,按照制定长度截断文件;
10-文件处理-文件修改功能
1、替换模式修改文件;
#!/usr/bin/env python # -*- coding:utf-8 -*- # __Author__:Administrator # Version:python3.6.5 # Date:2018/5/19 0019 19:32 file = open(file=\'兼职白领学生空姐模特护士的联系方式.txt\',mode=\'r+\',encoding=\'utf-8\') file.seek(10) file.write("[路飞学城]luffycity") file.close()
2、vim与word打开文件的原理说明(硬盘存储机制与原理决定);
3、既省内存又能读取大文件的方法——边读边改(不占内容空间但是读取过程中多占用一份硬盘空间);
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # __Author__:Administrator 4 # Version:python3.6.5 5 # Date:2018/5/19 0019 21:29 6 import os 7 file_name = "兼职白领学生空姐模特护士的联系方式.txt" 8 file_new_name = "%s.new"%file_name 9 old_str = "乔亦菲" 10 new_str = "杠娘" 11 file = open(file = file_name,mode=\'r\',encoding=\'utf-8\') 12 file_new = open(file = file_new_name,mode=\'w\',encoding=\'utf-8\') 13 #循环遍历整个文件; 14 for line in file:#定义临时变量line 15 if old_str in line: 16 line = line.replace(old_str,new_str) 17 file_new.write(line) 18 file.close() 19 file_new.close() 20 os.rename(file_new_name,\'123.txt\')
王心颜 [路飞学城]luffycity424 马纤羽 深圳 173 50 13744234523 乔亦菲 广州 172 52 15823423525 罗梦竹 北京 175 49 18623423421 刘诺涵 北京 170 48 18623423765 岳妮妮 深圳 177 54 18835324553 贺婉萱 深圳 174 52 18933434452 叶梓萱 上海 171 49 18042432324 杜姗姗 北京 167 49 13324523342 black girl 河北 167 50 13542342233
练习题
练习题1 —— 全局替换程序:
-
写一个脚本,允许用户按以下方式执行时,即可以对指定文件内容进行全局替换;
`python your_script.py old_str new_str filename`
-
替换完毕后打印替换了多少处内容;
练习题2 —— 模拟登陆:
- 用户输入帐号密码进行登陆;
- 用户信息保存在文件内;
- 用户密码输入错误三次后锁定用户,下次再登录,检测到是这个用户也登录不了;
11-函数-基本介绍
书籍推荐——JInPIngMei(博客园,不让使用中文);
1、函数初识;
#!/usr/bin/env python # -*- coding:utf-8 -*- # __Author__:Administrator # Version:python3.6.5 # Date:2018/5/19 0019 22:45 def helloworld():#函数名sayhi; print("Hello,I\'m TQTL.") print(helloworld)#直接打印是内存地址:<function sayhi at 0x0000020147E219D8>; helloworld()#通过函数名进行调用; #函数可以带有参数; def sayhi(name): print("Hello",name) print("My name is black girl.") #sayhi()#TypeError: sayhi() missing 1 required positional argument: \'name\' 报错,缺少位置参数; sayhi(\'TQTL\')#Hello TQTL #写一个计算两个数的乘方的程序; a,b = 5,3 c = a**b print(c)#125; #使用函数改造以上程序; def calc(x,y): res = x**y print(res) calc(2,10)#1024; calc(2,5)#32; #函数的特性: """ 小结: 1、减少重复代码,提升程序员的逼格儿; 2、使程序变得可拓展,引用函数的位置,修改一处即可完成扩展操作; 3、使程序变得容易维护,比如之前报警使用邮件,现在改为微信,修改一处即可; 函数,即对功能的封装; """
12-函数-默认参数
1、函数参数的作用;
- 形参变量;
- 实参变量;
2、默认参数;
#!/usr/bin/env python # -*- coding:utf-8 -*- # __Author__:TQTL911 # Version:python3.6.6 # Time:18/6/30 22:25 "" """ 1、函数参数-形参变量、实参变量; """ def stu_register(name,age,country,course):#形参; print("学生注册信息".center(30,\'-\')) print(name,age,country,course) stu_register("王山炮",22,"CN","以上是关于第二模块·函数编程-第1章 函数装饰器迭代器内置方法的主要内容,如果未能解决你的问题,请参考以下文章