学习记录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. ubuntu windows10 in GPT HDD GRUB Boot

    some thing wrong with my input, I can just use English  -_-!!! The HDD have two kinds of formart, GP ...

  2. root用户远程登录Ubuntu

    安装了一台Ubuntu的服务器,由于大家都需要使用,因此创建了多个用户,多台windows机器用过Putty远程登录,但是默认情况下创建的用户都是普通用户,也就是说很多root用户能够使用的权限以及命 ...

  3. 递归、嵌套for循环、map集合方式实现树形结构菜单列表查询

    有时候, 我们需要用到菜单列表,但是怎么样去实现一个菜单列表的编写呢,这是一重要的问题. 比如我们需要编写一个树形结构的菜单,那么我们可以使用JQuery的zTree插件:http://www.tre ...

  4. 【SQL】from a,b。表a 和b之间是什么关系?

    1.select a.id from a,b……——>这里a和b用逗号隔开,a,b之间默认是inner join的关系.

  5. 并发编程---互斥锁---互斥锁与join的区别

    互斥锁 互斥锁:就是把多个进程并发,修改成一块共享数据的操作变成串行,保证是一个一个来修改的. 缺点:效率低,加锁过程复杂 优点:增加了安全性 from multiprocessing import ...

  6. 呼叫转接ECT

    ECT(Explicit Call Transfer,呼叫转接)是一种较为特殊的补充业务.签约ECT业务的用户A先呼叫用户B,在与用户B建立通话后,用户A通过终端发起保持用户B呼叫的请求,此时用户B会 ...

  7. [php] 索引数组合并选择两数组相加

    header("Content-Type:text/html;charset=utf-8");$arr1= Array ( 0 => Array ( 'pic' => ...

  8. LNMP安装目录及配置文件

    LNMP安装目录及配置文件位置 LNMP相关软件安装目录Nginx 目录: /usr/local/nginx/MySQL 目录 : /usr/local/mysql/MySQL数据库所在目录:/usr ...

  9. python的类变量和对象变量[转]

    原文章:https://www.cnblogs.com/gtarcoder/p/5005897.html __dict__里存着{"属性名":属性值}. python是一种解释性的 ...

  10. echarts 实现tooltip双栏效果

    实现效果如下: 代码: //option tooltip: { trigger: 'axis', axisPointer: { label: { show: true, fontSize: 15 } ...