python之开发笔记

ops/2024/11/24 14:02:51/

1、图标插件pyecharts

pyecharts - A Python Echarts Plotting Library built with love.

Document

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

#导包
from pyecharts.charts import Line
from pyecharts.options import TitleOpts,LegendOpts,ToolboxOpts,VisualMapOpts
#得到折线图对象
line = Line()
#添加x轴数据
line.add_xaxis(["中国","美国","英国"])
#添加y轴
line.add_yaxis("GDP",[30,20,10])#设置全局配置
line.set_global_opts(title_opts=TitleOpts(title="标题",pos_left="center",pos_bottom="1%"),legend_opts = LegendOpts(is_show=True),toolbox_opts=ToolboxOpts(is_show=True),visualmap_opts=VisualMapOpts(is_show=True)
)#生成图表
line.render()执行上面代码,会上传对应的html图标页面

2、mysql连接插件pymysql

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

from pymysql import Connectionconn = Connection(host="localhost",port=3306,# autocommit=True, # 自动提交user="root",password="root",database="test",charset="utf8"
)print(conn.get_server_info())
# 获取游标对象
cursor = conn.cursor()
# 选择数据库  与上面的   database="test",  二选1
#conn.select_db("test")  
# 执行sql
# cursor.execute("create table test_pumysql(id int);")# 查询
cursor.execute("select * from user")
results = cursor.fetchall()
print(results)
for r in results:print(r)cursor.execute("insert into user values( 31,'test', '123',234234)")
# 提交
conn.commit()
# 关闭连接
conn.close()

防止sql注入,构造参数列表,不直接sql字符串拼接

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

params = ""
cursor.execute("select * from user where name=%s",params)

3、数据分析插件pyspark

其中部分功能需要配合hadoop使用

下载hadoop安装包 tar.gz

解压到任意位置

python代码中使用os模块配置:os.environ['HADOOP_HOME']=''

下载winutils.exe,并放到hadoop解压文件夹的bin目录内

下载hadoop.dll,并放到system32文件夹内

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import osfrom pyspark import SparkConf,SparkContextos.environ['PYSPARK_PYTHON'] = 'C:\Users\ASUS\PycharmProjects\pythonProject\venv\Scripts\python.exe'
os.environ['HADOOP_HOME']=''
conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)# 读取文件转换为rdd
file_rdd =sc.textFile("D:/aaa.txt")rdd1.Map();#解嵌套 例如:[[],[],[]] => []
rdd1.flatMap();
#按key分组,进行聚合操作
rdd1.reduceByKey()
#对数据进行过滤
rdd1.filter(lambda num: num % 2 == 0)
print(rdd1.collect())
#去重,无需参数
rdd2 = rdd1.distinct()
#进行排序   参数:方法,排序方式,分区
final_rdd=rdd1.sortBy(方法,ascending=false,numPartitions=1)
#将rdd转换为list对象,即可以进行输出
rdd1.collect()
#对rdd进行两两聚合
rdd1.reduce(lambda a,b: a+b)
#取出rdd中前n个元素
rdd1.take(3)
#统计rdd中有多少条数据
rdd1.count()sc.stop()

4、数据输出

需要下载hadoop安装包,解压,然后配置

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

os.environ['HADOOP_HOME']='解压文件的路径'

下载winutils.exe,并放入hadoop解压文件夹的bin目录

下载hadoop.dll,并放入system32文件夹内

要输出文件只有一个,则需要设置conf.set("spark.default.parallelism","1")

或者在创建rdd的时候设置rdd1 = sc.parallelize([1,2,3,4],numSlices=1),即numSlices=1

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
conf.set("spark.default.parallelism","1")
sc = SparkContext(conf=conf)#输出到文件   输出的是文件夹,里面有多个文件
rdd3=sc.parallelize([1,2,3,4,5])
rdd3.saveAsTextFile("../data/oupt/test")

5、闭包

定义双层嵌套函数,内层函数可以访问外层函数的变量,将内层函数作为外层函数的返回,此内层函数就是闭包函数

在闭包函数中想要修改外部函数的变量值,需要用nonlocal声明这个外部变量

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

def account_create(initial_amount=0):def amt(num,deposit = True):nonlocal initial_amountif deposit:initial_amount+=numprint(f"存款:+{num},账户余额:{initial_amount}")else:initial_amount -=numprint(f"取款:-{num},账户余额:{initial_amount}")return amtatm = account_create()
atm(100)
atm(200)
atm(-100)

6、装饰器

6.1 方法装饰器

装饰器其实也是一种闭包,其功能就是再不破坏目标函数原有的代码和功能的前提下,为目标函数增加新功能。

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# 1、装饰器的一般写法(闭包)
def outer(func):def inner():print("我睡觉了......")func()print("我起床了......")return innerdef sleep():import randomimport timeprint("睡眠......")time.sleep(random.randint(1,5))
# print("我睡觉了......")
# sleep()
# print("我起床了......")fn = outer(sleep)
fn()# 2、装饰器的快捷写法(语法糖)
def outer(func):def inner():print("我睡觉了......")func()print("我起床了......")return inner@outer
def sleep():import randomimport timeprint("睡眠......")time.sleep(random.randint(1,5))sleep()

不定长参数: *args,**kwargs 表示可以传入任意的参数和键值对的参数,例如(1,2,3,age="18")

多装饰器的使用

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# 装饰器1
def check1(fn):def inner():print("登陆验证1.。。。")fn()return inner
# 装饰器2
def check2(fn):def inner():print("登陆验证2.。。。")fn()return inner# 被装饰的函数
@check1
@check2  # 靠的最近的先起到装饰作用
def comment():print("发布言论")comment()

带参数的装饰器

装饰器的外部函数只能传一个参数

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# 装饰器
def logging(flag):def check1(fn):def inner(num1,num2):if flag =="+":print("--正在努力加法计算---")elif flag=="-":print("--正在努力减法计算---")result = fn(num1,num2)return resultreturn inner#返回装饰器return check1# 被带有参数的装饰器装饰的函数
@logging('+')
def comment(a,b):result = a + breturn result# print(result)result = comment(1,3)
print(result)

6.2 类装饰器

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# 定义一个类,实现_call_方法
class Check(object):def __init__(self,fn):self.__fn = fndef __call__(self, *args, **kwargs):print("我是call方法")self.__fn()#被装饰的函数
@Check
def comment():print("发表言论")comment()

property属性

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# ======1、装饰器方式=======================
class Person(object):def __init__(self):self.__age = 0#获取属性@propertydef age(self):return self.__age#修改属性@age.setterdef age(self,new_age):self.__age = new_age# @property
p = Person()
print(p.age)
#修改属性
p.age = 100
print(p.age)#  =====2、类属性方式=================================
class Person(object):def __init__(self):self.__age = 0#获取属性def get_age(self):return self.__age#修改属性def set_age(self,new_age):if new_age>=150:print("年龄错误")else:self.__age = new_ageage = property(get_age,set_age)p = Person()
print(p.age)
#修改属性
p.age = 100
print(p.age)

7、设计模式

7.1 单例模式

保证一个类只能有一个实例,并提供一个访问它的全局访问点

即创建一个实例后,不管在哪调用都是同一个

节省内存、节省创建对象的开销

7.2工厂模式

将对象的创建转换为由特定的工厂方法来创建

8 、多进程

进程优缺点:

优点:可以用多核

缺点:资源开销大

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import multiprocessing
import timedef work():for i in range(3):print("work",i)time.sleep(0.2)def work2():for i in range(3):print("work2 ",i)time.sleep(0.2)if __name__ == '__main__':work_process = multiprocessing.Process(target=work)work_process2 = multiprocessing.Process(target=work2)work_process.start()work_process2.start()

主进程会等待子进程结束才结束,设置进程守护,则可以让子进程跟着主进程一起结束

9、多线程

线程优缺点:

优点:资源开销小

缺点:不能使用多核

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import threading
import timedef work():for i in range(3):print("work",i)time.sleep(0.2)def work2():for i in range(3):print("work2 ",i)time.sleep(0.2)if __name__ == '__main__':work_thread = threading.Thread(target=work)work2_thread = threading.Thread(target=work2)work_thread.start()work2_thread.start()

主线程会等待子线程结束才结束,设置线程守护,则可以让子线程跟着主线程一起结束

设置 daemon=True 参数

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

work_thread = threading.Thread(target=work,daemon=True)

或者在start前(但是此方法已经过时)

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

work_thread.setDaemon(True)

线程间的执行顺序是无序的

获取线程信息

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

current_thread = threading.current_thread()

线程间共享全局变量,但是可能导致全局变量数据错误的问题

解决办法:线程同步去操作同一个变量

9.1互斥锁

对共享数据进行锁定,保证同一时刻只有一个线程去操作

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import threading#全局变量
g_num = 0# 对 g_num进行加操作
def sum_num1():#上锁mutex.acquire()for i in range(1000000):global g_numg_num +=1#解锁mutex.release()print("g_num1:",g_num)# 对 g_num进行加操作
def sum_num2():# 上锁mutex.acquire()for i in range(1000000):global g_numg_num += 1# 解锁mutex.release()print("g_num2:", g_num)if __name__ == '__main__':# 创建锁mutex = threading.Lock()#创建子线程sum1_thread = threading.Thread(target=sum_num1)sum2_thread = threading.Thread(target=sum_num2)#启动线程sum1_thread.start()sum2_thread.start()

9.2死锁

使用互斥锁的时候,要注意在合适的位置释放锁,不然就会导致死锁

10、TCP服务:socket

10.1、客户端

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import socketif __name__ == '__main__':# 1、创建客户端套接字对象   AF_INET表四ipv4  SOCK_STREAM表示YCP传输协议类型tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 2、和服务端套接字建立连接tcp_client_socket.connect(("192.168.233.1",8080))# 3、发送数据tcp_client_socket.send("你好!".encode(encoding="utf-8"))# 4、接收数据   recv会阻塞等待数据的到来    recv表示每次接收数据的大小,单位是字节recv_data = tcp_client_socket.recv(1024)print(recv_data.decode(encoding="utf-8"))# 5、关闭客户端套接字tcp_client_socket.close()

10.2 服务端

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import socketif __name__ == '__main__':# 1、创建服务端套接字对象tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置端口复用   不设置的话,断开后再连接会提示端口已经在用tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)# 2、绑定IP地址和端口# tcp_server_socket.bind(("192.168.233.1",8080))#第一个ip地址设置为“”,默认为本机ip地址tcp_server_socket.bind(("", 8080))# 3、设置监听   128:表示服务端等待排队连接的最大数量tcp_server_socket.listen(128)# 4、等待客户端的连接请求  accept阻塞等待 ,返回一个用以和客户端socket,客户端的地址conn_socket,ip_port = tcp_server_socket.accept()print("客户端地址:",ip_port)# 5、接收数据recv_data = conn_socket.recv(1024)print("接收到的数据:",recv_data.decode())# 6、发送数据conn_socket.send("客户端你的数据我接收到了".encode())# 7、关闭套接字conn_socket.close()tcp_server_socket.close()

当客户端的套接字调用close后,服务器端的revc会解阻塞,返回的数据长度为0,服务端可以通过返回数据的长度来判断客户端是否已经下线,反之服务端关闭套接字,客户端的recv也会解阻塞,返回的数据长度也为0

10.3 多任务TCP服务端

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import socketif __name__ == '__main__':# 1、创建服务端套接字对象tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置端口复用tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)# 2、绑定IP地址和端口# tcp_server_socket.bind(("192.168.233.1",8080))#第一个ip地址设置为“”,默认为本机ip地址tcp_server_socket.bind(("", 8080))# 3、设置监听   128:表示服务端等待排队连接的最大数量tcp_server_socket.listen(128)while True:# 4、等待客户端的连接请求  accept阻塞等待 ,返回一个用以和客户端socket,客户端的地址conn_socket,ip_port = tcp_server_socket.accept()print("客户端地址:",ip_port)# 5、接收数据recv_data = conn_socket.recv(1024)print("接收到的数据:",recv_data.decode())# 6、发送数据conn_socket.send("客户端你的数据我接收到了".encode())# 7、关闭套接字conn_socket.close()tcp_server_socket.close()

上面方式需要一个客户端完成一个完整请求后,其他的请求才能进入,无法同时处理多个客户端的请求,所以需要使用下面多线程的方式

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import socket
import threading#处理客户端函数
def handle_client(conn_socket):# 5、接收数据recv_data = conn_socket.recv(1024)print("接收到的数据:", recv_data.decode())# 6、发送数据conn_socket.send("客户端你的数据我接收到了".encode())# 7、关闭套接字conn_socket.close()if __name__ == '__main__':# 1、创建服务端套接字对象tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置端口复用tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)# 2、绑定IP地址和端口# tcp_server_socket.bind(("192.168.233.1",8080))#第一个ip地址设置为“”,默认为本机ip地址tcp_server_socket.bind(("", 8080))# 3、设置监听   128:表示服务端等待排队连接的最大数量tcp_server_socket.listen(128)while True:# 4、等待客户端的连接请求  accept阻塞等待 ,返回一个用以和客户端socket,客户端的地址conn_socket,ip_port = tcp_server_socket.accept()print("客户端地址:",ip_port)# 使用多线程去接收多个客户端的请求sub_thread = threading.Thread(target=handle_client,args=(conn_socket,))sub_thread.start()tcp_server_socket.close()

11、web服务器

11.1静态web服务器

使用python自带的webfwq使用 python3 -m http.server 端口号这个命令即可,端口号可以省略,则使用默认端口号

自己开发

单用户请求,多任务需要改成多线程

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import socketif __name__ == '__main__':# 1、创建服务端套接字对象tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置端口复用tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)# 2、绑定IP地址和端口# tcp_server_socket.bind(("192.168.233.1",8080))#第一个ip地址设置为“”,默认为本机ip地址tcp_server_socket.bind(("", 8080))# 3、设置监听   128:表示服务端等待排队连接的最大数量tcp_server_socket.listen(128)while True:# 4、等待客户端的连接请求  accept阻塞等待 ,返回一个用以和客户端socket,客户端的地址conn_socket,ip_port = tcp_server_socket.accept()print("客户端地址:",ip_port)# 5、接收数据client_request_data = conn_socket.recv(1024).decode()print("接收到的数据:", client_request_data)# 获取用户请求资源的路径request_data = client_request_data.split(" ")print(request_data)#请求资源路径request_path = request_data[1]if request_path=="/":request_path = "/index.html"# 读取固定页面数据,把页面数据组装成http响应报文数据发送给浏览器try:with open("./static"+request_path,"rb") as f:filer_data = f.read()except Exception as e:#返回404错误数据# 应答行response_line = "HTTP/1.1 404 Not Found\r\n"# 应答头response_header = "Server:pwb\r\n"# 应答体response_body = "404 Not Found sorry"# 应答数据response_data = (response_line + response_header + "\r\n" + response_body).encode()# 6、发送数据conn_socket.send(response_data)else:# 应答行response_line = "HTTP/1.1 200 OK\r\n"# 应答头response_header = "Server:pwb\r\n"#应答体response_body = filer_data# 应答数据response_data = (response_line+response_header+"\r\n").encode()+response_body# 6、发送数据conn_socket.send(response_data)finally:# 7、关闭套接字conn_socket.close()tcp_server_socket.close()

多线程实现多客户端同时请求

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import socket
import threadingdef handle_client_request(conn_socket):# 5、接收数据client_request_data = conn_socket.recv(1024).decode()print("接收到的数据:", client_request_data)# 获取用户请求资源的路径request_data = client_request_data.split(" ")print(request_data)#判断客户端是否关闭if len(request_data)==1:conn_socket.close()return # 请求资源路径request_path = request_data[1]if request_path == "/":request_path = "/index.html"# 读取固定页面数据,把页面数据组装成http响应报文数据发送给浏览器try:with open("./static" + request_path, "rb") as f:filer_data = f.read()except Exception as e:# 返回404错误数据# 应答行response_line = "HTTP/1.1 404 Not Found\r\n"# 应答头response_header = "Server:pwb\r\n"# 应答体response_body = "404 Not Found sorry"# 应答数据response_data = (response_line + response_header + "\r\n" + response_body).encode()# 6、发送数据conn_socket.send(response_data)else:# 应答行response_line = "HTTP/1.1 200 OK\r\n"# 应答头response_header = "Server:pwb\r\n"# 应答体response_body = filer_data# 应答数据response_data = (response_line + response_header + "\r\n").encode() + response_body# 6、发送数据conn_socket.send(response_data)finally:# 7、关闭套接字conn_socket.close()if __name__ == '__main__':# 1、创建服务端套接字对象tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置端口复用tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)# 2、绑定IP地址和端口# tcp_server_socket.bind(("192.168.233.1",8080))#第一个ip地址设置为“”,默认为本机ip地址tcp_server_socket.bind(("", 8080))# 3、设置监听   128:表示服务端等待排队连接的最大数量tcp_server_socket.listen(128)while True:# 4、等待客户端的连接请求  accept阻塞等待 ,返回一个用以和客户端socket,客户端的地址client_socket,ip_port = tcp_server_socket.accept()print("客户端地址:",ip_port)sub_thread  = threading.Thread(target=handle_client_request,args=(client_socket,))sub_thread.start()# tcp_server_socket.close()   不注释的话一个请求完成就会关闭程序

11.2 面向对象开发

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import socket
import threadingclass HttpWebServer:def __init__(self):# 1、创建服务端套接字对象self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口复用self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 2、绑定IP地址和端口# tcp_server_socket.bind(("192.168.233.1",8080))# 第一个ip地址设置为“”,默认为本机ip地址self.tcp_server_socket.bind(("", 8080))# 3、设置监听   128:表示服务端等待排队连接的最大数量self.tcp_server_socket.listen(128)def handle_client_request(self,conn_socket):# 5、接收数据client_request_data = conn_socket.recv(1024).decode()print("接收到的数据:", client_request_data)# 获取用户请求资源的路径request_data = client_request_data.split(" ")print(request_data)# 判断客户端是否关闭if len(request_data) == 1:conn_socket.close()return# 请求资源路径request_path = request_data[1]if request_path == "/":request_path = "/index.html"# 读取固定页面数据,把页面数据组装成http响应报文数据发送给浏览器try:with open("./static" + request_path, "rb") as f:filer_data = f.read()except Exception as e:# 返回404错误数据# 应答行response_line = "HTTP/1.1 404 Not Found\r\n"# 应答头response_header = "Server:pwb\r\n"# 应答体response_body = "404 Not Found sorry"# 应答数据response_data = (response_line + response_header + "\r\n" + response_body).encode()# 6、发送数据conn_socket.send(response_data)else:# 应答行response_line = "HTTP/1.1 200 OK\r\n"# 应答头response_header = "Server:pwb\r\n"# 应答体response_body = filer_data# 应答数据response_data = (response_line + response_header + "\r\n").encode() + response_body# 6、发送数据conn_socket.send(response_data)finally:# 7、关闭套接字conn_socket.close()def start(self):while True:# 4、等待客户端的连接请求  accept阻塞等待 ,返回一个用以和客户端socket,客户端的地址client_socket, ip_port = self.tcp_server_socket.accept()print("客户端地址:", ip_port)sub_thread = threading.Thread(target=self.handle_client_request, args=(client_socket,))sub_thread.start()if __name__ == '__main__':# 创建服务器对象my_web_server = HttpWebServer()my_web_server.start()

命令行启动动态绑定端口号 导入import sys

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import socket
import threading
import sysclass HttpWebServer:def __init__(self,port):# 1、创建服务端套接字对象self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口复用self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 2、绑定IP地址和端口# tcp_server_socket.bind(("192.168.233.1",8080))# 第一个ip地址设置为“”,默认为本机ip地址self.tcp_server_socket.bind(("", port))# 3、设置监听   128:表示服务端等待排队连接的最大数量self.tcp_server_socket.listen(128)def handle_client_request(self,conn_socket):# 5、接收数据client_request_data = conn_socket.recv(1024).decode()print("接收到的数据:", client_request_data)# 获取用户请求资源的路径request_data = client_request_data.split(" ")print(request_data)# 判断客户端是否关闭if len(request_data) == 1:conn_socket.close()return# 请求资源路径request_path = request_data[1]if request_path == "/":request_path = "/index.html"# 读取固定页面数据,把页面数据组装成http响应报文数据发送给浏览器try:with open("./static" + request_path, "rb") as f:filer_data = f.read()except Exception as e:# 返回404错误数据# 应答行response_line = "HTTP/1.1 404 Not Found\r\n"# 应答头response_header = "Server:pwb\r\n"# 应答体response_body = "404 Not Found sorry"# 应答数据response_data = (response_line + response_header + "\r\n" + response_body).encode()# 6、发送数据conn_socket.send(response_data)else:# 应答行response_line = "HTTP/1.1 200 OK\r\n"# 应答头response_header = "Server:pwb\r\n"# 应答体response_body = filer_data# 应答数据response_data = (response_line + response_header + "\r\n").encode() + response_body# 6、发送数据conn_socket.send(response_data)finally:# 7、关闭套接字conn_socket.close()def start(self):while True:# 4、等待客户端的连接请求  accept阻塞等待 ,返回一个用以和客户端socket,客户端的地址client_socket, ip_port = self.tcp_server_socket.accept()print("客户端地址:", ip_port)sub_thread = threading.Thread(target=self.handle_client_request, args=(client_socket,))sub_thread.start()def main():# 获取执行python程序的终端命令行参数print(sys.argv)if len(sys.argv != 2:print("格式错误 python3 xxx.py 9090")return#判断是否整型if not sys.argv[1].isdigit():print("格式错误 python3 xxx.py 9090")returnport = sys.argv[1]# 创建服务器对象my_web_server = HttpWebServer(port)my_web_server.start()if __name__ == '__main__':main()

12、with语句和上下文管理

作用:例如文件操作时,自动调用关闭文件操作,即使出现异常也会自动调用关闭

--javascripttypescriptshellbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

with open("1.txt","r") as f:rdata = f.read()print(rdata)

13、正则表达式

14、连接sqlserver

pip install pyodbc

15、生成和安装项目锁使用的包

生成包版本文件: pip freeze > requirements.txt

部署时安装: pip install -r requirements.txt


http://www.ppmy.cn/ops/136318.html

相关文章

1000:入门测试题目(http://ybt.ssoier.cn:8088/problem_show.php?pid=1000)

时间限制: 1000 ms 内存限制: 32768 KB 【题目描述】 求两个整数的和。 【输入】 一行&#xff0c;两个用空格隔开的整数。 【输出】 两个整数的和。 【输入样例】 2 3 【输出样例】 5 提交 代码 #include<bits/stdc.h> using namespace std; int a,b; in…

基于微信小程序的校园二手交易平台设计与实现,微信小程序(定制+讲解+咨询)校园二手商品在线交易系统、校园二手市场管理与推荐工具、智能化商品交易与推荐平台

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

万有引力定律和库仑定律:自然的对称诗篇

万有引力定律和库仑定律&#xff1a;自然的对称诗篇 在宇宙深邃的知识长河中&#xff0c;万有引力定律和库仑定律恰似两颗璀璨的明珠&#xff0c;闪耀着人类智慧与自然奥秘的光辉。 十七世纪&#xff0c;牛顿在对天体运行的深邃思索中&#xff0c;拨开重重迷雾&#xff0c;发现…

【数据分享】中国价格统计年鉴(2013-2024) PDF

数据介绍 犹如一座珍贵的宝库&#xff0c;全面而系统地记录了中国在这一时期的价格变动情况。它涵盖了丰富的内容&#xff0c;包括宏观经济指标、商品价格、居民消费价格以及城市物价监测等多个方面。 在宏观经济指标方面&#xff0c;年鉴中收录了 GDP、CPI、PPI 等重要数据&…

软件世界中的超级bug有哪些?

软件世界中的超级bug有很多&#xff0c;以下是一些历史上著名的案例&#xff1a; 1. Mars Climate Orbiter 1998&#xff1a;由于代码中的一个简单错误&#xff0c;导致火星气候轨道器发送了错误的导航信号&#xff0c;最终导致任务失败&#xff0c;损失超过1800万美元。 2. M…

华为防火墙技术基本概念学习笔记

1.防火墙概述 1.1防火墙与交换机、路由器对比 路由器与交换机的本质是转发&#xff0c;防火墙的本质是控制。 防火墙与路由器、交换机是有区别的。路由器用来连接不同的网络&#xff0c;通过路由协议保证互联互通&#xff0c;确保将报文转发到目的地;交换机则通常用来组建局域…

【代码大模型的隐私安全】Unveiling Memorization in Code Models论文阅读

论文阅读 Unveiling Memorization in Code Models key word: LLM for SE, security and privacy 论文链接&#xff1a;https://arxiv.org/abs/2308.09932 仓库链接&#xff1a;https://github.com/yangzhou6666/Privacy-in-CodeModels 【why】 现存模型的出色表现可以归因于先…

《Hello YOLOv8从入门到精通》4, 模型架构和骨干网络Backbone调优实践

YOLOv8是由Ultralytics开发的最先进的目标检测模型&#xff0c;其模型架构细节包括骨干网络&#xff08;Backbone&#xff09;、颈部网络&#xff08;Neck&#xff09;和头部网络&#xff08;Head&#xff09;三大部分。 一、骨干网络&#xff08;Backbone&#xff09; Backb…