码迷,mamicode.com
首页 > 其他好文 > 详细

第二模块·函数编程-第1章 函数、装饰器、迭代器、内置方法

时间:2018-05-19 23:52:47      阅读:431      评论:0      收藏:0      [点我收藏+]

标签:enc   分割线   帐号   lse   方式   ram   script   文件名   help   

  • 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、去豆瓣网上看书评、影评;

4、读书推荐《追风筝的人》、《白鹿原》;

5、任何有收益的事情,都不是“短平快”获取的,“慢”是一种生活姿态;

6、套用钱钟书夫人杨绛的一句话:我们大多数人的窘境都是:想法太多,读书太少;

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‘: ‘‘}

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)
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)
file.write(\n杠娘 北京 167 55 135585834333.encode(gbk))
file.close()

技术分享图片

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、具体内容的展示,与编码格式有关,比如gbk2个字节,utf-83个字节(中文情况下);

技术分享图片

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
#函数的特性:
"""
较少重复代码,提升程序员的逼格儿;
使程序变得可拓展,引用函数的位置,修改一处即可完成扩展操作;
使程序变得容易维护,比如之前报警使用邮件,现在改为微信,修改一处即可;
"""

12-函数-默认参数

1、函数参数的作用;

  • 形参变量
  • 是参变量

技术分享图片

2、默认参数;

技术分享图片

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # __Author__:Administrator
 4 # Version:python3.6.5
 5 # Date:2018/5/19 0019 23:11
 6 def stu_register(name,age,country,course):#形参
 7     print("学生注册信息".center(30,-))
 8     print(name,age,country,course)
 9 stu_register("王山炮",22,"CN","Python")#实参
10 stu_register("张叫春",21,"CN","Linux")#实参
11 stu_register("刘老根",25,"CN","Devops")#实参
12 print("两段程序的分割线".center(40,#))
13 #def stu_register(name,age,country = "CN",course):#形参,SyntaxError: non-default argument follows default argument
14 def stu_register(name,age,course,country = "CN"):#形参
15     print("学生注册信息".center(30,-))
16     print(name,age,course,country)
17 stu_register("王山炮",22,"Python")#不传实参
18 stu_register("张叫春",21,"Linux","JP")#传了其他的实参JP
19 stu_register("刘老根",25,"Devops","CN")#传了默认参数CN,
小结:默认参数必须放在位置参数之后;

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-函数-函数进阶-作业需求

 

第二模块·函数编程-第1章 函数、装饰器、迭代器、内置方法

标签:enc   分割线   帐号   lse   方式   ram   script   文件名   help   

原文地址:https://www.cnblogs.com/tqtl911/p/9037125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!