python高级基础

文章目录

  • python高级基础
    • 闭包
    • 修饰器
    • 单例模式跟工厂模式
      • 工厂模式
      • 单例模式
    • 多线程多进程
    • 创建websocket
      • 服务端
      • 手写客户端

python高级基础

闭包

简单解释一下闭包就是可以在内部访问外部函数的变量,因为如果声明全局变量,那在后面就有可能会修改
在闭包中的内部函数如果要修改外部变量就要借助nonlocal关键字

def outer(num1):def inner(num2):nonlocal  num1num1+=num2print(num1,num2)return inner
fn=outer(10)
fn(10) # 20
fn(10)  # 30

修饰器

闭包修饰器语法

def outer(fn):def inner():print('我睡觉了')fn()print('醒了')return innerdef sleep():import randomimport  timeprint('睡眠中。。。')time.sleep(random.randint(1,5))fn1=outer(sleep)
fn1()

注意看加粗的两个地方是语法糖 实际原理还是用的是闭包
在这里插入图片描述

单例模式跟工厂模式

工厂模式

优点:创建出来的每个对象都是独立的地址
缺点:部分属性不一致,但是都是独立的内存,消耗内存性能

class Person:pass
class Student(Person):pass
class Worker(Person):pass
class Teacher(Person):passclass PersonFac:def get_person(self,type):if(type=='s'):return Student()elif(type=='w'):return Worker()else:return Teacher()pf=PersonFac()
worker=pf.get_person('w')
stu=pf.get_person('s')
teacher=pf.get_person('t')print(worker,stu,teacher)

在这里插入图片描述

在这里插入图片描述

单例模式

实例化类,然后在这个单例类上面进行添加删除

# class Stu:
#     pass
#
# t1=Stu()
# t2=Stu()
# print(id(t1))   # 1755386051920
# print(id(t2))  # 1755386051984# 单例写法  工作中常把创建类单独提出文件 然后引入
class Stu:passt1=Stu()s1=t1
s2=t1
print(id(s1))   # 1790597823824
print(id(s2))  # 1790597823824

多线程多进程

以下代码是单线程执行,最终输出结果是一直执行sing方法因为是无限循环的

import timedef sing():while True:print('我在唱歌。。。')time.sleep(1)def dance():while True:print('我在跳舞。。。')time.sleep(1)if __name__=='__main__':sing()dance()

在这里插入图片描述


def sing(msg):while True:print(msg)time.sleep(1)def dance(msg):while True:print(msg)time.sleep(1)if __name__=='__main__':singThread=threading.Thread(target=sing,args=('我要唱歌',))  # 使用Thread方法开启线程  参数要一一对应不然就会跑到第一个参数所以这边使用具名参数danceThread=threading.Thread(target=dance,kwargs={'msg':'我在跳舞'})singThread.start()   #  线程启动danceThread.start()

这里面2个注意点

  • 以元祖形式传参,一个参数别忘了逗号
  • 以字典形式传参,参数要与方法参数一一对应不然会报错,参数名也不能变
    在这里插入图片描述

创建websocket

服务端

import socket
# 创建socket对象
socket_server=socket.socket()
# 绑定ip地址和端口
socket_server.bind(("localhost",8888))# 千万注意这里的传参是元组
# 监听端口
socket_server.listen(1)
# listen接收一个整数传参数,表示接收的链接数量# 等待客户端链接
# result:tuple=socket_server.accept()
# conn=result[0]  # 客户端和服务端的链接对象
# address=result[1]  # 客户端的地址信息
# 简写
conn,address =socket_server.accept() # 返回的是二元元祖(连接对象,客户端地址信息)
# 此方法是阻塞的 accept 如果没有链接下面的代码不执行print(f'接收到了{address}')
# 无线循环发消息 ,最终根据最后逻辑进行跳出自行解决
while True:data:str=conn.recv(1024).decode('GBK')print(f'客户顿发来的信息是{data}')msg=input('发送信息').encode("GBK")conn.send(msg)#关闭链接
conn.close()
socket_server.close()

如果报这种错说明你的数据不是utf-8的格式就可以打印出信息进行转换对应的格式

这种是GBK格式,自行百度

在这里插入图片描述
在这里插入图片描述
最终实现的效果

手写客户端

import socket
# 创建socket对象
socket_client=socket.socket()
# 绑定ip地址和端口
socket_client.connect(("localhost",9999))
while True:msg=input('请输入')socket_client.send(msg.encode('UTF-8')) # 输入信息转换recv_data=socket_client.recv(1024) #  recv缓冲区1024即可  单线程阻塞print(f'服务端返回的信息四{recv_data.decode("UTF-8")}')
socket_client.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/44478.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网智慧安防实训综合实训基地建设方案

一、系统概述 物联网智慧安防实训综合实训基地是一个为学生提供综合实践、培养技能的场所,专注于物联网技术与智慧安防应用的培训和实训。通过物联网智慧安防实训综合实训基地的建设和运营,学生可以在真实的环境中进行实践训练,提高其物联网技…

spring aop 的适用场景

Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的机制,它可以通过在应用程序中定义横切关注点(Cross-cutting Concerns),将这些关注点模块化,并将它们与核心业务逻…

CentOS下卸载node.js

目录 一、卸载 npm二、卸载node三、删除残留文件1. /usr/local/lib 下删除所有 node 和 node_modules文件夹2. /usr/local/include 下删除所有 node 和 node_modules 文件夹3. /usr/local/bin 下删除 node 的可执行文件 一、卸载 npm sudo npm uninstall npm -g 二、卸载node…

嵌入式入门教学——C51(中)

嵌入式入门教学汇总: 嵌入式入门教学——C51(上)嵌入式入门教学——C51(中)嵌入式入门教学——C51(下) 目录 七、矩阵键盘 八、定时器和中断 九、串口通信 十、LED点阵屏 十一、DS1302实…

Flink CDC系列之:Oracle CDC Connector

Flink CDC系列之:Oracle CDC Connector 一、依赖关系二、SQL 客户端 JAR三、设置Oracle1.对于非 CDB 数据库2.对于CDB数据库四、创建Oracle CDC table五、连接器选项六、局限性七、可用元数据八、特征1. Exactly-Once处理2.启动阅读位置3.单线程读取4.数据流源九、数据类型映射…

Spring 6.0官方文档示例(24): replace-method的用法

一、原始bean定义 package cn.edu.tju.study.service.anno.domain;public class MyValueCalculator {public String computeValue(String input) {return "you inputted: " input;}// some other methods... }二、replace bean定义 package cn.edu.tju.study.serv…

LED驱动型IC芯片的原理介绍

一、LED驱动器是什么 LED驱动器(LED Driver),是指驱动LED发光或LED模块组件正常工作的电源调整电子器件。由于LED PN结的导通特性决定,它能适应的电源电压和电流变动范围十分狭窄,稍许偏离就可能无法点亮LED或者发光效…

设计模式十七:迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种访问聚合对象(例如列表、集合、数组等)中各个元素的方法,而无需暴露其内部表示。迭代器模式将遍历元素和访问元素的责任分离开来&#xff0…

CentOS系统环境搭建(十三)——CentOS7安装nvm

centos系统环境搭建专栏🔗点击跳转 CentOS7.9安装nvm 文章目录 CentOS7.9安装nvm1.安装2.刷新系统环境3.查看所有node4.安装Node.js版本5.查看已安装版本号6.使用指定版本7.设置默认版本8.验证 在我们的日常开发中经常会遇到这种情况:手上有好几个项目&…

TCP粘包

TCP粘包(TCP packet fragmentation and reassembly)是指在使用TCP协议进行数据传输时,发送方发送的多个小的数据包(消息)在网络传输过程中会被合并成一个大的数据包,或者一个大的数据包被拆分成多个小的数据…

代码随想录算法训练营第53天|动态规划part14

8.19周六 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划 详细布置 1143.最长公共子序列 题目:两个字符串,问最长的公共子序列多长(不连续) 题解: 1、dp[i][j]:长度为[0, i - 1]的字…

04_Redis与mysql数据双写一致性案例

04——redis与mysql数据双写一致性 一、canal 是什么 canal[ka’nel,中文翻译为水道/管道/沟渠/运河,主要用途是用于MySQL数据库增量日志数据的订阅、消费和解析,是阿里巴巴开发并开源的,采用Java语言开发; 历史背景是早期阿里巴巴因为杭州和…

大数据课程J3——Scala的类定义

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Scala的柯里化 Currying; ⚪ 掌握Scala的类定义; ⚪ 掌握Scala的样例类、option类; ⚪ 掌握Scala的隐式转换机制; 一、柯里化 Currying 柯里化(Currying)技术 Christopher St…

Java集合底层源码剖析-HashMap扩展

文章目录 LinkedHashMap有顺序的map数据结构概述基本属性构造方法Entry定义put()方法get()方法TreeMap 自定义排序规则的红黑树map数据结构put函数源码get获取函数源码如何保证有序性HashSetHashSet如何去重源码分析LinkedHashSetTreeSetIterator迭代器应对多线程并发修改的fai…

神经网络基础-神经网络补充概念-47-动量梯度下降法

概念 动量梯度下降法(Momentum Gradient Descent)是一种优化算法,用于加速梯度下降的收敛速度,特别是在存在高曲率、平原或局部最小值的情况下。动量法引入了一个称为“动量”(momentum)的概念&#xff0c…

无涯教程-TensorFlow - XOR实现

在本章中,无涯教程将学习使用TensorFlow的XOR实现,在TensorFlow中开始XOR实施之前,看一下XOR表值。这将帮助了解加密和解密过程。 A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 XOR密码加密方法基本上用于加密,即通过生成与适当密钥匹配…

W6100-EVB-PICO 做UDP Client 进行数据回环测试(八)

前言 上一章我们用开发板作为UDP Server进行数据回环测试,本章我们让我们的开发板作为UDP Client进行数据回环测试。 连接方式 使开发板和我们的电脑处于同一网段: 开发板通过交叉线直连主机开发板和主机都接在路由器LAN口 测试工具 网路调试工具&a…

【学习笔记】[AGC064D] Red and Blue Chips

神一样的 Kidulthood 考场上就看出来了这道题其实不难,但是祂没时间写了😅 假设最后从底部到顶部的位置序列为 { x i } \{x_i\} {xi​},那么每一步的操作就是固定的 将结论拓展可以得到,如果 x i > x i 1 x_i>x_{i1} xi​…

leetcode-动态规划-32-最长有效括号

题目描述 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s “(()” 输出:2 解释:最长有效括号子串是 “()” 示例 2: 输…

AI代码补全 案例 - 阿里云智能编码插件Cosy

文章目录 Cosy简介Cosy安装Marketplace安装【推荐】离线安装安装效果Cosy功能体验代码智能补全代码示例搜索API搜索自然语言搜索控制台异常搜索优质文档搜索Cosy体验有感参考Cosy简介 阿里云智能编码插件(Alibaba Cloud AI Coding Assistant)是一款AI编程助手,提供代码智能…