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

3步掌握Python金融数据获取:efinance开源工具实战指南

3步掌握Python金融数据获取efinance开源工具实战指南【免费下载链接】efinanceefinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库回测以及量化交易的好帮手项目地址: https://gitcode.com/gh_mirrors/ef/efinance还在为Python金融数据分析找不到免费、稳定、易用的数据源而烦恼吗今天我要为你介绍一个能够彻底解决这个问题的开源工具——efinance这是一个专为Python开发者设计的全能金融数据获取库让你用最简单的方式获取股票、基金、债券、期货等全市场数据。从数据困境到解决方案金融数据获取的三大痛点在开始量化交易或金融分析之前每个开发者都会面临同样的挑战数据源难寻- 免费数据源不稳定付费API又太贵数据格式混乱- 不同平台数据格式不统一清洗工作繁重学习成本高- 复杂的API设计和文档让人望而却步efinance正是为了解决这些问题而生它提供了一个统一的Python接口让你能够一键获取多种金融市场的历史数据和实时行情标准化输出Pandas DataFrame格式直接用于分析零配置启动安装即用无需复杂设置为什么选择efinance与其他金融数据工具相比efinance有几个独特的优势完全免费开源无需担心授权费用适合个人开发者和学生全市场覆盖支持A股、港股、美股、基金、债券、期货极简API函数命名直观参数设计人性化活跃社区持续更新维护问题响应迅速快速上手三分钟获取第一份数据第一步环境准备与安装开始之前确保你的Python环境已就绪。efinance支持Python 3.6及以上版本# 安装efinance pip install efinance # 如果需要最新开发版本 pip install githttps://gitcode.com/gh_mirrors/ef/efinance.git第二步核心功能初体验让我们从一个简单的例子开始获取贵州茅台的股票数据import efinance as ef # 获取股票基本信息 stock_info ef.stock.get_base_info(600519) print(f股票名称{stock_info[股票名称]}) print(f当前价格{stock_info[最新价]}) print(f市盈率{stock_info[市盈率(动)]}) # 获取历史K线数据 history_data ef.stock.get_quote_history(600519) print(f数据时间范围{history_data[日期].min()} 到 {history_data[日期].max()}) print(f数据行数{len(history_data)})第三步数据探索与分析获取数据后你可以立即开始分析import pandas as pd # 计算技术指标 history_data[MA5] history_data[收盘].rolling(window5).mean() history_data[MA20] history_data[收盘].rolling(window20).mean() history_data[MA60] history_data[收盘].rolling(window60).mean() # 简单策略信号 history_data[金叉信号] (history_data[MA5] history_data[MA20]) (history_data[MA5].shift(1) history_data[MA20].shift(1)) history_data[死叉信号] (history_data[MA5] history_data[MA20]) (history_data[MA5].shift(1) history_data[MA20].shift(1)) print(f发现{history_data[金叉信号].sum()}次金叉信号) print(f发现{history_data[死叉信号].sum()}次死叉信号)核心模块深度解析股票数据模块全面覆盖A股市场efinance的股票模块提供了最全面的A股数据支持基础信息获取# 获取单只股票基本信息 single_info ef.stock.get_base_info(000001) # 批量获取多只股票信息 multi_info ef.stock.get_base_info([000001, 000002, 000003]) # 获取实时行情 realtime_data ef.stock.get_realtime_quotes() # 获取资金流向 capital_flow ef.stock.get_today_bill(000001)历史数据查询# 获取日K线数据 daily_data ef.stock.get_quote_history(000001, klt101) # 获取5分钟K线 min5_data ef.stock.get_quote_history(000001, klt5) # 获取周K线 weekly_data ef.stock.get_quote_history(000001, klt7) # 获取月K线 monthly_data ef.stock.get_quote_history(000001, klt8)基金数据模块投资组合管理利器对于基金投资者efinance提供了完整的数据支持# 获取基金基本信息 fund_info ef.fund.get_base_info(161725) # 获取历史净值 nav_history ef.fund.get_quote_history(161725) # 获取基金持仓 holdings ef.fund.get_invest_position(161725) # 获取基金经理信息 manager_info ef.fund.get_fund_manager(161725)期货与债券数据多元化投资支持除了股票和基金efinance还支持期货和债券市场# 期货数据获取 futures_info ef.futures.get_futures_base_info() futures_history ef.futures.get_quote_history(115.ZCM) # 可转债数据获取 bond_info ef.bond.get_base_info(123111) bond_history ef.bond.get_quote_history(123111)实战应用场景场景一个人投资分析系统假设你想构建一个个人投资分析系统监控自己的投资组合class InvestmentMonitor: def __init__(self): self.portfolio { stocks: [600519, 000858, 000333], funds: [161725, 005827], bonds: [123111] } def update_portfolio_data(self): 更新投资组合数据 data {} # 更新股票数据 for stock in self.portfolio[stocks]: data[fstock_{stock}] { info: ef.stock.get_base_info(stock), history: ef.stock.get_quote_history(stock).tail(30) } # 更新基金数据 for fund in self.portfolio[funds]: data[ffund_{fund}] { info: ef.fund.get_base_info(fund), nav: ef.fund.get_quote_history(fund).tail(30) } return data def calculate_performance(self, data): 计算投资组合表现 performance {} for key, value in data.items(): if stock in key: # 计算股票收益率 returns value[history][收盘].pct_change().dropna() performance[key] { avg_return: returns.mean(), volatility: returns.std(), sharpe_ratio: returns.mean() / returns.std() if returns.std() 0 else 0 } return performance场景二量化策略研究与回测对于量化交易者efinance可以快速构建策略回测框架import numpy as np from datetime import datetime, timedelta class StrategyBacktester: def __init__(self, initial_capital100000): self.capital initial_capital self.positions {} def run_strategy(self, stock_codes, start_date, end_date): 运行策略回测 results {} for code in stock_codes: # 获取历史数据 data ef.stock.get_quote_history(code) data data[(data[日期] start_date) (data[日期] end_date)] if len(data) 0: continue # 简单移动平均策略 data[MA10] data[收盘].rolling(window10).mean() data[MA30] data[收盘].rolling(window30).mean() data[Signal] data[MA10] data[MA30] # 计算收益 data[Returns] data[收盘].pct_change() data[Strategy_Returns] data[Signal].shift(1) * data[Returns] results[code] { total_return: data[Strategy_Returns].sum(), sharpe_ratio: self.calculate_sharpe(data[Strategy_Returns]), max_drawdown: self.calculate_max_drawdown(data[收盘]) } return results def calculate_sharpe(self, returns, risk_free_rate0.02): 计算夏普比率 excess_returns returns - risk_free_rate/252 return np.sqrt(252) * excess_returns.mean() / excess_returns.std() if excess_returns.std() 0 else 0 def calculate_max_drawdown(self, prices): 计算最大回撤 cumulative_returns (1 prices.pct_change()).cumprod() running_max cumulative_returns.expanding().max() drawdown (cumulative_returns - running_max) / running_max return drawdown.min()场景三实时行情监控与预警构建一个实时行情监控系统import time from datetime import datetime class MarketMonitor: def __init__(self, watchlist, alert_thresholds): self.watchlist watchlist self.alert_thresholds alert_thresholds self.last_prices {} def start_monitoring(self, interval60): 开始监控 print(f开始监控 {len(self.watchlist)} 只股票...) while True: try: self.check_prices() time.sleep(interval) except KeyboardInterrupt: print(监控已停止) break except Exception as e: print(f监控出错: {e}) time.sleep(interval) def check_prices(self): 检查价格变动 current_time datetime.now().strftime(%Y-%m-%d %H:%M:%S) print(f\n[{current_time}] 检查行情...) # 获取实时行情 realtime_data ef.stock.get_realtime_quotes() for stock in self.watchlist: stock_data realtime_data[realtime_data[股票代码] stock] if not stock_data.empty: current_price stock_data.iloc[0][最新价] change_percent stock_data.iloc[0][涨跌幅] # 检查是否有预警条件触发 self.check_alerts(stock, current_price, change_percent) # 更新最后价格 self.last_prices[stock] current_price def check_alerts(self, stock, price, change): 检查预警条件 if stock in self.alert_thresholds: thresholds self.alert_thresholds[stock] if price_above in thresholds and price thresholds[price_above]: self.send_alert(f{stock} 价格突破 {thresholds[price_above]}当前价格: {price}) if price_below in thresholds and price thresholds[price_below]: self.send_alert(f{stock} 价格跌破 {thresholds[price_below]}当前价格: {price}) if change_above in thresholds and change thresholds[change_above]: self.send_alert(f{stock} 涨幅超过 {thresholds[change_above]}%当前涨幅: {change}%) if change_below in thresholds and change thresholds[change_below]: self.send_alert(f{stock} 跌幅超过 {thresholds[change_below]}%当前跌幅: {change}%) def send_alert(self, message): 发送预警信息 print(f⚠️ 预警: {message}) # 这里可以添加邮件、短信、微信通知等最佳实践与性能优化数据缓存策略频繁请求相同数据会浪费资源实现缓存机制可以显著提升性能import pickle import hashlib from datetime import datetime, timedelta import os class DataCache: def __init__(self, cache_dir./cache): self.cache_dir cache_dir os.makedirs(cache_dir, exist_okTrue) def get_cache_key(self, func_name, *args, **kwargs): 生成缓存键 key_str f{func_name}_{args}_{kwargs} return hashlib.md5(key_str.encode()).hexdigest() def get_cached_data(self, func, *args, cache_hours24, **kwargs): 获取缓存数据 cache_key self.get_cache_key(func.__name__, *args, **kwargs) cache_file os.path.join(self.cache_dir, f{cache_key}.pkl) # 检查缓存是否存在且未过期 if os.path.exists(cache_file): file_time datetime.fromtimestamp(os.path.getmtime(cache_file)) if datetime.now() - file_time timedelta(hourscache_hours): with open(cache_file, rb) as f: return pickle.load(f) # 获取新数据 data func(*args, **kwargs) # 保存缓存 with open(cache_file, wb) as f: pickle.dump(data, f) return data # 使用示例 cache DataCache() cached_data cache.get_cached_data( ef.stock.get_quote_history, 600519, cache_hours6 )批量数据获取优化当需要获取大量数据时使用批量接口和并行处理from concurrent.futures import ThreadPoolExecutor import pandas as pd def batch_get_stock_data(stock_codes, batch_size10): 批量获取股票数据 all_data {} # 分批处理 for i in range(0, len(stock_codes), batch_size): batch stock_codes[i:ibatch_size] # 使用线程池并行获取 with ThreadPoolExecutor(max_workers5) as executor: futures { executor.submit(ef.stock.get_base_info, code): code for code in batch } for future in futures: code futures[future] try: data future.result(timeout10) all_data[code] data except Exception as e: print(f获取 {code} 数据失败: {e}) return pd.DataFrame(all_data).T错误处理与重试机制网络请求可能不稳定实现健壮的错误处理import time from functools import wraps def retry_on_failure(max_retries3, delay1): 重试装饰器 def decorator(func): wraps(func) def wrapper(*args, **kwargs): for attempt in range(max_retries): try: return func(*args, **kwargs) except Exception as e: if attempt max_retries - 1: wait_time delay * (2 ** attempt) # 指数退避 print(f第{attempt1}次尝试失败{wait_time}秒后重试...) time.sleep(wait_time) else: raise Exception(f函数 {func.__name__} 执行失败: {e}) return None return wrapper return decorator # 使用装饰器 retry_on_failure(max_retries3, delay2) def safe_get_stock_data(stock_code): 安全获取股票数据 return ef.stock.get_quote_history(stock_code)常见问题与解决方案网络连接问题问题获取数据时出现网络超时或连接错误解决方案# 设置请求超时和重试 import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry def create_session_with_retry(): 创建带重试机制的会话 session requests.Session() retry_strategy Retry( total3, backoff_factor1, status_forcelist[429, 500, 502, 503, 504], ) adapter HTTPAdapter(max_retriesretry_strategy) session.mount(http://, adapter) session.mount(https://, adapter) return session # 在efinance中使用自定义会话 import efinance as ef ef.session create_session_with_retry()数据获取速度优化问题获取大量数据时速度较慢解决方案使用批量接口减少请求次数实现本地缓存避免重复请求使用异步请求提高并发性能import asyncio import aiohttp async def async_get_stock_data(session, stock_codes): 异步获取股票数据 tasks [] for code in stock_codes: # 这里需要根据实际API调整 task asyncio.create_task( fetch_stock_data(session, code) ) tasks.append(task) results await asyncio.gather(*tasks, return_exceptionsTrue) return results数据清洗与预处理问题获取的数据需要清洗和格式化解决方案def clean_stock_data(df): 清洗股票数据 # 处理缺失值 df df.dropna() # 转换数据类型 numeric_columns [开盘, 收盘, 最高, 最低, 成交量, 成交额] for col in numeric_columns: if col in df.columns: df[col] pd.to_numeric(df[col], errorscoerce) # 日期格式化 if 日期 in df.columns: df[日期] pd.to_datetime(df[日期]) df df.sort_values(日期) # 去除重复数据 df df.drop_duplicates(subset[日期], keeplast) return df生态系统整合与Pandas深度集成efinance返回的数据都是Pandas DataFrame格式可以无缝集成到现有的数据分析流程中import pandas as pd import numpy as np # 获取多只股票数据 stocks [600519, 000858, 000333] stock_data {} for code in stocks: data ef.stock.get_quote_history(code).tail(100) # 最近100天 stock_data[code] data.set_index(日期)[收盘] # 创建DataFrame df pd.DataFrame(stock_data) # 计算相关性矩阵 correlation_matrix df.corr() # 计算收益率 returns df.pct_change().dropna() # 计算波动率 volatility returns.std() * np.sqrt(252) print(相关性矩阵:) print(correlation_matrix) print(\n年化波动率:) print(volatility)与机器学习框架结合将efinance数据用于机器学习模型训练from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier def prepare_ml_data(stock_code, lookback20): 准备机器学习数据 # 获取历史数据 data ef.stock.get_quote_history(stock_code) data clean_stock_data(data) # 创建特征 features [] labels [] for i in range(lookback, len(data)-1): # 技术指标特征 window data.iloc[i-lookback:i] features.append([ window[收盘].mean(), # 平均价格 window[收盘].std(), # 价格波动 window[成交量].mean(), # 平均成交量 (data.iloc[i][收盘] data.iloc[i-1][收盘]), # 今日是否上涨 ]) # 标签明日是否上涨 labels.append(data.iloc[i1][收盘] data.iloc[i][收盘]) return np.array(features), np.array(labels) # 准备数据 X, y prepare_ml_data(600519) # 数据标准化 scaler StandardScaler() X_scaled scaler.fit_transform(X) # 划分训练测试集 X_train, X_test, y_train, y_test train_test_split( X_scaled, y, test_size0.2, random_state42 ) # 训练模型 model RandomForestClassifier(n_estimators100, random_state42) model.fit(X_train, y_train) # 评估模型 accuracy model.score(X_test, y_test) print(f模型准确率: {accuracy:.2%})开始你的金融数据分析之旅通过本文的介绍你已经掌握了使用efinance进行Python金融数据分析的核心技能。无论你是个人投资者想要构建自己的投资分析工具量化研究员需要高质量数据进行策略开发数据科学家寻找金融数据进行模型训练学生研究者需要免费数据源完成学术项目efinance都能为你提供强大的支持。下一步学习建议深入阅读官方文档查看详细的API说明和参数配置运行示例代码在examples目录中找到完整的应用案例参与社区贡献在GitHub上提交Issue或Pull Request构建实际项目将所学知识应用到真实的投资分析中记住最好的学习方式就是动手实践。从今天开始用efinance获取你的第一份金融数据开启Python量化分析的新篇章重要提示金融市场投资存在风险本文提供的工具和方法仅用于技术学习和研究目的不构成任何投资建议。请在充分了解风险的基础上做出理性的投资决策。【免费下载链接】efinanceefinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库回测以及量化交易的好帮手项目地址: https://gitcode.com/gh_mirrors/ef/efinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

3步掌握Python金融数据获取:efinance开源工具实战指南

3步掌握Python金融数据获取:efinance开源工具实战指南 【免费下载链接】efinance efinance 是一个可以快速获取基金、股票、债券、期货数据的 Python 库,回测以及量化交易的好帮手!🚀🚀🚀 项目地址: http…...

EEG微状态分析是“玄学”吗?用傅里叶替代和VAR模型揭开其线性本质的真相

EEG微状态分析的线性本质:从傅里叶替代到VAR模型的实证探索 脑电微状态分析近年来在认知神经科学领域掀起了一股研究热潮,但关于其方法论基础和生理意义的争议从未停歇。当研究者们发现不同聚类算法得出的微状态特征存在显著差异时,一个根本…...

PhotoPrism多实例部署避坑指南:从端口冲突到数据备份,我的Docker实战记录

PhotoPrism多实例部署实战:从端口规划到数据隔离的完整解决方案 在个人照片管理领域,PhotoPrism凭借其出色的AI识别和分类功能赢得了众多技术爱好者的青睐。但当我们需要为家庭成员或团队提供独立使用环境时,官方尚未支持的多用户功能就成了棘…...

别再死磕Chrome了!用Python的browser_cookie3库,试试Edge和Firefox提取Cookie更省心

多浏览器兼容策略:用Python轻松提取Edge与Firefox的Cookie数据 当Chrome的权限限制让你抓狂时,或许该换个思路了。作为一名长期与浏览器自动化打交道的开发者,我经历过太多次因为Chrome更新导致脚本突然崩溃的深夜调试。直到发现browser_coo…...

长期使用Taotoken聚合API对于项目运维复杂度的降低感受

长期使用Taotoken聚合API对于项目运维复杂度的降低感受 1. 统一接入带来的运维简化 作为项目维护者,最直接的体验是Taotoken提供的OpenAI兼容API统一了多个模型厂商的接入方式。过去需要为每个供应商单独维护SDK配置、密钥管理和版本兼容性检查,现在只…...

标题MySQL 数据库调优实战详解(适合 Java 项目,附完整优化思路)

这篇文章系统讲清楚 MySQL 数据库该怎么做调优、优化,以及在实际项目里应该按什么顺序去排查性能问题。 很多人一提到 MySQL 优化,第一反应就是“加索引”。但真正的数据库调优远不止索引这么简单,它通常包括:SQL 优化、索引优化、…...

对比自行维护多个API源,使用Taotoken聚合服务在稳定性上的体感差异

对比自行维护多个API源与使用Taotoken聚合服务的稳定性体验 1. 多模型接入的运维复杂度 在开发需要调用大模型能力的应用时,自行维护多个API源意味着需要为每个厂商单独申请密钥、管理配额并处理各自的认证方式。开发者需要为每个API源编写适配代码,处…...

影石创新第一季营收24.8亿:扣非后净利6225万 同比降61%

雷递网 雷建平 4月30日影石创新(公司代码:688775)日前发布2025年的年报及2026年第一季度的财报。财报显示,影石创新2026年第一季度研发投入为4.64亿元,较上年同期的2.32亿元增长100.59%。影石创新2026年第一季度净利为…...

教育机构搭建 AI 编程辅导平台时选择 Taotoken 的考量因素

教育机构搭建 AI 编程辅导平台时选择 Taotoken 的考量因素 1. 多模型统一接入满足教学多样性需求 编程教育机构通常需要覆盖多种编程语言和不同难度层级的教学场景。单一模型往往难以同时满足 Python 基础语法答疑、Java 面向对象设计辅导、C 算法优化等差异化需求。通过 Tao…...

揭秘VADER Sentiment的3大核心技术突破:如何用规则引擎超越传统NLP模型

揭秘VADER Sentiment的3大核心技术突破:如何用规则引擎超越传统NLP模型 【免费下载链接】vaderSentiment VADER Sentiment Analysis. VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and rule-based sentiment analysis tool that is speci…...

从光电编码器到精准转速:DSP28335 eQEP模块的M/T法测速保姆级实现与误差分析

从光电编码器到精准转速:DSP28335 eQEP模块的M/T法测速保姆级实现与误差分析 在伺服驱动和机器人关节控制系统中,电机转速的精确测量直接影响闭环控制的动态性能。传统测速方法在宽转速范围内往往面临精度与响应速度的权衡,而TI DSP28335的增…...

3分钟搞定实时屏幕翻译:游戏外语、视频硬字幕全解决

3分钟搞定实时屏幕翻译:游戏外语、视频硬字幕全解决 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 你是否曾经…...

Keras模型持久化:保存、加载与生产部署实战

1. 模型持久化的重要性与场景解析在深度学习项目推进过程中,模型持久化是连接实验环境与生产部署的关键桥梁。上周团队里有个实习生训练了3天的图像分类模型,因为没及时保存导致服务器意外重启后需要重新训练——这种惨痛教训在业内其实非常普遍。Keras作…...

从设计图纸到车间工单:手把手拆解SAP中BOM数据的完整流转链路

从设计图纸到车间工单:手把手拆解SAP中BOM数据的完整流转链路 在制造业数字化转型的浪潮中,BOM(物料清单)作为连接产品设计与生产制造的"DNA链条",其数据流转效率直接决定了企业能否快速响应市场变化。对于使…...

6款UI设计工具技术横评(2026):从产品架构到协作能力等的工程化对比

2026年UI设计工具赛道发生了很大的变化——Adobe XD停更、InVision关停、Figma 2025年涨价、国产工具借AI红利完成集中爆发。对设计师、前端工程师、产品经理而言,工具选型从用什么变成怎么选。本文从技术视角对6款主流UI设计工具进行系统横评——国内的Pixso、墨刀…...

保姆级教程:用PPOCRLabel给PaddleOCR制作数据集,从打标到训练集划分一步到位

工业级OCR数据标注实战:从PPOCRLabel高效标注到PaddleOCR模型训练全解析 当我们需要为特定场景定制OCR模型时,数据准备环节往往成为最大的瓶颈。传统标注工具效率低下,而PaddleOCR生态中的PPOCRLabel却能在保证质量的前提下,将标注…...

HFSS 2020 保姆级教程:从零开始,用T型波导实例手把手教你设置关键选项(含避坑点)

HFSS 2020 实战指南:T型波导建模与仿真全流程解析 作为一名高频电磁场仿真工程师,我深知HFSS这款工具的强大与复杂。2020版本在用户体验和计算效率上都有显著提升,但对于新手来说,那些隐藏在菜单深处的选项设置往往成为入门路上的…...

PX4-Autopilot固定翼无人机编队飞行:从算法原理到系统部署的深度实战指南

PX4-Autopilot固定翼无人机编队飞行:从算法原理到系统部署的深度实战指南 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot PX4-Autopilot作为开源无人机飞控系统的行业标杆,为…...

Altium Designer(AD 20)-在PCB图中封装pin绿色警告(PCB部分)

LQFP64 引脚变绿且报错距离 <0.254mm&#xff0c;说明触发了 PCB 设计规则的 安全间距&#xff08;Clearance&#xff09; 问题原因解释 芯片物理引脚之间最窄处通常只有 0.17 - 0.27mm&#xff0c;而当前 PCB 规则设置的全局最小间距是 0.254mm (10mil)-8。这意味着芯片内…...

蓝牙耳机一边响一边不响?先做这几步自查修复

日常生活中&#xff0c;很多人都会遇到蓝牙耳机一边响一边不响的问题&#xff0c;轻则影响听歌、通话体验&#xff0c;重则让人误以为耳机彻底损坏。其实多数情况下&#xff0c;这类故障并非硬件不可逆损坏&#xff0c;通过简单的自查和操作&#xff0c;就能实现修复&#xff0…...

无需编写代码,通过Taotoken模型广场直观比较与选择合适的大模型

无需编写代码&#xff0c;通过Taotoken模型广场直观比较与选择合适的大模型 1. 访问模型广场 登录Taotoken控制台后&#xff0c;左侧导航栏点击「模型广场」即可进入核心选型界面。该页面以卡片形式展示平台聚合的各类大模型&#xff0c;默认按热度排序。每个模型卡片包含以下…...

Illustrator脚本:探索ReplaceItems.jsx如何提升设计效率10倍

Illustrator脚本&#xff1a;探索ReplaceItems.jsx如何提升设计效率10倍 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在Adobe Illustrator的日常设计工作中&#xff0c;您是否曾…...

从零到英雄:CodeCombat如何让编程学习像游戏一样上瘾

从零到英雄&#xff1a;CodeCombat如何让编程学习像游戏一样上瘾 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 你是否曾经面对满屏的代码感到迷茫&#xff1f;是否尝试过传统编程教程却半途而废…...

不止于定时:STM32定时器的PWM模式实战,驱动LED呼吸灯与舵机控制

STM32定时器PWM模式实战&#xff1a;从呼吸灯到舵机控制的深度解析 在嵌入式开发领域&#xff0c;定时器堪称微控制器的"瑞士军刀"。而PWM&#xff08;脉冲宽度调制&#xff09;作为定时器最经典的应用之一&#xff0c;其重要性怎么强调都不为过。无论是让LED柔和地呼…...

别再踩坑了!Vue项目里用vue-pdf-app预览PDF,这个CSS样式不设置就白搭

Vue项目中vue-pdf-app组件不显示的深度排查指南 最近在Vue项目中使用vue-pdf-app组件时&#xff0c;遇到了一个看似简单却让人抓狂的问题——组件明明已经按照官方文档正确引入&#xff0c;却死活不显示。经过一番折腾&#xff0c;终于找到了问题的根源&#xff1a;容器高度未设…...

FontForge实战:手把手教你制作一个支持简中、泰文、老挝文的“超级字体”文件(.ttf)

FontForge实战&#xff1a;手把手教你制作一个支持简中、泰文、老挝文的“超级字体”文件&#xff08;.ttf&#xff09; 在全球化数字产品的开发过程中&#xff0c;多语言支持往往是让开发者头疼的难题之一。特别是当产品需要同时显示简体中文、泰文、老挝文等差异显著的书写系…...

群晖百度网盘套件终极指南:Docker容器化部署与自动化同步完整方案

群晖百度网盘套件终极指南&#xff1a;Docker容器化部署与自动化同步完整方案 【免费下载链接】synology-baiduNetdisk-package 项目地址: https://gitcode.com/gh_mirrors/sy/synology-baiduNetdisk-package 在群晖NAS上实现百度网盘无缝集成的技术解决方案&#xff0…...

系统防护的几种级别

...

QMCDecode:解锁QQ音乐加密格式的桌面钥匙

QMCDecode&#xff1a;解锁QQ音乐加密格式的桌面钥匙 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认转换结果存储到…...

如何在 MATLAB 中通过 Taotoken 调用 OpenAI 兼容的大模型 API

如何在 MATLAB 中通过 Taotoken 调用 OpenAI 兼容的大模型 API 1. 准备工作 在开始之前&#xff0c;请确保您已完成以下准备工作&#xff1a;登录 Taotoken 平台并创建 API Key&#xff0c;该 Key 将用于后续的身份验证。同时&#xff0c;在模型广场中选择您需要调用的模型&a…...