当前位置: 首页 > news >正文

python基础day08

1.闭包:

  • 闭包的使用场景:

       当函数调用完,函数内定义的变量都销毁了,但是我们有时候需要保存函数内的这个变量,每次在这个变量的基础上完成一系列的操作,比如: 每次在这个变量的基础上和其它数字进行求和计算。

  • 闭包的定义:

       在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包

  • 闭包的作用:

       闭包可以保存函数内的变量,不会随着函数调用完而销毁。

  • 闭包的构成条件:

      ①在函数嵌套(函数里面再定义函数)的前提下。

      ②内部函数使用了外部函数的变量(还包括外部函数的参数)。

      ③外部函数返回了内部函数。

  • 闭包流程图:

2.装饰器:

  • 装饰器的作用:

       在不改变原有函数的源代码的情况下,给函数增加新的功能。

  • 装饰器的功能特点:

      ①不修改已有函数的源代码。

      ②给已有函数增加额外的功能。

  • 装饰器的使用步骤:

      ①定义一个装饰器(装饰器的本质是闭包)。

      ②使用装饰器装饰函数。

def check(fn):def inner():pint("请先登录")fn()return innerdef comment():print("发表评论")comment = check(comment)
comment()
  • 装饰器的流程图:

  • 通用装饰器:
import tracebackdef outer(fn):def inner(*args, **kwargs):try:fn(*args, **kwargs)except Exception as e:with open("error.log", "a", encoding="utf-8") as file:file.write(traceback.format_exc())return inner@outer
def print_list(my_list):for i in my_list:print(i)@outer
def get_sum(a, b):print(a + b)print_list([1, 45, 76])
get_sum(10, b=20)
  • 带有参数的装饰器:
import tracebackdef foo(path="error.log"):def outer(fn):print(path)def inner(*args, **kwargs):try:fn(*args, **kwargs)except Exception as e:with open(path, "a", encoding="utf-8") as file:file.write(traceback.format_exc())return innerreturn outer@foo()
def print_name():print(name)print_name()

3.IP地址:

  • 作用 : 标识网络中唯一的一台设备。
  • 分类 : IPv4和IPv6
  • 查看IP地址的命令 : 

        Windows:ipconfig

        Linux 和 Mac:ifconfig

  • 检查电脑网络是否正常:

   ping www.baidu.com 是否能连接互联网

   ping 127.0.0.1 本地回环地址,检查网卡是否正常

4.端口和端口号:

  • 作用 : 标识一台设备的一个网络应用程序。一台计算机最多有65536个端口,为了区分端口,每个端口都有编号:0-65535
  • 分类:

        知名端口号:范围是0到1023,系统预留的一些端口号,不建议使用。

        动态端口号:范围是1024到65535,建议使用。

  • 注意:

       (1) 一些动态端口号被一些常见程序占用了,自己写网络程序时,也不建议使用,比如:MySQL数据库 3306、redis数据库 6379、HDFS 9870等。

       (2) 如果程序员开发的网络程序没有设置端口号,操作系统会在动态端口号这个范围内随机生成一个给应用程序使用。

       (3) 当运行一个网络程序默认会有一个端口号,当这个程序退出时,所占用的这个端口号就会被释放。

5.TCP协议:

  • TCP概念 :

       TCP(Transmission Control Protocol) 是一种网络传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议

  • TCP 的特点 :

       面向连接(三次握手)

       可靠传输:保证数据不丢包\不乱序

  • TCP 通信步骤

       创建连接

       传输数据

       关闭连接

6.socket:

  • 简介 : socket (简称 套接字) 是进程之间通信一个工具,是操作系统提供的网络编程接口,屏蔽通过TCP/IP及端口进行网络数据传输的细节。
  • 作用 : 进程之间的网络数据传输。
  • 使用场景 : 网络相关的应用程序或者软件都使用到了 socket。

7.TCP网络应用程序开发流程:

  • TCP网络程序开发流程

  • 1)客户端程序的开发流程:主动连接的

             1. 创建套接字对象
2. 连接服务端
3. 发送数据
4. 接受数据
5. 关闭连接

# 1.创建客户端的套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.通过客户端套接字连接服务器程序
client_socket.connect(("127.0.0.1", 8080))# 3.给服务器发送消息
send_msg = input("请输入给客户端发送的消息")
client_socket.send(send_msg.encode())# 4.接收服务端回应的消息
recv_msg = client_socket.recv(1024)# 5.关闭客户端套接字
client_socket.close()
  • 2)服务端程序的开发流程:等待连接的

             1. 创建监听套接字对象
2. 绑定端口
3. 开始监听
4. 等待连接
5. 发送数据
6. 接受数据
7. 关闭连接

# 1.创建一个服务端监听的套接字
# socket.AF_INET:表示使用IPv4的地址
# socket.SOCK_STREAM:表示使用TCP协议
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.绑定服务端程序的IP和端口号
server_socket.bind(('127.0.0.1', 8080))# 3.设置监听
# 127表示服务端监听套接字同一时间最多支持127个客户端发起连接请求
server_socket.listen(127)# 4.等待客户端程序连接服务端程序
# accept方法会默认阻塞,直到客户端进行连接
# server_client:专门用于和客户端进行通信的套接字
# ip_port:客户端的ip和端口号
server_client, ip_port = server_socket.accept()# 5.服务器接收来自客户端的消息
# 1024表示每次最多接收1024bytes
# 当客户端没有给服务器发送消息时,recv方法会阻塞等待,直到客户端发送了消息
recv_msg = server_client.recv(1024)
print("接收到客户端的消息", recv_msg.decode())# 6.服务器给客户端回应一个消息
send_msg = input("请输入响应的消息")
server_client.send(send_msg.encode())# 7.关闭服务端套接字
server_client.close()
server_socket.close()

8.TCP文件传输:

  • 客户端:
import socketclient_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("127.0.0.1", 8080))
file = open("小电影.mp4", "rb")
while True:data = file.read(1024)client_socket.send(data)if len(data) == 0:breakfile.close()
client_socket.close()
  • 服务端:
import socketserver_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("127.0.0.1", 8080))
server_socket.listen(128)
server_client, ip_port = server_socket.accept()
file = open("./dest/小电影.mp4", "wb")
while True:data = server_client.recv(1024)file.write(data)if len(data) == 0:break
file.close()
server_client.close()
server_socket.close()

9.recv 方法解阻塞的 3 种情况

1)对端 发送过来了数据

socket套接字对象.send(发送数据)

2)对端 socket 套接字关闭了输出流

# socket.SHUT_WR
# socket.SHUT_RD
socket套接字对象.shutdown(socket.SHUT_WR)

3)对端 socket 套接字被关闭

scoket套接字对象.close()

10.本机回环地址、局域网地址、外网地址

  • 本机回环地址:127.0.0.1或localhost域名,如果运行网络程序时,使用的是本地回环地址,那么该网络程序只有在本机才能进行访问。
  • 局域网地址:局域网中的每台机器,都会有一个局域网的地址,比如:一个班级、一个公司,如果运行网络程序时,使用的是局域网地址,那么该网络程序可以被同一个局域网的其他机器进行访问。
  • 外网地址:也叫公网地址,如果运行网络程序时,使用的是外网地址,那么只要有网,就能访问该网络程序。

http://www.dtcms.com/a/270424.html

相关文章:

  • linux wsl2 docker 镜像复用快速方法
  • 【读代码】GLM-4.1V-Thinking:开源多模态推理模型的创新实践
  • 基于模板设计模式开发优惠券推送功能以及对过期优惠卷进行定时清理
  • C++ 遍历可变参数的几种方法
  • 数据库表设计:图片存储与自定义数据类型的实战指南
  • C语言宏替换比较练习
  • 暑假算法日记第四天
  • 5.6.2、ZeroMQ源码分析
  • 利用AI Agent实现精准的数据分析
  • ARM环境openEuler2203sp4上部署19c单机问题-持续更新
  • VM上创建虚拟机以及安装RHEL9操作系统并ssh远程连接
  • 大模型系列——RAG-Anything:开启多模态 RAG 的新纪元,让文档“活”起来!
  • Proface触摸屏编程软件(GP-Pro EX)介绍及下载
  • 金融行业信息
  • 力扣-75.颜色分类
  • Sentinel入门篇【流量治理】
  • 行业实践案例:医疗行业数据治理的挑战与突破
  • 【RAG知识库实践】数据源Data Source
  • ABP VNext + .NET Minimal API:极简微服务快速开发
  • B. Shrinking Array/缩小数组
  • Web后端实战:(部门管理)
  • 数据结构*搜索树
  • 二极管常见种类及基本原理
  • 【牛客刷题】小红的red字符串
  • MyBatis-Plus:提升数据库操作效率的利器
  • AB实验的长期影响
  • 【数据结构】复杂度分析
  • SpringBoot框架完整学习指南
  • [创业之路-489]:企业经营层 - 营销 - 如何将缺点转化为特点、再将特点转化为卖点
  • 钉钉企业应用开发技巧:在单聊会话中实现互动卡片功能