学习记录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<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[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大神成长之路: 第三次学习记录 集合 函数 装饰 re的更多相关文章

  1. Python大神成长之路: 第二次学习记录

    数据类型          数据操作 bytes 类型 "".encode() 编码-->二进制 "".decode() 解码 判断字符串里的字符是否全为 ...

  2. Python大神成长之路: 第一次学习记录

    一.Python发展史 二.Python2 or 3 博主选择了Python3. 从官网下载Python  www.python.org Windows安装python3.5.python2.7.安装 ...

  3. python成长之路第三篇(1)_初识函数

    目录: 函数 为什么要使用函数 什么是函数 函数的返回值 文档化函数 函数传参数 文件操作(二) 1.文件操作的步骤 2.文件的内置方法 函数: 一.为什么要使用函数 在日常写代码中,我们会发现有很多 ...

  4. 国内某Python大神自创完整版,系统性学习Python

    很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基 ...

  5. redis成长之路——(三)

    redis连接封装 StackExchange.Redis中有一些常功能是不在database对中,例如发布订阅.获取全部key(本代码中已封装到operation中了)等,而且StackExchan ...

  6. 《ORACLE数据库管理与开发》第三章学习之常用函数记录

    <ORACLE数据库管理与开发>第三章学习之常用函数记录 注:文章中的*代表所要操作的列名 1.lower(*)/upper(*),将此列下的值转为小写/大写 2.initcap(*):把 ...

  7. python成长之路第三篇(3)_内置函数及生成器迭代器

    打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.lambda表达式 2.map内置函数 3.filter内置函数 4.reduce内置函数 5.yield生成器 ...

  8. java大神进阶之路

    既然励志在java路上走的更远,那就必须了解java的路径.先看图 更加细化的细节如下 一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还 ...

  9. 如何自学成 Python 大神?这里有些建议

    人生苦短,我用 Python.为什么?简单明了的理由当然是开发效率高.但是学习 Python 的初学者往往会面临以下残酷的现状:网上充斥着大量的学习资源.书籍.视频教程和博客,但是大部分都是讲解基础知 ...

随机推荐

  1. Java 第二次测试总结

    Java 第二次测试总结 1. 相关知识点总结 Java测试题循环与递归知识点 补充知识点: for循环语句:for(表达式1:表达式2:表达式3)表达式一负责完成变量的初始化!表达式2是值为bool ...

  2. for in 循环

    for  in循环可以循环遍历数组  关键也可以循环遍历对象!而一般的for循环只能循环遍历数组, 当循环遍历对象时key值代表键值对的键,obj[key]则是对应键的值: 当循环遍历数组时,数组不是 ...

  3. jq优化

    1.使用链式写法 $('div').find('h3').eq(2).html('Hello');采用链式写法时,jQuery自动缓存每一步的结果,因此比非链式写法要快.根据测试,链式写法比(不使用缓 ...

  4. 将gitlab中的postgresql数据库开通远程访问

    postgresql数据库是gitlab的一个配置数据库,记录gitlab的一些配置信息. 我们访问gitlab中的postgresql数据有本地命令行访问和远程可视化软件访问2种方式. (一)本地命 ...

  5. dedecms批量修改文章为待审核稿件怎么操作

    dedecms批量修改文章为待审核稿件要怎么操作呢?因为我们有时会出于某些原因要把文章暂时先隐藏掉,dedecms有一个比较好的功能是将文件状态设为未审核前台就可以看不到了,那要怎么批量设置呢?到后台 ...

  6. 014-通过JDB调试,通过HSDB来查看HotSpot VM的运行时数据

    一.JDB调试        在预发环境下进行debug时,时常因为工具和环境的限制,导致debug体验非常差,那么有什么方法能够简化我们进行debug的体验吗?JDB就是一种.        JDB ...

  7. Java中的枚举Enum

    public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...

  8. C++中关于new和delete的使用

    1.创建动态数组 数组类型的变量有三个重要的限制:数组长度固定不变,在编译时必须知道它的长度,数组只在定义它的块语句中存在.对于动态分配的数组,虽然长度是固定的,但是动态分配的数组不必在编译时知道其长 ...

  9. 546A

    #include <stdio.h> int main() { int n1,n2,n3; int ans; scanf("%d %d %d", &n1, &a ...

  10. IOP知识点(2)

    1   URL资源访问不足时,需要添加URL权限 2   重定向问题解决办法:3  cloud-service-factory 项目 gradlew方法 1   URL资源访问不足时,需要添加URL权 ...