拒绝重复造轮子!python实用工具类及函数大推荐!

数据科学从业者必看的6大高质量技术信息源 数据科学不是静态知识体系,而是学术前沿、工业实践与认知升级三者动态交汇的工程实践领域。理解其核心在于掌握真实场景中的技术原理——如特征工程如何影响模型上线稳定性、MLOps如何解决训练与推理环境不一致等关键问题。高质量信息源的价值,正在于提供可验证的代码实录、透明的失败复盘和跨界的对谈视角,而非泛泛而谈的概念科普。本文聚焦2020年这一技术演进关键节点(Transformer走出NLP、可解释AI落地试点、MLOps概念兴起),系统梳理六家经三年以上持续追踪、具备工业界穿透力、内容颗粒度匹配真实工作流、并公 阅读详情

从2015年转行程序员至今也有两年多了,当初自学的java却误打误撞进了python的坑,入职之后一天java也没有写过,或许这可以理解成缘分吧,哈哈!使用python工作久了,随手写一些小工具再所难免,不知不觉,我的工具包也增长到了几千行代码。其中有的函数依照别人的代码改写,也有的源于自己的灵感,我自认为还是挺好用的。现在统一规整后做成pip包,拿出来分享给大家使用。

函数都很小巧,代码实现相对简单,风格比较自由,尽可能不依赖其它安装包,极个别的工具依赖一些特定的驱动程序,比如redis,kafka, psutil,如果自己的项目没有相关需求,那么可以将需要的方法,类复制放到自己的项目中,不必完全安装ShichaoMa/toolkit。放心,我是不会追究版权的。

· 正 · 文 · 来 · 啦 ·

安装toolkity

#python3测试有效
pip install toolkity

有朋友可能会想为什么不叫toolkit,我,也是那么想的。可是名字被别人占用了肿么办,只能在后面加个y,看起来正式而不失一点小俏皮。

 

 

 

 

 

安装完毕,来跟我学习几个常用函数的使用方法吧。

  • Timer 简单好用的计时器
class Timer(object):    Python学习交流群:1004391443
 """
 计时器,对于需要计时的代码进行with操作:
 with Timer() as timer:
 ...
 ...
 print(timer.cost)
 ...
 """
 def __init__(self, start=None):
 self.start = start if start is not None else time.time()
 def __enter__(self):
 return self
 def __exit__(self, exc_type, exc_val, exc_tb):
 self.stop = time.time()
 self.cost = self.stop - self.start
 return exc_type is None

有时我们想对我们写的代码执行时间进行统计,通常我们会使用如下代码:

import time
start = time.time()
...# 我们的代码
end = time.time()
cost = end - start

现在有了timer,一切都变的简单啦

# 使用方法:
In [2]: from toolkit.managers import Timer
In [3]: with Timer() as timer:
 ...: num = 10**20
 ...: 
In [4]: print(timer.cost)
3.6716461181640625e-05
In [5]: print(timer.start)
1512270309.2823365
In [6]: print(timer.stop)
1512270309.2823732

同时,你还可以指定开始时间

In [9]: import time
In [10]: with Timer(start=time.time()-10) as timer:
 ...: num = 12**12
 ...: 
In [11]: timer.cost
Out[11]: 10.000059366226196
  • ExceptContext 异常捕获上下文
class ExceptContext(object):
 """
 异常捕获上下文
 eg:
 def test():
 with ExceptContext(Exception, errback=lambda name, *args:print(name)):
 raise Exception("test. ..")
 """
 def __init__(self, exception=Exception, func_name=None,
 errback=lambda func_name, *args: traceback.print_exception(*args) is None,
 finalback=lambda got_err: got_err):
 """
 :param exception: 指定要监控的异常
 :param func_name: 可以选择提供当前所在函数的名称,回调函数会提交到函数,用于跟踪
 :param errback: 提供一个回调函数,如果发生了指定异常,就调用该函数,该函数的返回值为True时不会继续抛出异常
 :param finalback: finally要做的操作
 """
 self.errback = errback
 self.finalback = finalback
 self.exception = exception
 self.got_err = False
 self.func_name = func_name or _find_caller_name(is_func=True)
 def __enter__(self):
 return self
 def __exit__(self, exc_type, exc_val, exc_tb):
 return_code = False
 if isinstance(exc_val, self.exception):
 self.got_err = True
 return_code = self.errback(self.func_name, exc_type, exc_val, exc_tb)
 self.finalback(self.got_err)
 return return_code

通常我们想捕获异常时,会写如下代码

got_err = False
try:
 1/0
except ZeroDivisionError:
 import traceback
 traceback.print_exc()
got_err = True
finally:
 print(got_err)

现在我们可以用ExceptContext简单实现

with ExceptContext(ZeroDivisionError, finalback=lambda got_err: print(got_err)):
 1/0

其中ExceptContext接收4个参数

  1. :param exception: 指定要监控的异常, 默认为Exception:param func_name: 可以选择提供当前所在函数的名称,回调函数会提交到函数,用于跟踪,默认为None,自己判断调用函数名称:param errback: 提供一个回调函数,如果发生了指定异常,就调用该函数,该函数的返回值为True时不会继续抛出异常 默认打出异常信息,返回True:param finalback: finally要做的操作 默认返回是否发生异常。

通过自定义errback,我们可以对异常做任何想要的操作。

  • debugger debug小工具
def debugger():
 try:
 debug = eval(os.environ.get("DEBUG"))
 except Exception:
 debug = False
 if debug:
 d = pdb.Pdb()
 d.set_trace( sys._getframe().f_back)

有时我们可能会使用pdb来调试,经常会发生的情况是,我们在测试环境下调试,部署到生产之后,发现pdb.set_trace()忘记删除,导致代码在生产系统中卡住,这就很尴尬了。使用debugger,同时在测试环境中加入export DEBUG=True,可以轻松避免上述情况

import os
os.environ["DEBUG"] = True
from toolkit import debugger
def fun():
 debugger()
 ....
fun()
  • duplicate 保序去重函数
def duplicate(iterable, keep=lambda x: x, key=lambda x: x, reverse=False):
 """
 保序去重
 :param iterable:
 :param keep: 去重的同时要对element做的操作
 :param key: 使用哪一部分去重
 :param reverse: 是否反向去重
 :return:
 """
 result = list()
 duplicator = list()
 if reverse:
 iterable = reversed(iterable)
 for i in iterable:
 keep_field = keep(i)
 key_words = key(i)
 if key_words not in duplicator:
 result.append(keep_field)
 duplicator.append(key_words)
 return list(reversed(result)) if reverse else result

我们经常会遇到去重问题,比如

In [2]: ls = [3,4,5,2,4,1]
In [3]: ls = list(set(ls))
In [4]: ls
Out[4]: [1, 2, 3, 4, 5]

上述列表中有2个4,我们想去掉多余的4,但是不想顺序乱掉,如果使用list(set(ls))的方式,顺序会乱掉,因此我们可以使用duplicate函数来做

In [5]: from toolkit import duplicate
In [6]: ls = [3, 4, 5, 2, 4, 1]
# 正序去重
In [7]: duplicate(ls)
Out[7]: [3, 4, 5, 2, 1]
# 逆序去重
In [8]: duplicate(ls, reverse=True)
Out[8]: [3, 5, 2, 4, 1]
# 指定规则去重
In [10]: ls = [{"a": 3, "b": 4}, {"a":3, "b": 5}]
In [11]: duplicate(ls, key=lambda x: x["a"])
Out[11]: [{'a': 3, 'b': 4}]
# 去重后仅保留部分数据
In [12]: duplicate(ls, key=lambda x: x["a"], keep=lambda x: x["b"])
Out[12]: [4]
  • chain_all 连接多个可迭代对象
def chain_all(iter):
 """
 连接多个序列或字典
 :param iter:
 :return:
 """
 iter = list(iter)
 if not iter:
 return []
 if isinstance(iter[0], dict):
 result = {}
 for i in iter:
 result.update(i)
 else:
 result = reduce(lambda x, y: list(x)+list(y), iter)
 return result

以前我们都使用Itertools.chain.from_iterable,但是这个函数无法连接字典同时返回的是可迭代器对象。

In [14]: chain_all([[1, 2], [1, 2]])
Out[14]: [1, 2, 1, 2]
In [15]: chain_all([{"a": 1}, {"b": 2}])
Out[15]: {'a': 1, 'b': 2}
  • safely_json_loads 安全的将字符串变成json对象
# 代码实现
def safely_json_loads(json_str, defaulttype=dict, escape=True):
 """
 返回安全的json类型
 :param json_str: 要被loads的字符串
 :param defaulttype: 若load失败希望得到的对象类型
 :param escape: 是否将单引号变成双引号
 :return:
 """
 if not json_str:
 return defaulttype()
 elif escape:
 data = replace_quote(json_str)
 return json.loads(data)
 else:
 return json.loads(json_str)

对于空字符串,返回默认类型,对于使用单引号包裹的字符串,将其转换成双引号

In [17]: json_str = """{'a': 1, "b": "i'm tom."}"""
In [18]: safely_json_loads(json_str)
Out[18]: {'a': 1, 'b': "i'm tom."}
# 上面的i'm tom中的单引号不会被转成双引号
  • format_html_string 格式化html

 
  •  
def format_html_string(html):
 """
 格式化html, 去掉多余的字符,类,script等。
 :param html:
 :return:
 """
 trims = [(r'
',''),
 (r'  ', ''),
 (r'
', ''),
 (r' ', ''),
 (r'\u2018', "'"),
 (r'\u2019', "'"),
 (r'\ufeff', ''),
 (r'\u2022', ":"),
 (r"<([a-z][a-z0-9]*) [^>]*>", '<g<1>>'),
 (r'<s*script[^>]*>[^<]*<s*/s*scripts*>', ''),
 (r"</?a.*?>", '')]
 return reduce(lambda string, replacement: re.sub(replacement[0], replacement[1], string), trims, html)
去掉多余的html属性

 


 
  •  
In [20]: format_html_string("<div class='color'></div>")
Out[20]: '<div></div>'

....

除以上工具以外,还有很多工具非常有用,由于例子相对复杂,就不一一举例了,可以多关注我的github, 如ShichaoMa/proxy_factory项目,就有很多用例出现。

下面简单介绍一些其它工具

  • 重试器,包装函数对指定异常进行重试
def retry_wrapper(retry_times, exception=Exception, error_handler=None, interval=0.1):
 """
 函数重试装饰器
 :param retry_times: 重试次数
 :param exception: 需要重试的异常
 :param error_handler: 出错时的回调函数
 :param interval: 重试间隔时间
 :return:
 """
 def out_wrapper(func):
 @wraps(func)
 def wrapper(*args, **kwargs):
 count = 0
 while True:
 try:
 return func(*args, **kwargs)
 except exception as e:
 count += 1
 if error_handler:
 result = error_handler(func.__name__, count, e, *args, **kwargs)
 if result:
 count -= 1
 if count >= retry_times:
 raise
 time.sleep(interval)
 return wrapper
 return out_wrapper
  • 超时器,装饰函数并指定其超时时间
def timeout(timeout_time, default):
 """
 Decorate a method so it is required to execute in a given time period,
 or return a default value.
 :param timeout_time:
 :param default:
 :return:
 """
 class DecoratorTimeout(Exception):
 pass
 def timeout_function(f):
 def f2(*args):
 def timeout_handler(signum, frame):
 raise DecoratorTimeout()
 old_handler = signal.signal(signal.SIGALRM, timeout_handler)
 # triger alarm in timeout_time seconds
 signal.alarm(timeout_time)
 try:
 retval = f(*args)
 except DecoratorTimeout:
 return default
 finally:
 signal.signal(signal.SIGALRM, old_handler)
 signal.alarm(0)
 return retval
 return f2
 return timeout_function
  • 自实现groupby
def groupby(it, key):
 """
 自实现groupby,itertool的groupby不能合并不连续但是相同的组, 且返回值是iter
 :return: 字典对象
 """
 groups = dict()
 for item in it:
 groups.setdefault(key(item), []).append(item)
 return groups
  • cookie解析
def parse_cookie(string):
 """
 解析cookie
 :param string:
 :return:
 """
 results = re.findall('([^=]+)=([^;]+);?s?', string)
 my_dict = {}
 for item in results:
 my_dict[item[0]] = item[1]
 return my_dict
  • 查找字符串函数和类
def load_function(function_str):
 """
 返回字符串表示的函数对象
 :param function_str: module1.module2.function
 :return: function
 """
 mod_str, _sep, function_str = function_str.rpartition('.')
 return getattr(load_module(mod_str), function_str)
load_class = load_function
  • 查找字符串模块
def load_module(module_str):
 """
 返回字符串表示的模块
 :param module_str: os.path
 :return: os.path
 """
 return __import__(module_str, fromlist=module_str.split(".")[-1])
  • 获取可用端口
def free_port():
 """
 Determines a free port using sockets.
 """
 free_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 free_socket.bind(('0.0.0.0', 0))
 free_socket.listen(5)
 port = free_socket.getsockname()[1]
 free_socket.close()
 return port
  • 线程安全装饰器
def thread_safe(lock):
 """
 对指定函数进行线程安全包装,需要提供锁
 :param lock: 锁
 :return:
 """
 def decorate(func):
 @wraps(func)
 def wrapper(*args, **kwargs):
 with lock:
 return func(*args, **kwargs)
 return wrapper
 return decorate
  • 慢保存或提交
def call_later(callback, call_args=tuple(), immediately=True,
interval=1): 
"""
 应用场景:
 被装饰的方法需要大量调用,随后需要调用保存方法,但是因为被装饰的方法访问量很高,而保存方法开销很大
 所以设计在装饰方法持续调用一定间隔后,再调用保存方法。规定间隔内,无论调用多少次被装饰方法,保存方法只会
 调用一次,除非immediately=True
 :param callback: 随后需要调用的方法名
 :param call_args: 随后需要调用的方法所需要的参数
 :param immediately: 是否立即调用
 :param interval: 调用间隔
 :return:
 """
 def decorate(func):
 @wraps(func)
 def wrapper(*args, **kwargs):
 self = args[0]
 try:
 return func(*args, **kwargs)
 finally:
 if immediately:
 getattr(self, callback)(*call_args)
 else:
 now = time.time()
 if now - self.__dict__.get("last_call_time", 0) > interval:
 getattr(self, callback)(*call_args)
 self.__dict__["last_call_time"] = now
 return wrapper
 return decorate
  • 类中的线程安全装饰器
def thread_safe_for_method_in_class(func):
 """
 对类中的方法进行线程安全包装
 :param func:
 :return:
 """
 @wraps(func)
 def wrapper(*args, **kwargs):
 self = args[0]
 try:
 self.lock.acquire()
 return func(*args, **kwargs)
 finally:
 self.lock.release()
 return wrapper
  • 获取ip
def get_ip():
 """
 获取局域网ip
 :return:
 """
 netcard_info = []
 info = psutil.net_if_addrs()
 for k,v in info.items():
 for item in v:
 if item[0] == 2 and not item[1]=='127.0.0.1':
 netcard_info.append((k,item[1]))
 if netcard_info:
 return netcard_info[0][1]

下面提供一些基础设施

common_stop_start_control :提供开,关,重启,状态等命令行服务

Singleton:单例元类Logger:提供日志服务

SettingsWrapper: 提供配置信息服务

ParallelMonitor: 使用Singleton构建, 多线程多进程统一管理器

LoggingMonitor:内建Logger和Settings

Service: 继承自ParallelMonitor,LoggingMonitor并实现common_stop_start_control 接口。编写微服务专用基类。

ProxyPool:基于redis的代理池,继承自Logger

ItemConsumer:kafka消费者,继承自Service

ItemProducer:kafka生产者,继承自Service

RedisQueue:基于redis的队列Fifo

DiskQueue:持久化 FIFO 队列

【项目实战】“Pythonic” 是 Python 社区的核心概念,指符合 Python 设计哲学、风格规范和最佳实践的代码或编程方式。 Pythonic” 是 Python 社区的核心概念,指。它并非单一的语法规则,而是一种“编写 Python 代码的正确姿势”,核心是让代码更简洁、易读、优雅,同时充分利用 Python 语言的特性,而非用其他语言(如 C、Java)的思维模式来写 Python 代码。“Pythonic” 不是一种强制规则,而是 Python 社区对“优雅代码”的共识。。 阅读详情

相关推荐

Java实现调用jython执行python文件的方法

主要介绍了Java实现调用jython执行python文件的方法,结合实例形式分析了Java调用jython执行python文件的常见操作技巧及相关问题解决方法,需要的朋友可以参考下

Python几类并行方法比较

Python几类并行方法比较

Angelaboy的博客 241

Ubuntu下用QEMU模拟运行OpenBMC

在调试过程中,安装了很多依赖库,具体没有记录。关于kvm,也没理清具体有什么作用。本文仅记录,用QEMU成功的将OpenBMC跑起来的过程,做备忘,也供大家参考。

Sunny的博客 1205

Python Timer:三种监控你程序运行时间的方式

Python Timer:三种监控你程序运行时间的方式 原文地址: https://www.zhblog.net/go/python/advanced/python-fstrings?t=562 很多开发者知道Python是一个开发效率很高的编程语言,纯Python程序对比其它编译型语言如:C、Rust、或Java可能运行很慢。通过这篇教程,你将看到如何使用Python timer去监控...

wwwcomcn123的专栏 6775

Oracle数据库的内存管理优化技巧

Oracle数据库作为企业级数据库管理系统,广泛应用于各种业务场景。内存管理是Oracle数据库性能优化的关键环节,合理的内存管理可以显著提高数据库的响应速度和吞吐量。本文的目的是深入探讨Oracle数据库内存管理的优化技巧,涵盖了系统全局区(SGA)和程序全局区(PGA)的管理、内存分配算法、内存参数调整等方面。通过详细的讲解和实际案例分析,帮助读者掌握优化Oracle数据库内存使用的方法,提高数据库的性能和稳定性。

2502_91592937的博客 996

升降机SEW MOVIDRIVE变频器设置

选择PO1 第2,3,9,13 位,点击“SendPA”Start reference,编码器反馈值为0(PI2/3 Actual position=0)提示:传送参考位置前请断开变频器安全24V电源,否则会弹出禁止修改提示框;提示:做这一步时,如果出现电机不能转动,或产生报警不能通过编码器匹配。下载配置的参数,提示:下载参数需要断开变频器的安全24V电源。编码器匹配通过后点击下一步,进入下图画面传送参考位置。1电机不能转动:a可能是由于变频器的安全24V未给。点击2.SEW总线扩展定位,定位块设置。

xdpcxq的专栏 5397

python工具类

python工具类socket通信工具类http调用工具类http post form表单工具类下载excel图片工具类 socket通信工具类 # -*- coding: utf-8 -*- import socket import time def tcp_server(ip, port): serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serverSocket.bind((ip, port))

GeekPlusA的博客 2892

uniapp [安卓苹果App端] - 实现支付宝支付功能+拉起支付宝app付款支付后返回跳转到原页面,详解uniApp如何唤起本机支付宝并跳转到支付页面全流程及示例源码(APP端支付宝支付,支持打包

全网最详细的uniapp支付宝支付教程,uniapp支付宝支付流程,uni-app项目在APP端使用支付宝支付功能,uniapp前端实现支付宝支付,uniapp中唤醒支付宝进行支付并返回app,uniApp调起支付宝支付失败报错,uniapp app端调支付宝支付接口,uniapp开发安卓App对接支付宝支付,uniapp苹果ios唤起支付宝支付,uniapp调用支付宝支付uniapp开发app-调用支付宝支付,uniapp开发安卓苹果app如何接入支付宝支付,UniApp中实现支付宝支付功能,支付报错,调

🏆 前端领域优质创作者 1万+

Python 的21个基本工具!

文末附带精品籽料和安装方法>本文将和大家一起了解用于软件开发、网络抓取和开发、数据分析和可视化以及机器学习的基本 Python 工具。Python 是最流行的编程语言之一。它简单、强大,并且由为开源项目做出贡献的社区驱动。Python 的多种用途是该语言如此受欢迎的原因;可以免费构建软件、开发 Web 服务、执行数据分析和可视化以及训练机器学习模型。本文中提到的 Python 工具列表将帮助初学者开始他们的 Python 开发之旅。它还将帮助数据专业人员和 Python 开发人员提高工作效率。

m0_75067629的博客 1973

Claude Code 里的 MCP 连接失败到底在报什么

文档还说明,HTTP 类型、stdio 类型等 MCP server 的接入方式不同,stdio server 会被 Claude Code 当作本地进程拉起,而 HTTP server 则需要 Claude Code 去访问一个已经存在的 HTTP endpoint。把这段输出翻成更接地气的运维语言,就是 Claude Code 已经知道我们想接两个外部能力,一个是 SAP ADT 官方 MCP,一个是 Chrome DevTools MCP,但当前没有一个完成握手。,因为它的信号更明确。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 146

基于SVD矩阵分解的用户购物篮预测分析实战

基于SVD矩阵分解的用户购物篮预测分析实战

360

python如何设计工具类_拒绝重复造轮子!python实用工具类及函数大推荐!

从2015年转行程序员至今也有两年多了,当初自学的java却误打误撞进了python的坑,入职之后一天java也没有写过,或许这可以理解成缘分吧,哈哈!使用python工作久了,随手写一些小工具再所难免,不知不觉,我的工具包也增长到了几千行代码。其中有的函数依照别人的代码改写,也有的源于自己的灵感,我自认为还是挺好用的。现在统一规整后做成pip包,拿出来分享给大家使用。函数都很小巧,代码实现相对简...

weixin_39587164的博客 233

OpenClaw实战四|内容创作全流程AI助理:自动撰稿+智能剪辑+多平台发布,一人顶一个内容团队

AI替代的是「写稿、剪辑、发布」这种流水线工作,真正让你解放出来,去做选题、创意、人设、变现这些高价值的事。OpenClaw这套内容创作全流程AI助理,最大的价值不是「帮你发内容」,而是让一个人,拥有一个内容团队的产能。不管是个人博主、小团队,还是企业新媒体,都能用零代码的方式,快速搭建属于自己的自动化内容矩阵。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 589

python 保留顺序去重_拒绝重复造轮子!python实用工具类及函数大推荐!

从2015年转行程序员至今也有两年多了,当初自学的java却误打误撞进了python的坑,入职之后一天java也没有写过,或许这可以理解成缘分吧,哈哈!使用python工作久了,随手写一些小工具再所难免,不知不觉,我的工具包也增长到了几千行代码。其中有的函数依照别人的代码改写,也有的源于自己的灵感,我自认为还是挺好用的。现在统一规整后做成pip包,拿出来分享给大家使用。函数都很小巧,代码实现相对简...

weixin_39902608的博客 144

红米K70至尊版修复“nv损坏”主板电阻图示 mtk芯片工程固件刷写与步骤说明

💝💝💝红米K70至尊版 机型代码:rothko,搭载天玑9300+旗舰芯片.后置5000万像素索尼IMX906高动态OIS主摄,800万像素超广角镜头,200万像素微距镜头,前置2000万像素摄像头,也适用于以下型号的小米机型:2407FPN8EG,2407FPN8ER,XIG06,A402XM,2407FRK8EC。 💝💝💝通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝💝-----此机型刷写工程固件预览界面 3💝💝💝------红米K

小马哥的专栏 1461

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lesson16:Python函数的认识

本文系统介绍了Python函数的核心概念与使用技巧。主要内容包括:函数的作用(代码复用、模块化、提升可读性)、定义规范(命名、文档字符串、单一职责等)、参数传递方式(位置/关键字/混合参数)、形参与实参区别。通过温度转换实例展示了完整函数实现,并总结了5个常见错误(缩进、参数不匹配等)。掌握这些基础知识能有效提升代码质量和开发效率。

2402_82363599的博客 1270

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python类设计实战:从建模思维到生产级订单系统

Python类本质是面向对象建模的核心工具,其价值远超语法定义——它通过封装数据与行为、定义清晰边界、支持状态生命周期管理,实现对现实业务实体(如订单、运单、支付方式)的精准抽象。理解类的设计原理,关键在于掌握何时使用类替代函数或字典、如何用组合/协议/继承合理组织关系、以及为何__dunder__方法(如__eq__、__str__、__repr__)是解决缓存失效、调试低效、序列化异常等工程痛点的必备机制。在电商、物流、支付等典型场景中,一个职责单一、依赖明确、状态受控的Order类,能显著提升代码可维

weixin_33842304的博客 358

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python零基础入门终极指南:从Hello World到爬虫实战(避开99%新人踩的坑)!!!

(最后叮嘱)编程不是看会的,是敲会的!不管你是完全小白还是转行选手,跟着我的节奏来,保准你少走3个月弯路!(超级重要)推荐直接装Python3.10+版本,别碰Python2这个老古董!(注意)缩进是Python的命根子!(警告)爬虫虽好,可不要贪杯哦!(亲测)新手先用VS Code,等做项目再换PyCharm更香!(震惊)Python连分号都不用打,就是这么任性!(秘籍)遇到问题先想有没有现成模块,别重复造轮子!(连类型都不用声明!

vectorlogic的博客 987

python基础自学

就像我们数学里的 ,你给它一个原料,它给你加工后的结果。关键字def结构返回值return(把结果扔回来,如果不写 return,函数跑完就结束了,不给你任何东西)# 定义一个做加法的工具# 调用它print(he) # 输出 8。

一季南凉的博客 1151

对比了上百个python程序员的开发习惯,这10个方法最节省时间!

前言 观察了100个python的开发习惯,从中做出对比,精选初10个最节省时间的方法,在此送上; 为以后不管是学习还是工作中提高效率 对比了上百个python程序员的开发习惯,这10个方法最节省时间! Python 是一个美丽的语言,可以激发用户对它的爱。所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我推荐你尝试Python. Python有很...

qq_42489308的博客 257

Python包管理工具pip深度解析:从依赖管理到虚拟环境实战

在Python开发中,依赖管理是构建可维护项目的核心基础。其原理在于通过自动化工具解决第三方库的安装、版本协调与依赖解析问题,从而避免手动管理带来的“依赖地狱”。这一技术价值体现在提升开发效率、保证环境一致性以及支持复杂项目的协作开发。应用场景广泛覆盖Web开发、数据分析、机器学习等各个领域,其中pip作为Python生态的标准包管理工具,通过连接PyPI中央仓库,实现了从包搜索、依赖解析到本地安装的全流程自动化。理解pip的工作机制,特别是其与虚拟环境的结合使用,能够有效解决环境隔离与依赖冲突问题,是每位

weixin_30410119的博客 295

多样性推荐系统:打破信息茧房的工业级实践

多样性推荐是现代推荐系统应对信息茧房、提升用户长期价值的核心能力。其本质是在保证相关性的前提下,建模并优化结果列表在语义、类目、时效等多维度的结构性差异。技术上依赖MMR重排序、图神经网络跨域建模与实时流式熔断等可部署方案;评估需突破AUC/NDCG局限,引入ILS、Coverage、Entropy等专用指标。该能力已广泛应用于电商首页、内容Feed流、知识平台等场景,直接驱动7日留存率、长尾曝光率与用户探索意愿提升。本文聚焦机器学习与AI推荐系统中多样性设计的原理落地、工程避坑与效果归因。

weixin_34341229的博客 549

AWS Lambda Python容器镜像构建六大核心原则

Lambda容器镜像是Serverless架构下Python函数部署的关键形态,其本质并非通用Docker应用,而是严格遵循Init-Invoke-Shutdown三阶段生命周期的轻量运行时载体。原理上依赖与Amazon Linux 2兼容的glibc环境、多阶段构建隔离编译与运行上下文,并通过ABI约束(如manylinux2014)、字节码清理和依赖精简实现体积与冷启动性能双重优化。技术价值在于平衡可重现性、安全性(SBOM/签名)与成本效率,广泛应用于API网关后端、数据清洗及含C扩展(如numpy、

chudan0503的博客 447

数据科学平民化:低代码与预训练模型如何赋能业务人员

数据科学正从专业算法工程师的专属能力,演变为业务人员可直接调用的基础工具。其核心原理在于技术栈的‘三明治’封装——上层提供傻瓜式业务接口,中层实现自动化流程调度,底层基础设施完全隐形。这一转变的技术价值体现在成本结构逆转:算力按需获取、预训练模型开箱即用、BI内置AI自动归因,使项目人力与硬件投入大幅下降。典型应用场景覆盖零售销量预测、医疗慢病分层、制造能耗优化及客服智能推荐等高频业务问题。但落地前提始终是数据质量可控与业务逻辑清晰,尤其依赖低代码平台的可解释性支撑和预训练模型API的场景适配能力。

weixin_30570101的博客 339

Python设计模式退化:从GOF到协议思维的工程演进

设计模式本质是语言表达力不足时的结构补偿机制。在Java、C#等静态类型语言中,Strategy、Observer、Factory等模式通过类继承与接口约束显式建模行为契约;而Python凭借函数即对象、鸭子类型、装饰器和Protocol协议等原生特性,将大量模式逻辑下沉为运行时语义或数据结构,实现‘隐式契约’替代‘显式接口’。这种范式迁移提升了代码可读性、可测试性与迭代效率,尤其适用于微服务快速验证、跨语言重构及动态系统集成场景。本文聚焦Python中设计模式的自然退化现象,结合真实生产案例解析协议驱动、

didi9310的博客 373

零基础Python学习路径:从环境搭建到项目实战的完整指南

编程语言作为人机交互的核心工具,其学习过程往往遵循从环境配置、语法基础到项目实践的路径。Python以其简洁的语法和丰富的生态,成为初学者入门编程的热门选择。理解变量、函数、循环等基础概念是掌握编程原理的第一步,而通过文件操作、模块导入等实践,能够快速构建具备实用价值的应用。本文聚焦零基础学习者的核心痛点,如环境搭建陷阱和缺乏即时反馈,提供一套以“最小可运行单元”为核心的系统学习框架,涵盖从基础语法到命令行项目实战的完整路径,帮助学习者建立“学习-实践-验证”的良性循环,高效跨越入门门槛。

chubaisheng8627的博客 395
上一篇: Python正则表达式 !五分钟带你完全掌握!
下一篇: 利用Python构建股票交易策略 !
普通网友
博客等级 码龄7年 438粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值