10.29笔记

目录

一、列表生成式

二、生成器

三、字节流

四、python链接msql

五、多进程

进程之间不共享变量:全局变量在多个进程中不共享:进程之间的数据是独立的,默认情况下互不影响

六、正则表达式

七、re模板


一、列表生成式

  列表生成式即List    Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

          列表生成式的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。列表表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以if和for语句为上下文的表达式运行完成之后产生。
 

list1 =[]
for i in range(1,11):
    list1.append(i*i)
print(list1)

二、生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器

from collections.abc import Iterator

list1 = [x for x in range(1, 1111)]
print(list1)
list2 = (x for x in range(1, 1111))
print(list2)
print(f"生成器list2是否是迭代器:{isinstance(list2, Iterator)}")
print(next(list2))

三、字节流

在Python中,读取字节流文件有两种主要方式:

1. 分段读取:每次读取一定数量的字节,处理一部分后,再继续读取。这种方式通常用于较大的文件或一个文件被重复读取时。

2. 一次读取全部字节:通常出现在字节数较少的情况下。

为了通过字节数来进行文件的读取,我们主要使用read()函数,但需要借助open()函数以可读模式打开,随后再调用read()函数进行字节读取。需要注意的是,操作文件结束后,需要使用close()函数手动关闭文件,以避免不必要的错误。

f = open("test.txt", "rb")  # b:字节
msg = f.read()
print(msg)
print(msg.decode())  # 转换成字符

四、python链接msql

MySQL是Web世界中使用最广泛的数据库服务器。SQLite的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite。

此外,MySQL内部有多种数据库引擎,最常用的引擎是支持数据库事务的InnoDB。

msql:使用方法如下:

from pymysql import Connection
conn=Connection(
    host = "localhost",
    port = 3306,
    user ="root",
    password = "123456"
)
print(dir(conn))
print(conn.get_server_info())
conn.close
#选择操作的数据库
conn.select_db("数据库名")
#创建游标
cur = conn.cursor()
#print(dir(cur))

#执行sql语句
#cur.exectue("create table student (uname varchar(20),age int,tel int)")
cur.execute("insert into student (uname, age ,tel ) values('刘德华',61,110),")
conn.commit()
cur.execute("selete*fron student where age > 60;")
t2 =cur.fetchal

五、多进程

主进程与子进程:
程序执行就是一个进程
主程序(就是主进程)中可以包含很多的其他进程。在主进程中添加了子进程,这样每个子进程可以在不同的gpu上跑,就可以实现并行。如果不加多进程,那么只能单进程运行,速度很慢。
可能子进程的函数还没有跑完,可是主进程中已经完了。(比如子进程中有sleep方法)。

由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块multiprocessing模块提供了一个Process类来代表一个进程对象

import  Process
import multiprocessing
import  os

创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,start()方法启动

def test2():
   for i in range(4):
       print("2222")
       time.sleep(3)
   print(f"子进程test2的编号是:{os.getpid()}")
if __name__ =='__main__' :
    test2_process = multiprocessing.Process(target=test2)
    test2_process.start()

进程之间不共享变量:全局变量在多个进程中不共享:进程之间的数据是独立的,默认情况下互不影响

六、正则表达式

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

字符描述意思
^匹配输入字符串的开始位置。
$匹配输入字符串的结束位置。
[^ABC]匹配除了 [...] 中字符的所有字符
[A-Z]A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。
\w

匹配字母、数字、下划线。等价于 [A-Za-z0-9_]

\W匹配非字母、数字、下划线。
( )标记一个子表达式的开始和结束位置。

所以我们判断一个字符串是否是合法的Email的方法是:

  1. 创建一个匹配Email的正则表达式;

  2. 用该正则表达式去匹配用户的输入来判断是否合法。

最后需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符

七、re模板

当我们在Python中使用正则表达式时,re模块内部会干两件事情:

  1. 编译正则表达式,如果正则表达式的字符串本身不合法,会报错;

  2. 用编译后的正则表达式去匹配字符串。

import re

a = re.match(r".+", "nhjc")
print(a)

b = re.findall(r"a", "nhjc")
print(b)
'''
iter=re.finditer(r"a","nhjc")
print(iter)
print(next(iter))
print(next(iter))
'''
str1 = "<a>item1</a><a>item2</a>"
a = re.match(r"<([a-z]+)>.*</\1>", str1)
print(a)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值