学习记录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...相关推荐

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

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

  2. 用python可以处理xml文件怎么打开_Python大神都是这样处理xml文件的!

    最近有同学询问如何利用 Python 处理 xml 文件,特此整理一个比较简洁的操作手册,供大家参阅. 首先准备一个xml文件,xml中的内容如下所示.存储为:student.xml 如果要获取这个x ...

  3. python大数据运维常用脚本_python大数据运维

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. python由谁设计并领导开发_Python全栈开发之路 【第七篇】:面向对象编程设计与开发(1)...

    本节内容 一.编程范式 编程指的是写程序.敲代码,就是指程序员用特定的语法.数据结构和算法编写的代码,目的是来告诉计算机如何执行任务的. 在编程的世界里最常见的两大流派是:面向过程与面向对象.&quo ...

  5. python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记...

    ‍Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记‍ 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...

  6. python 批量下载知网(cnki)论文_Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 顶...

    ‍Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记‍ 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量 ...

  7. python function at 0x00000_Python 中的函数装饰器和闭包

    本文是<流畅的Python>第7章的学习笔记. 函数装饰器可以被用于增强方法的某些行为,如果想自己实现装饰器,则必须了解闭包的概念. 装饰器的基本概念 装饰器是一个可调用对象,它的参数是另 ...

  8. python架构师是做什么的_架构师成长之路(1)--什么是架构师

    前言: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知. 如果我们要成为架构师 ...

  9. python为什么叫大蟒蛇_Python(大蟒蛇)与云计算

    初看起来,大蟒蛇(Python)与云计算,两者"风.牛.马"不相及,根本扯不上关系.本文却想讲一个小故事,把这两者联系起来. 当今,在我们国内,云计算可以说是一个比较热门的&quo ...

最新文章

  1. android调用文件管理打开某个路径,安卓 通过intent调用系统文件管理器打开指定路径目录...
  2. Django几种缓存机制的配置和应用
  3. xlst 解析 html c,怎樣實現利用xslt把xml文件內容顯示到html文件中?急!
  4. 数据集shuffle方法中buffer_size的理解
  5. 计算机基础 课程简介,课程简介及计算机基础知识课件.ppt
  6. 如何对linux文件进行编译,linux编译和执行命令都有哪些?该如何实现?
  7. [Leetcode][第718题][JAVA][最长重复子数组][动态规划][滑动窗口][暴力]
  8. vscode gcc debug dbg gdb c cpp c++ cuckoo monitor
  9. java rsa算法_求RSA算法JAVA实现源代码(带界面的)
  10. Java(4)---Java 对象和类
  11. linux之解决libipopt.so.1: Cannot open shared object file
  12. 2012.4.16总结(四)
  13. java常用快捷键 智能提示 及快捷键冲突
  14. 美国禁止与字节跳动及微信交易,45 天后生效,字节跳动回应来了!
  15. 北京科技大学 工科物理实验 大二下
  16. Latex:字体设置
  17. hyperf获取客户端真实ip
  18. Android 实现最新QQ登陆页面
  19. tomcat启动过程报the JDBC Driver has been forcibly unregistered问题的修复过程
  20. html怎样自动播放视频,html5自动播放mov格式视频的实例代码

热门文章

  1. 2.4一元多项式的表示及相加
  2. 将(*)的ASCII码2AH送入内存段1000H开始的100个单元中
  3. 动易php,动易数据转成dedecms的php程序
  4. java 缓冲区溢出_基于数组越界的缓冲区溢出
  5. 君威u0073故障码解决_格力多联机同时报三个故障“U2”“L0”“d9”怎么修?
  6. ubuntu 16.04 源码安装samba并且配置
  7. (王道408考研操作系统)第二章进程管理-第四节2:死锁处理策略之避免死锁(银行家算法)
  8. (王道408考研操作系统)第一章计算机系统概述-第一节3:操作系统的运行机制与体系结构
  9. (计算机组成原理)第二章数据的表示和运算-第三节3:浮点数加减运算
  10. hdoj4710 规律题