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

python高阶技巧一

闭包

简单认识一下闭包

以下代码,内层inner函数不仅依赖于自身的参数b,还依赖于外层outer函数的参数a。inner就是一个闭包函数,既能访问外部变量,又保证外部变量不是全局的,不会被篡改掉,确保了外部变量的安全。

  1. def outer(a):

  2. def inner(b):

  3. print(f"<{a}>{b}<{a}>")

  4. return inner

  5. n1 = outer('程序员') # n1的类型是一个函数

  6. n1('学习python')

  7. n1('学习java')

  8. n2 = outer('软件测试工程师')

  9. n2('功能测试')

  10. n2('自动化测试')

image.png

如果要在内层函数修改外层函数的变量,需要用nonlocal修饰,示例代码如下:

  1. def outer(num1):

  2. def inner(num2):

  3. # 要对外层num1进行修改的话,需要nonlocal修饰

  4. nonlocal num1

  5. num1 += num2

  6. print(num1)

  7. return inner

  8. fn = outer(10)

  9. fn(5)

  10. # 输出为15

'

运行

运行

案例:使用闭包方式简单实现ATM存取款

  1. def account_create(initial_amount=0):

  2. def atm(num, deposit=True):

  3. nonlocal initial_amount

  4. if deposit:

  5. initial_amount += num

  6. print(f"存款:+{num},账户余额:{initial_amount}")

  7. else:

  8. if initial_amount<num:

  9. print(f"钱不够{num}了,取不出来!")

  10. else:

  11. initial_amount -= num

  12. print(f"取款:-{num},账户余额:{initial_amount}")

  13. return atm

  14. atm = account_create()

  15. atm(100, deposit=True)

  16. atm(500, deposit=True)

  17. atm(200, deposit=False)

  18. atm(1000, deposit=False)

'

运行

运行

image.png

闭包的优缺点:

优点:

无需定义全局变量即可实现通过函数,持续的访问、修改某个值

闭包使用的变量位于在函数内,难以被错误的调用修改

缺点:

由于内部函数持续引用外部函数的值,所以会导致这一部分内存空间不被释放,一直占用内存

装饰器

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

示例代码1:

  1. def outer(func):

  2. def inner():

  3. print("我要睡觉了......")

  4. func()

  5. print("睡醒了,我要起床了......")

  6. return inner()

  7. @outer # 相当于给sleep增加outer的装饰器

  8. def sleep():

  9. import random

  10. import time

  11. print("睡眠中......")

  12. time.sleep(random.randint(1, 5))

  13. sleep()

image.png

示例代码2:

(1)代码实现:统计一个函数的运行时间:

  1. import time

  2. # 统计一个函数的运行时间

  3. def timer(func):

  4. def gf():

  5. start_time = time.time()

  6. func()

  7. end_time = time.time()

  8. print("func运行的时间为:", end_time - start_time)

  9. return gf

  10. @timer

  11. def foo():

  12. time.sleep(3)

  13. print("in foo")

  14. foo()

image.png

(2)被装饰函数带参数

import time
  1. # 统计一个函数的运行时间

  2. def timer(func):

  3. def gf(*args, **kwargs):

  4. start_time = time.time()

  5. func(*args, **kwargs)

  6. end_time = time.time()

  7. print("func运行的时间为:", end_time - start_time)

  8. return gf

  9. @timer

  10. def foo(name, age):

  11. time.sleep(3)

  12. print("in foo", name, age)

  13. foo("测试", 22)

(3)装饰器本身带参数

  1. import time

  2. # 统计一个函数的运行时间

  3. def timer(timer_type):

  4. print(timer_type)

  5. def outer(func):

  6. def inner(*args, **kwargs):

  7. start_time = time.time()

  8. func(*args, **kwargs)

  9. end_time = time.time()

  10. print("func运行的时间为:", end_time - start_time)

  11. return inner

  12. return outer

  13. @timer(timer_type='second')

  14. def foo(name, age):

  15. time.sleep(3)

  16. print("in foo", name, age)

  17. foo("测试", 22)

(4)被装饰函数有返回值

  1. import time

  2. # 统计一个函数的运行时间

  3. def timer(timer_type):

  4. print(timer_type)

  5. def outer(func):

  6. def inner(*args, **kwargs):

  7. start_time = time.time()

  8. res = func(*args, **kwargs) # 接收返回值

  9. end_time = time.time()

  10. print("func运行的时间为:", end_time - start_time)

  11. return res # 返回

  12. return inner

  13. return outer

  14. @timer(timer_type='second')

  15. def foo(name, age):

  16. time.sleep(3)

  17. print("in foo", name, age)

  18. return name # 被装饰函数返回name

  19. print(foo("测试", 22))

单例模式

背景

  1. class Tool:

  2. pass

  3. t1 = Tool()

  4. t2 = Tool()

  5. print(t1)

  6. print(t2)

  7. # 输出结果:

  8. # <__main__.Tool object at 0x000001CEB2B190D0>

  9. # <__main__.Tool object at 0x000001CEB2B190A0>

通过print语句可以看出,它们的内存地址是不相同的,即t1和t2是完全独立的两个对象。

某些场景下,我们需要一个类无论获取多少次类对象,都仅仅提供一个具体的实例,用以节省创建类对象的开销和内存开销,比如某些工具类,仅需1个实例,即可在各处使用。

这就是单例模式所要实现的效果。

定义:

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

适用场景:当一个类只能有一个实例,而客户可以从一个众所周知的访问点访问它

单例的实现模式:

image.png

工厂模式

背景:

当需要大量创建一个类的实例的时候,可以使用工厂模式即,从原生的使用类的构造去创建对象的形式迁移到,基于工厂提供的方法去创建对象的形式

  1. class Person:

  2. pass

  3. class Worker(Person):

  4. pass

  5. class Student(Person):

  6. pass

  7. class Teacher(Person):

  8. pass

  9. worker = Worker()

  10. stu = Student()

  11. teacher = Teacher()

以上是传统方式构建基于Person的不同类对象。

采用工厂模式,代码就会变成如下:

  1. class Person:

  2. pass

  3. class Worker(Person):

  4. pass

  5. class Student(Person):

  6. pass

  7. class Teacher(Person):

  8. pass

  9. class Factory:

  10. def get_person(self, p_type):

  11. if p_type == 'w':

  12. return Worker()

  13. elif p_type == 's':

  14. return Student()

  15. else:

  16. return Teacher()

  17. factory = Factory()

  18. worker = factory.get_person('w')

  19. stu = factory.get_person('s')

  20. teacher = factory.get_person('t')

使用工厂类的get_person()方法去创建具体的类对象优点:

大批量创建对象的时候有统一的入口,易于代码维护;

当发生修改,仅修改工厂类的创建方法即可;

符合现实世界的模式,即由工厂来制作产品(对象)

多线程编程(threading)

进程:就是一个程序,运行在系统之上,那么便称之这个程序为一个运行进程,并分配进程ID方便系统管理。

线程:线程是归属于进程的,一个进程可以开启多个线程,执行不同的工作,是进程的实际工作最小单位

并行执行

多个进程同时在运行,即不同的程序同时运行,称之为: 多任务并行执行;

一个进程内的多个线程同时在运行,称之为:多线程并行执行;

写一段代码,我们先看下单线程运行下结果:

  1. import time

  2. def sing():

  3. while True:

  4. print("我在唱歌,啦啦啦......")

  5. time.sleep(1)

  6. def dance():

  7. while True:

  8. print("我在跳舞,呱呱呱......")

  9. time.sleep(2)

  10. if __name__ == '__main__':

  11. sing()

  12. dance()

image.png

要想输出既在唱歌,又在跳舞,是无法满足的。

使用多线程的话,一个线程在唱歌,一个线程在跳舞,就可以满足需求。

语法:

import threading

thread_obj = threading.Thread([group [,target [,name [, args [,kwargs]]]]])

  • group: 暂时无用,未来功能的预留参数
  • target: 执行的目标任务名
  • args: 以元组的方式给执行任务传参
  • kwargs:以字典方式给执行任务传参
  • name: 线程名,一般不用设置

启动线程,让线程开始工作thread_obi.start()

 
  1. import time

  2. import threading

  3. def sing():

  4. while True:

  5. print("我在唱歌,啦啦啦......")

  6. time.sleep(1)

  7. def dance():

  8. while True:

  9. print("我在跳舞,呱呱呱......")

  10. time.sleep(2)

  11. if __name__ == '__main__':

  12. # 创建一个唱歌的线程

  13. sing_thread = threading.Thread(target=sing)

  14. # 创建一个跳舞的线程

  15. dance_thread = threading.Thread(target=dance)

  16. # 运行线程

  17. sing_thread.start()

  18. dance_thread.start()

image.png

Socket服务端编程

主要分为如下几个步骤

1.创建socket对象

import socket

socket_server = socket.socket(0)

2.绑定socket_server到指定IP和地址

socket_server.bind(host, port)

3.服务端开始监听端口

socket_server.listen(backlog)

backlog为int整数,表示允许的连接数量,超出的会等待,可以不填,不填会自动设置一个合理值

4.接收客户端连接获得连接对象

conn.address = socket_server.accept()

print(f"接收到客户端连接,连接来自: {address}")

accept方法是阻塞方法,如果没有连接,会卡在当前这一行不向下执行代码

accept返回的是一个二元元组,可以使用上述形式,用两个变量接收二元元组的2个元素

5.客户端连接后,通过recv方法,接收客户端发送的消息

 
  1. while True:

  2. data = conn.recv(1024).decode("UTF-8")

  3. # recv方法的返回值是字节数组(Bytes》,可以通过decode使用UTF-8解码为字符串

  4. # recv方法的传参是buffsize,缓冲区大小,一般设置为1024即可

  5. if data == 'exit':

  6. break

  7. print("接收到发送来的数据:",data)

  8. # 可以通过while True无限循环来持续和客户端进行数据交互

  9. # 可以通过判定客户端发来的特殊标记,如exit,来退出无限循环

6.通过conn(客户端当次连接对象)调用send方法可以回复消息

 
  1. while True:

  2. data = conn.recv(1024).decode("UTF-8")

  3. if data == 'exit':

  4. break

  5. print("接收到发送来的数据:", data)

  6. conn.send("你好呀哈哈哈".encode("UTF-8”))

7.conn(客户端当次连接对象)和socket_server对象调用close方法,关闭连接

Socket客户端编程

主要分为如下几个步骤:

1.创建socket对象

import socket

socket_client = socket.socket()

2.连接到服务端

socket_client.connect(("localhost",8888))

3.发送消息

 
  1. while True: # 可以通过无限循环来确保持续的发送消息给服务端

  2. send_msg = input("请输入要发送的消息")

  3. if send_msg == exit':

  4. # 通过特殊标记来确保可以退出无限循环

  5. break

  6. socket_client.send(send_msg.encode("UTF-8")) # 消息需要编码为字节数组(UTF-8编码)

4.接收返回消息

 
  1. while True:

  2. send_msg = input("请输入要发送的消息").encode("UTF-8")

  3. socket_client.send(send_msg)

  4. recv_data = socket_client.recv(124) # 1024是缓冲区大小,一般1024即可

  5. #recv方法是阻塞式的,即不接收到返回,就卡在这里等待

  6. print("服务端回复消息为:",recv_data.decode("UTF-8"))#接受的消息需要通过UTF-8解码为字符串

5.关闭链接

socket_client.close()

正则表达式

正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。

简单来说,正则表达式就是使用: 字符串定义规则,并通过规则去验证字符串是否匹配。

三个基础方法:

使用re模块,并基于re模块(import re)中三个基础方法来做正则匹配。

(1)match

re.match(匹配规则,被匹配字符串)

从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。

(2)search

re.search(匹配规则,被匹配字符串)

搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后

(3)findall

re.findall(匹配规则,被匹配字符串)

匹配整个字符串,找出全部匹配项,找不到返回空list:[]

元字符匹配:

(1)单字符匹配:

image.png

实例:

 
  1. import re

  2. s = "learn @@python3 12EEAA!!66 ##study3"

  3. # 找出全部数字

  4. result1 = re.findall(r'\d', s)

  5. print(result1) # ['3', '1', '2', '6', '6', '3']

  6. # 找出特殊字符

  7. result2 = re.findall(r'\W', s)

  8. print(result2) # [' ', '@', '@', ' ', '!', '!', ' ', '#', '#']

  9. # 找出全部英文字母

  10. result3 = re.findall(r'[a-zA-Z]', s)

  11. print(result3) # ['l', 'e', 'a', 'r', 'n', 'p', 'y', 't', 'h', 'o', 'n', 'E', 'E', 'A', 'A', 's', 't', 'u', 'd', 'y']

(2)数量匹配:

image.png

(3)边界匹配:

image.png

(4)分组匹配

image.png

实例:

 
  1. # 匹配账号,只能由字母和数字组成,长度限制6到10位

  2. r1 = '^[0-9A-Za-z]{6,10}$'

  3. s1 = '12a3C6'

  4. print(re.findall(r1, s1)) # 输出['12a3C6'],证明匹配成功

  5. # 匹配QQ号,要求纯数字,长度5-11,第一位不为0

  6. r2 = '^[1-9][0-9]{4,10}$'

  7. s2 = '123456987'

  8. print(re.findall(r2, s2)) # 输出['123456987'],证明匹配成功

  9. # 匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址

  10. r3 = r'(^[\w-]+(.[\w-]+)*@(qq|163|gmail)(.[\w-]+)+$)'

  11. s3 = '907218846@qq.com'

  12. print(re.match(r3, s3))

递归

概念:方法(函数)自己调用自己的一种特殊编程写法

案例:找出一个文件夹中全部的文件

 
  1. import os

  2. def test_os():

  3. # OS模块中的基础方法

  4. # 将文件夹里面的内容显示出来

  5. print(os.listdir("E:/python"))

  6. # 判断给的路径是不是个文件夹

  7. print(os.path.isdir("E:/python/libs"))

  8. # 判断指定路径是否存在

  9. print(os.path.exists("E:/python"))

  10. def get_file(path):

  11. file_list = []

  12. if os.path.exists(path):

  13. for f in os.listdir(path):

  14. new_path = path + "/" + f

  15. if os.path.isdir(new_path):

  16. # 表明目录是文件夹不是文件,使用递归了

  17. get_file(new_path)

  18. else:

  19. file_list.append(new_path)

  20. else:

  21. print(f"指定的目录{path}不存在")

  22. return []

  23. return file_list

  24. if __name__ == '__main__':

  25. print(get_file("E:/python"))

image.png

 感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

相关文章:

python高阶技巧一

闭包 简单认识一下闭包 以下代码&#xff0c;内层inner函数不仅依赖于自身的参数b&#xff0c;还依赖于外层outer函数的参数a。inner就是一个闭包函数&#xff0c;既能访问外部变量&#xff0c;又保证外部变量不是全局的&#xff0c;不会被篡改掉&#xff0c;确保了外部变量的…...

智慧环保生态文明信息化解决方案

1. 生态文明建设背景 随着国家对生态文明建设的重视&#xff0c;一系列政策文件相继出台&#xff0c;将生态文明建设纳入国家发展总体布局&#xff0c;加大资源消耗、环境保护等指标权重&#xff0c;推动生态文明体制改革。 2. 智慧环保的定义与发展 智慧环保作为数字环保的…...

【Linux】权限

&#x1f33b;个人主页&#xff1a;路飞雪吖~ &#x1f320;专栏&#xff1a;Linux 目录 ⭐Linux权限的概念 &#x1f31f;权限管理 <1>文件访问者的分类 <2>文件类型和访问权限 <3>文件权限值的表示方法 <4>文件访问权限的相关设置方法 ✨chmod…...

docker 部署 kvm 图形化管理工具 WebVirtMgr

镜像构建 官方最后一次更新已经是 2015年6月22日 了&#xff0c;官方也没有 docker 镜像&#xff0c;这边选择咱们自己构建如果你的服务器有魔法&#xff0c;可以直接 git clone 一下 webvirtmgr 的包&#xff0c;没有的话&#xff0c;可以和我一样&#xff0c;提前从 github 上…...

Next.js- 链接和导航

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 在介绍路由导航之前先了解下客户端组件和服务端组件 服务端组件&#xff08;Server Components&#xff09; &#xff08;1&#xff09; 渲染方式&#xff1a; 在服务器上渲染&#xff0c;生成 HTML 后发送到客户端。适…...

主机管理工具 WGCLOUD v3.5.6 更新了哪些特性

WGCLOUD-v3.5.6 更新说明&#xff0c;2024-11-20发布 1. 新增&#xff0c;个性化采集&#xff0c;查看 2. 新增&#xff0c;支持达梦数据库做数据源来存贮监控数据&#xff0c;查看说明(8) 3. 新增&#xff0c;日志监控支持配置自动处理指令&#xff0c;当发现日志出现告警关键…...

空间数据存储格式GeoJSON

GeoJSON 是一种用于表示地理信息的开放标准格式&#xff0c;广泛用于存储和交换地理空间数据。它基于 JSON 格式&#xff0c;因此易于理解和处理&#xff0c;尤其适用于 Web 和 JavaScript 环境中的地图应用。GeoJSON 支持多种地理信息类型&#xff0c;如点、线、面、坐标系统等…...

【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器

1.实验目的 通过实验课程与理论课的学习深入理解掌握的触发器的原理、创建、修改、删除、基本的使用方法、主要用途&#xff0c;并且可以在练习的基础上&#xff0c;熟练使用触发器来进行数据库的应用程序的设计&#xff1b;深入学习深刻理解与触发器相关的T-SQL语句的编写的基…...

Linux 中的 zoxide 命令详解与示例

文章目录 Linux 中的 zoxide 命令详解与示例zoxide 简介安装 zoxide使用包管理器Ubuntu/DebianArch LinuxFedoramacOS&#xff08;Homebrew&#xff09;Windows&#xff08;Scoop&#xff09; 使用脚本安装&#xff08;linux、Centos&#xff09;安装流程 集成到 ShellBashZshF…...

Etcd 框架

基本了解 客户端、长连接与租约的关系 客户端对象 etcd的客户端对象是用户与etcd服务进行交互的主要接口&#xff0c;主要功能就是存储、通知和事务等功能访问 键值存储&#xff1a;客户端通过put 和 get操作存储数据&#xff1b;数据存储在etcd的层级化键值数据库中监听器&a…...

在 CentOS 7 上安装 MinIO 的步骤

在 CentOS 7 上安装 MinIO 的步骤 在 CentOS 7 上安装 MinIO 的步骤1. 更新系统2. 安装依赖3. 下载 MinIO4. 赋予执行权限5. 移动 MinIO 到系统路径6. 创建 MinIO 用户7. 创建数据目录8. 创建 MinIO 服务文件9. 启动 MinIO 服务10. 设置开机自启11. 访问 MinIO12. 配置防火墙&a…...

【Linux】进程地址空间

目录 一、引入问题&#xff1a; 二、进程地址空间&#xff1a; 地址和数据总线&#xff1a; 三、页表&#xff1a; 权限&#xff1a; 缺页中断&#xff1a; 四、回到问题&#xff1a; 五、总结&#xff1a; 重新理解进程&#xff1a; 一、引入问题&#xff1a; 在C中&a…...

快速图像识别:落叶植物叶片分类

1.背景意义 研究背景与意义 随着全球生态环境的变化&#xff0c;植物的多样性及其在生态系统中的重要性日益受到关注。植物叶片的分类不仅是植物学研究的基础&#xff0c;也是生态监测、农业管理和生物多样性保护的重要环节。传统的植物分类方法依赖于人工观察和专家知识&…...

第 22 章 - Go语言 测试与基准测试

在Go语言中&#xff0c;测试是一个非常重要的部分&#xff0c;它帮助开发者确保代码的正确性、性能以及可维护性。Go语言提供了一套标准的测试工具&#xff0c;这些工具可以帮助开发者编写单元测试、表达式测试&#xff08;通常也是指单元测试中的断言&#xff09;、基准测试等…...

K8S + Jenkins 做CICD

前言 这里会做整体CICD的思路和流程的介绍&#xff0c;会给出核心的Jenkins pipeline脚本&#xff0c;最后会演示一下 实验/实操 结果 由于整体内容较多&#xff0c;所以不打算在这里做每一步的详细演示 - 本文仅作自己的实操记录和日后回顾用 要看保姆式教学的可以划走了&…...

http/https

1、http与https HTTPHTTPS信息明文传输加入ssl加密传输协议&#xff0c;可以使得报文加密传输默认端口80默认端口443连接简单TCP三次握手通信TCP三次握手后还要SSL/TLS握手过程&#xff0c;才可以加密报文传输无状态不安全需要到CA申请证书&#xff0c;身份认证&#xff0c;自…...

腾讯云 AI 代码助手:产品研发过程的思考和方法论

一、文章摘要 本文将详细阐述 腾讯云 AI 代码助手的历史发展形态与产品整体架构&#xff0c;并从技术、研发方法论的角度分别阐述了产品的研发过程。 全文阅读约 5&#xff5e;8 分钟。 二、产品布局 AI 代码助手产品经历了三个时代的发展 第一代诸如 Eclipse、Jetbrains、V…...

淘宝商品评论爬虫:Java实现指南

在当今的互联网时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是用户生成的内容&#xff0c;如商品评论&#xff0c;对于理解消费者行为和市场趋势具有重要意义。淘宝作为中国最大的电商平台之一&#xff0c;拥有海量的商品评论数据。本文将介绍如何使用Java编写一个简单…...

银河麒麟v10 x86架构二进制方式kubeadm+docker+cri-docker搭建k8s集群(证书有效期100年) —— 筑梦之路

环境说明 master&#xff1a;192.168.100.100 node: 192.168.100.101 kubeadm 1.31.2 &#xff08;自编译二进制文件&#xff0c;证书有效期100年&#xff09; 银河麒麟v10 sp2 x86架构 内核版本&#xff1a;5.4.x 编译安装 cgroup v2启用 docker版本&#xff1a;27.x …...

【Linux】详解shell代码实现(上)

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 学校开始搞蓝桥的校选…...

Ruby 模块(Module)

Ruby 模块&#xff08;Module&#xff09; 概述 Ruby 是一种动态、开放源代码的编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。在 Ruby 中&#xff0c;模块&#xff08;Module&#xff09;是一个重要的概念&#xff0c;它用于封装一组相关的方法和常量。模块提…...

成都睿明智科技有限公司怎么样可靠不?

在这个日新月异的数字时代&#xff0c;电商行业如同一股不可阻挡的洪流&#xff0c;席卷着每一个消费者的生活。而抖音&#xff0c;作为短视频与电商完美融合的典范&#xff0c;更是为无数商家开辟了一片全新的蓝海。在这片充满机遇与挑战的海洋中&#xff0c;成都睿明智科技有…...

内网安全隧道搭建-ngrok-frp-nps-sapp

1.ngrok 建立内网主机与公网跳板机的连接&#xff1a; 内网主机为客户机&#xff1a; 下载客户端执行 2.frp &#xff08;1&#xff09;以下为内网穿透端口转发 frp服务端配置&#xff1a; bindPort 为frp运行端口 服务端运行 ./frps -c frps.ini frp客户端配置&#xf…...

k8s 对外服务之 Ingress

LB ingress //Ingress 简介 service的作用体现在两个方面&#xff0c;对集群内部&#xff0c;它不断跟踪pod的变化&#xff0c;更新endpoint中对应pod的对象&#xff0c;提供了ip不断变化的pod的服务发现机制&#xff1b;对集群外部&#xff0c;他类似负载均衡器&#xff0c;…...

前端速通(JavaScript)

1 初识JavaScript 1 JavaScript是什么 JavaScript 是一种高层的、轻量级的、解释型的编程语言&#xff0c;最初由 Netscape 公司于 1995 年开发。它的特点包括&#xff1a; 动态性&#xff1a;JavaScript是动态类型语言&#xff0c;允许开发者灵活地操作数据。跨平台&#xf…...

Unity图形学之着色器之间传递参数

1.初始化 struct&#xff1a; UNITY_INITIALIZE_OUTPUT&#xff08;type,name&#xff09; Type: struct 名字 Name :变量的名字 struct Input{float2 uv_MainTex;float3 myColor;};half _Glossiness;half _Metallic;fixed4 _Color;void MyVertx(inout appdata_base v,out I…...

JavaScript中的this指向问题

JavaScript中的this指向问题 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中&#xff0c;几乎都有this这个关键字&#xff08;Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面向对象的编程语言中&#xff0c;比…...

Qt之QWidget相关

Qt概述 Qt 是一个跨平台的 C 开发框架。 跨平台支持&#xff1a;可以用于开发 Windows、macOS、Linux、Android、iOS 等多种操作系统下的应用程序。这意味着开发者使用 Qt 编写的代码&#xff0c;在经过适当的编译和配置后&#xff0c;能够在不同平台上运行&#xff0c;减少了…...

Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析

1. 产品定位 Ease Monitor 有如下的产品定位&#xff1a; 关注于整体应用的SLA。 主要从为用户服务的 API 来监控整个系统。 关联指标聚合。 把有关联的系统及其指示聚合展示。主要是三层系统数据&#xff1a;基础层、平台中间件层和应用层。 快速故障定位。 对于现有的系统…...

苹果MacOS 调用自编译opencv的Dylib显示一个图片程序的步骤

前言 为了测试自编译的opencv库是否能在苹果MacOS系统下使用&#xff0c;需要写一个简单的测试程序。这个测试程序写起来不难&#xff0c;麻烦的是一些配置。网上的办法很多&#xff0c;里面因为版本的问题有一些坑。特此写了一个建立步骤&#xff0c;供大家参考。 1、新建一个…...

网页中调用系统的EXE文件,如打开QQ

遇到一个实际的问题&#xff0c;需要在网页中打开本地的某个工业软件。 通过点击exe文件就可以调用到程序。 比如双击qq的exe就可以启动qq的程序。 那么问题就变成了如何加载exe程序呢&#xff1f; 可以通过Java的 Process process Runtime.getRuntime().exec(command);通过…...

在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)

在 Ubuntu 系统上安装 npm 环境以及 nvm&#xff08;Node Version Manager&#xff09; 步骤 1: 更新系统包步骤 2: 安装 nvm步骤 3: 安装 Node.js 和 npm步骤 4: 设置默认 Node.js 版本&#xff08;可选&#xff09;总结 在 Ubuntu 系统上安装 npm 环境以及 nvm&#xff08;No…...

Linux环境开启MongoDB的安全认证

文章目录 1. MongoDB安全认证简介1.1 访问控制1.2 角色1.3 权限 2. MongoDB中的常见角色3. MongoDB Shell3.1 下载MongoDB Shell3.2 通过MongoDB Shell连接MongoDB 4. 创建管理员用户5. 为具体的数据库创建用户6. 开启权限认证7. 重启MongoDB服务8. 连接MongoDB9. MongoDB数据库…...

实现了两种不同的图像处理和物体检测方法

这段代码实现了两种不同的图像处理和物体检测方法&#xff1a;一种是基于Canny边缘检测与轮廓分析的方法&#xff0c;另一种是使用TensorFlow加载预训练SSD&#xff08;Single Shot Multibox Detector&#xff09;模型进行物体检测。 1. Canny边缘检测与轮廓分析&#xff1a; …...

经典工具 | 使用SIFT预测错义突变的有害性

SIFT 用计算机替代人预测复杂事件的影响&#xff0c;是我们这个时代最令人兴奋的科学进展之一。SIFT就是这样一个应用于基因组学研究的经典工具。 SIFT可预测多种生物体的基因组变异&#xff0c;主要是错义突变的影响与效应&#xff0c;最大的特点是物种丰富&#xff0c;是一个…...

如何给 Apache 新站点目录配置 SELinux ?

在 web 服务器管理领域&#xff0c;确保服务器环境的安全性至关重要。SELinux (Security-Enhanced Linux) 是保护 Linux 服务器最有效的工具之一&#xff0c;它是一种强制访问控制 (MAC mandatory access control) 安全机制。当使用最流行的 web 服务器 Apache 提供 web 内容时…...

RTSP播放器EasyPlayer.js播放器分辨率高的视频在设置container的宽高较小时,会出现锯齿状的画面效果

流媒体播放器的核心技术及发展趋势展现了其在未来数字生活中的无限潜力。随着技术的不断进步和市场的持续发展&#xff0c;流媒体播放器将在内容创新、用户体验优化以及跨平台互通等方面取得新的突破。对于从业者而言&#xff0c;把握这些趋势并积极应对挑战将是实现成功的关键…...

云讷科技Kerloud无人飞车专利发布

云讷科技Kerloud无人飞车获得了“一种室内外两用的四旋翼无人飞车”的实用新型专利证书&#xff0c;作为科教社区第一款四旋翼飞车&#xff0c;这项技术结合了无人机和无人车的优势&#xff0c;提供了一种能够在多种环境下使用的多功能飞行器。 这项设计的优势如下&#xff…...

快速识别模型:simple_ocr,部署教程

快速识别图片中的英文、标点符号、数学符号、Emoji, 模型会输出图片中文字行的坐标位置、最低得分、识别结果。当前服务用到的模型&#xff1a;检测模型、数字识别、英文符号识别。 一、部署流程 1.更新基础环境 apt update2.安装miniconda wget https://repo.anaconda.com/…...

Qt交叉编译x86和arm心得

最近一直在Linux上开发qt程序&#xff0c;主要工作是在x86的Ubuntu上开发编译调试程序&#xff0c;确定没有问题后交叉编译到arm的linux系统上运行 1.环境 Qt的交叉编译环境厂家已经提供了&#xff0c;嵌入式的同事帮我安装调试的&#xff0c;具体就是装了厂家给的gcc编译套件…...

用CAXA CAD电子图板导入图框、标题栏并导出pdf的方法

1.导入图框&#xff1a; 点击调入图框->出现读入图框文件 一个一个点击&#xff0c;选择合适的图框 然后点击导入 2.导入标题栏&#xff1a; 调入标题栏->出现读入标题栏文件 一个一个点击&#xff0c;选择合适的标题栏&#xff0c;然后点击导入 3.导出pdf&#x…...

在 Ubuntu/Debian 上安装 Go

使用官方二进制文件安装&#xff08;推荐&#xff09; Go 提供了官方的二进制安装包&#xff0c;适用于大多数 Linux 发行版&#xff0c;包括 Ubuntu 和 Debian。步骤如下&#xff1a; 更新包索引&#xff1a; bash sudo apt update 安装依赖&#xff08;如果尚未安装&#…...

设计模式之策略模式-工作实战总结与实现

文章目录 应用场景存在问题解决方案继续延伸 应用场景 假设有这样的业务场景&#xff0c;大数据系统把文件推送过来&#xff0c;根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码&#xff1a; public class Question {public static void main(String[] args…...

自动语音识别(ASR)与文本转语音(TTS)技术的应用与发展

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

实验十三 生态安全评价

1 背景及目的 生态安全是生态系统完整性和健康性的整体反映&#xff0c;完整健康的生态系统具有调节气候净化污染、涵养水源、保持水土、防风固沙、减轻灾害、保护生物多样性等功能。维护生态安全对于人类生产、生活、健康及可持续发展至关重要。随着城市化进程的不断推进&…...

【MySQL实战45讲笔记】基础篇——redo log 和 binlog

系列文章 基础篇——MySQL 的基础架构 目录 系列文章1. 重要的日志模块&#xff1a;redo log 和 binlog1.1 redo log1.2 binlog1.3 执行器和 InnoDB 引擎内部如何执行更新语句 1. 重要的日志模块&#xff1a;redo log 和 binlog 前面系统的了解了一个查询语句的执行流程&…...

Java 基于SpringBoot+vue框架的老年医疗保健网站

大家好&#xff0c;我是Java徐师兄&#xff0c;今天为大家带来的是Java Java 基于SpringBootvue框架的老年医疗保健网站。该系统采用 Java 语言开发&#xff0c;SpringBoot 框架&#xff0c;MySql 作为数据库&#xff0c;系统功能完善 &#xff0c;实用性强 &#xff0c;可供大…...

Java集合分页

一、前言 在Java开发中&#xff0c;若单次展示的数据量太大&#xff0c;会造成程序响应缓慢&#xff0c;就需要用到分页功能&#xff0c;每一页展示一定量的数据&#xff0c;分多次展示 ... 那么在List集合中&#xff0c;如何实现分页功能呢&#xff1f; 本文将以3种方式&…...

python语言基础-5 进阶语法-5.5 上下文管理协议(with语句)

声明&#xff1a;本内容非盈利性质&#xff0c;也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站&#xff0c;会尽量附上原文链接&#xff0c;并鼓励大家看原文。侵删。 5.5 上下文管理协议&#xff08;with语句&#xff09;&#xff08;参考链接&#xff1…...

周志华深度森林deep forest(deep-forest)最新可安装教程,仅需在pycharm中完成,超简单安装教程

1、打开pycharm 没有pycharm的&#xff0c;在站内搜索安装教程即可。 2、点击“文件”“新建项目” 3、创建项目&#xff0c;Python版本中选择Python39。如果没有该版本&#xff0c;选择下面的Python 3.9下载并安装。 4、打开软件包&#xff0c;搜索“deep-forest”软件包&am…...