python大神的成长之路_Python大神成长之路: 第三次学习记录 集合 函数 装饰 re...
学习记录day03
字符串可以直接切片,But字符串不可修改
字符串修改:生成了一个新的字符串
LIst修改,在原基础上修改(原内存上)
集合是一个无序的,不重复的数据组合,它的主要作用如下:
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之前的交集、差集、并集等关系
dict\list\set.. 全用 x in ..计算,,dict.has_key等已废
文件:
fp = open() #文件句柄,文件句柄里存的内容: 文件信息、在磁盘上的开始位置、内存等
fp.tell() 查看当前位置
fp.seek(30) 跳到30
for line in fp:
print(line) ###可以直接这样。。
###
fp.flush() 强制刷到磁盘,默认是Buffer满了刷
r+ 读写(也没什么卵用,可读,追加写),w+ 写读(没卵用),a+ 追加读
rb 二进制格式打开。网络传输
wb 二进制格式写入。fp.write("".encode())
进度条:
for i in range(50):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)
文件:增删改·
循环写入一个新文件,需要修改的行替换后写入
for line in fp:
if "helooxxx" in line:
line = line.replace()
fp2.write(line)
with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f:
...
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
with open('log1') as obj1, open('log2') as obj2:
pass
开发规范:一行最好不要超过80个字符
编码转换:encode decode
#-*-encoding:utf8 -*-
s= "你好"
s.decode("utf-8"):Utf8转到unicode
s.encode("gbk") unicode 转到 gbk
decode 转码成Unicode, encode:unicode编码到其他编码
unicode utf8可以直接打印,GBK必须转换。
将GBK转换为utf-8: 1、GBK-->Unicode--->UTF-8,s.decode("gbk").encode("utf-8")
========================
========================
函数:
编程方法:1、面向对象;2、面向过程;3、函数式编程
参数: 位置参数调用:与形参一一对应、关键字调用:与顺序无关
关键字参数不能写在位置参数前面
ef f(x, *args):
#tuple
print args
f(1,2,3,"h","a")
f([1,2,3])
f(*[8,3,"b"])
def f4(**kwargs):
#Dictionary: 把N个关键字转换为字典方式
print(kwargs)
f4(name="Alex", age=8, sex="N")
作用域:
list tuple dictionary 可以直接在内层函数中使用,其他变量则不行。函数内的list\tuple\dictionary无法到上层使用
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
=======================
递归函数:自爆
函数式编程(Erlang,Haskell, ): 如:y=2x, x确定后,一定有一个与之对应的值
函数: y=f(2,4), if a>7...
当然我们还是用面向对象。
===================
高阶函数:
参是一个函数的,叫高阶函数
=======================
list_1 = [1,6,5,4]
list_1 = set(list_1)
list_2 = set([8,9,5,10,1])
print (list_1, list_2)
print(list_1.intersection(list_2)) #交集
print(list_1.union(list_2)) #并集
#in list_1 but not in list_2
print(list_1.difference(list_2)) #差集, list_1里有但2里没有
list_3 = set([1,6])
print(list_1.issubset(list_3)) #子集
print(list_1.issuperset(list_3)) #父集
##对称差集,去掉交集后
print(list_1.symmetric_difference(list_2))
print("-----")
list_4 = set([90])
print(list_1.isdisjoint(list_4)) #是否没有交集
####集合运算2#:
print(list_1,list_2)
print(list_1 | list_2) #并集
print(list_1 & list_2) #交集
print(list_1 - list_2) #差集
print(list_1 ^ list_2) #对称差集
list_1.add('x')
list_1.update(["a","b","c","x"])
print(list_1)
print ("a" in list_1)
装饰器:
定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能。
原则:1、不能修改被装饰的函数的源代码
2、不能修改被装饰的函数的调用方式
Python内存自动回收机制。
到底怎么个回收法呢? 有一个定时器,会不断的扫描这些字符串、值等,如果发现某个没有被引用,则回收掉。如:del(var1) 删除的是var1这个变量名,这个变量对应的值回收的两种情况1、程序结束;2、定时扫描到值没有任何地方引用。
嵌套函数: 在函数内再定义函数
def foo():
print('in the foo')
def bar():
print('in the bar')
高阶函数 + 嵌套函数 ---> 装饰器
@auth #index = auth(index)
def index()
生成器:
#列表生成式
b=[i*2 for i in range(1000000)] ##会生成列表,速度慢
b=(i*2 for i in range(10000000)) ##瞬间完成,并不会真的生成列表,在取值的时候才会生成
生成器:只有在调用时才会生成相应的数据。只记住当前位置。只有一个__next__(),python2.7:next()
b.__next__()
next(b)
def fib(max):
n, a, b = 0, 0 ,1
while n < max:
#print(b)#
yield b ###生成器
a, b = b, a+b
n +=1
return "--------------------done"
re
re.sub() 替换
re.match()
re.find() final
re.search()
'.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$' 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
'*' 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为['abb', 'ab', 'a']
'+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
'?' 匹配前一个字符1次或0次
'{m}' 匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
'|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
'\A' 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z' 匹配字符结尾,同$
'\d' 匹配数字0-9
'\D' 匹配非数字
'\w' 匹配[A-Za-z0-9]
'\W' 匹配非[A-Za-z0-9]
's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
'(?P...)' 分组匹配 re.search("(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{4})","371481199306143242").groupdict("city") 结果{'province': '3714', 'city': '81', 'birthday': '1993'}
re.split(r’\\’, r’a\b\c’)
或者:
re.split(‘\\\\’, r’a\b\c’)
re.search(‘a’, r’a\A\abc’, flags=re.I). 忽略大小写
多行:
re.search(‘2’, ‘abc\n1234’, flags=re.M)
re.search(‘2’, ‘abc\n1234’, flags=re.S)
^ 以开头、 不包含
python大神的成长之路_Python大神成长之路: 第三次学习记录 集合 函数 装饰 re...相关推荐
- python大神的成长之路_Python大神成长之路: 第二次学习记录
数据类型 数据操作 bytes 类型 "".encode() 编码-->二进制 "".decode() 解码 判断字符串里的字符是否全为数字 " ...
- 用python可以处理xml文件怎么打开_Python大神都是这样处理xml文件的!
最近有同学询问如何利用 Python 处理 xml 文件,特此整理一个比较简洁的操作手册,供大家参阅. 首先准备一个xml文件,xml中的内容如下所示.存储为:student.xml 如果要获取这个x ...
- python大数据运维常用脚本_python大数据运维
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- python由谁设计并领导开发_Python全栈开发之路 【第七篇】:面向对象编程设计与开发(1)...
本节内容 一.编程范式 编程指的是写程序.敲代码,就是指程序员用特定的语法.数据结构和算法编写的代码,目的是来告诉计算机如何执行任务的. 在编程的世界里最常见的两大流派是:面向过程与面向对象.&quo ...
- python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记...
Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...
- python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 顶...
Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...
- python function at 0x00000_Python 中的函数装饰器和闭包
本文是<流畅的Python>第7章的学习笔记. 函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另 ...
- python架构师是做什么的_架构师成长之路(1)--什么是架构师
前言: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知. 如果我们要成为架构师 ...
- python为什么叫大蟒蛇_Python(大蟒蛇)与云计算
初看起来,大蟒蛇(Python)与云计算,两者"风.牛.马"不相及,根本扯不上关系.本文却想讲一个小故事,把这两者联系起来. 当今,在我们国内,云计算可以说是一个比较热门的&quo ...
最新文章
- android调用文件管理打开某个路径,安卓 通过intent调用系统文件管理器打开指定路径目录...
- Django几种缓存机制的配置和应用
- xlst 解析 html c,怎樣實現利用xslt把xml文件內容顯示到html文件中?急!
- 数据集shuffle方法中buffer_size的理解
- 计算机基础 课程简介,课程简介及计算机基础知识课件.ppt
- 如何对linux文件进行编译,linux编译和执行命令都有哪些?该如何实现?
- [Leetcode][第718题][JAVA][最长重复子数组][动态规划][滑动窗口][暴力]
- vscode gcc debug dbg gdb c cpp c++ cuckoo monitor
- java rsa算法_求RSA算法JAVA实现源代码(带界面的)
- Java(4)---Java 对象和类
- linux之解决libipopt.so.1: Cannot open shared object file
- 2012.4.16总结(四)
- java常用快捷键 智能提示 及快捷键冲突
- 美国禁止与字节跳动及微信交易,45 天后生效,字节跳动回应来了!
- 北京科技大学 工科物理实验 大二下
- Latex:字体设置
- hyperf获取客户端真实ip
- Android 实现最新QQ登陆页面
- tomcat启动过程报the JDBC Driver has been forcibly unregistered问题的修复过程
- html怎样自动播放视频,html5自动播放mov格式视频的实例代码
热门文章
- 2.4一元多项式的表示及相加
- 将(*)的ASCII码2AH送入内存段1000H开始的100个单元中
- 动易php,动易数据转成dedecms的php程序
- java 缓冲区溢出_基于数组越界的缓冲区溢出
- 君威u0073故障码解决_格力多联机同时报三个故障“U2”“L0”“d9”怎么修?
- ubuntu 16.04 源码安装samba并且配置
- (王道408考研操作系统)第二章进程管理-第四节2:死锁处理策略之避免死锁(银行家算法)
- (王道408考研操作系统)第一章计算机系统概述-第一节3:操作系统的运行机制与体系结构
- (计算机组成原理)第二章数据的表示和运算-第三节3:浮点数加减运算
- hdoj4710 规律题