@umacloud/knowledge 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/00-governance/governance-capabilities.md +557 -0
  2. package/00-governance/knowledge-map.md +39 -0
  3. package/00-governance/maintenance-policy.md +76 -0
  4. package/00-governance/review-checklist.md +81 -0
  5. package/README.md +13 -0
  6. package/ai/01-standards/agent-development-complete.md +691 -0
  7. package/ai/01-standards/llm-application-complete.md +488 -0
  8. package/ai/01-standards/mlops-complete.md +798 -0
  9. package/ai/01-standards/prompt-engineering-complete.md +646 -0
  10. package/ai/01-standards/rag-architecture-complete.md +649 -0
  11. package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
  12. package/ai/03-checklists/ai-project-checklist.md +215 -0
  13. package/ai/04-antipatterns/ai-antipatterns.md +661 -0
  14. package/ai/05-cases/case-rag-production.md +147 -0
  15. package/ai/06-glossary/ai-glossary.md +162 -0
  16. package/ai/agent-evaluation-benchmark.md +53 -0
  17. package/ai/ai-agent-memory-context-management.md +41 -0
  18. package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
  19. package/ai/ai-data-security-and-compliance-playbook.md +37 -0
  20. package/ai/ai-domain-index-and-checklist.md +40 -0
  21. package/ai/ai-governance-maturity-model.md +50 -0
  22. package/ai/ai-model-selection-and-routing-strategy.md +47 -0
  23. package/ai/ai-observability-and-oncall-runbook.md +52 -0
  24. package/ai/ai-rag-engineering-playbook.md +42 -0
  25. package/ai/ai-red-team-and-safety-evaluation.md +42 -0
  26. package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
  27. package/ai/llm-agent-engineering-deep-dive.md +57 -0
  28. package/ai/prompt-and-tool-guardrails.md +52 -0
  29. package/api/01-standards/enterprise-api-standards.md +198 -0
  30. package/api/01-standards/rest-api-design-guide.md +63 -0
  31. package/api/02-playbooks/api-pagination-playbook.md +93 -0
  32. package/api/02-playbooks/graphql-production-playbook.md +176 -0
  33. package/api/03-checklists/api-review-checklist.md +55 -0
  34. package/api/04-antipatterns/api-antipatterns.md +112 -0
  35. package/architecture/01-standards/api-gateway-patterns.md +496 -0
  36. package/architecture/01-standards/cloud-native-patterns.md +644 -0
  37. package/architecture/01-standards/distributed-systems-patterns.md +591 -0
  38. package/architecture/01-standards/event-driven-architecture.md +595 -0
  39. package/architecture/01-standards/microservices-patterns-complete.md +968 -0
  40. package/architecture/01-standards/microservices-patterns.md +495 -0
  41. package/architecture/01-standards/system-design-interview.md +664 -0
  42. package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
  43. package/architecture/02-playbooks/migration-playbook.md +780 -0
  44. package/architecture/02-playbooks/system-design-playbook.md +779 -0
  45. package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
  46. package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
  47. package/architecture/05-cases/case-netflix-microservices.md +413 -0
  48. package/architecture/06-glossary/architecture-glossary.md +164 -0
  49. package/architecture/adr-template-and-examples.md +38 -0
  50. package/architecture/api-gateway-deep-dive.md +1291 -0
  51. package/architecture/configuration-management.md +1162 -0
  52. package/architecture/distributed-transactions.md +1220 -0
  53. package/architecture/microservices-complete.md +735 -0
  54. package/architecture/resilience-and-disaster-patterns.md +37 -0
  55. package/architecture/service-governance.md +1198 -0
  56. package/architecture/system-architecture-deep-dive.md +37 -0
  57. package/backend/01-standards/analytics-and-growth.md +65 -0
  58. package/backend/01-standards/api-and-error-conventions.md +120 -0
  59. package/backend/01-standards/application-layering-and-packaging.md +160 -0
  60. package/backend/01-standards/auth-implementation.md +104 -0
  61. package/backend/01-standards/backend-framework-idioms.md +74 -0
  62. package/backend/01-standards/background-jobs-and-async.md +66 -0
  63. package/backend/01-standards/caching-strategies-complete.md +390 -0
  64. package/backend/01-standards/config-and-observability.md +77 -0
  65. package/backend/01-standards/data-modeling-and-persistence.md +94 -0
  66. package/backend/01-standards/django-complete.md +1765 -0
  67. package/backend/01-standards/email-and-notifications.md +64 -0
  68. package/backend/01-standards/fastapi-complete.md +925 -0
  69. package/backend/01-standards/file-upload-and-storage.md +66 -0
  70. package/backend/01-standards/graphql-api-complete.md +416 -0
  71. package/backend/01-standards/llm-application-standard.md +78 -0
  72. package/backend/01-standards/message-queue-patterns.md +379 -0
  73. package/backend/01-standards/microservices-and-distributed.md +78 -0
  74. package/backend/01-standards/nestjs-complete.md +2167 -0
  75. package/backend/01-standards/payment-integration.md +80 -0
  76. package/backend/01-standards/rate-limiting-complete.md +451 -0
  77. package/backend/01-standards/realtime-and-websocket.md +65 -0
  78. package/backend/01-standards/search-and-filtering.md +64 -0
  79. package/backend/01-standards/spring-boot-complete.md +445 -0
  80. package/backend/02-playbooks/api-design-playbook.md +718 -0
  81. package/backend/02-playbooks/email-send-playbook.md +130 -0
  82. package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
  83. package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
  84. package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
  85. package/backend/03-checklists/api-launch-checklist.md +189 -0
  86. package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
  87. package/blockchain/01-standards/blockchain-basics.md +557 -0
  88. package/blockchain/01-standards/smart-contract-development.md +1315 -0
  89. package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
  90. package/cicd/01-standards/github-actions-complete.md +473 -0
  91. package/cicd/01-standards/release-and-store-submission.md +75 -0
  92. package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
  93. package/cicd/02-playbooks/release-management-playbook.md +605 -0
  94. package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
  95. package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
  96. package/cicd/05-cases/case-deployment-automation.md +221 -0
  97. package/cicd/05-cases/case-gitops-transformation.md +212 -0
  98. package/cicd/06-glossary/cicd-glossary.md +114 -0
  99. package/cicd/cicd-blueprint-deep-dive.md +38 -0
  100. package/cicd/release-readiness-gate.md +37 -0
  101. package/cloud-native/01-standards/container-security.md +741 -0
  102. package/cloud-native/01-standards/kubernetes-complete.md +812 -0
  103. package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
  104. package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
  105. package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
  106. package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
  107. package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
  108. package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
  109. package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
  110. package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
  111. package/cloud-native/03-checklists/container-security-checklist.md +431 -0
  112. package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
  113. package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
  114. package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
  115. package/cloud-native/05-cases/case-k8s-migration.md +478 -0
  116. package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
  117. package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
  118. package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
  119. package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
  120. package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
  121. package/data/01-standards/elasticsearch-complete.md +2098 -0
  122. package/data/01-standards/postgresql-complete.md +1613 -0
  123. package/data/01-standards/redis-complete.md +1527 -0
  124. package/data/02-playbooks/database-optimization-playbook.md +403 -0
  125. package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
  126. package/data/03-checklists/database-launch-checklist.md +187 -0
  127. package/data/04-antipatterns/database-antipatterns.md +873 -0
  128. package/data/05-cases/case-database-migration.md +310 -0
  129. package/data/06-glossary/database-glossary.md +440 -0
  130. package/data/data-governance-and-modeling-deep-dive.md +39 -0
  131. package/data-engineering/01-standards/airflow-complete.md +523 -0
  132. package/data-engineering/01-standards/kafka-complete.md +1521 -0
  133. package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
  134. package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
  135. package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
  136. package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
  137. package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
  138. package/database/01-standards/database-schema-standards.md +147 -0
  139. package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
  140. package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
  141. package/database/02-playbooks/postgresql-production-playbook.md +146 -0
  142. package/database/02-playbooks/redis-caching-playbook.md +117 -0
  143. package/database/03-checklists/database-review-checklist.md +50 -0
  144. package/database/04-antipatterns/database-antipatterns.md +112 -0
  145. package/design/01-standards/ui-design-system-complete.md +423 -0
  146. package/design/02-playbooks/design-handoff-playbook.md +254 -0
  147. package/design/02-playbooks/design-review-playbook.md +388 -0
  148. package/design/03-checklists/design-review-checklist.md +246 -0
  149. package/design/04-antipatterns/design-antipatterns.md +378 -0
  150. package/design/05-cases/case-design-system-adoption.md +328 -0
  151. package/design/06-glossary/design-glossary.md +329 -0
  152. package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
  153. package/design/ux-system-deep-dive.md +38 -0
  154. package/design-systems/00-craft-rules.md +71 -0
  155. package/design-systems/aesthetic-families.md +43 -0
  156. package/design-systems/anti-ai-slop.md +162 -0
  157. package/design-systems/bold-geometric.md +120 -0
  158. package/design-systems/brutalist-bold.md +103 -0
  159. package/design-systems/editorial-clean.md +109 -0
  160. package/design-systems/glass-aurora.md +108 -0
  161. package/design-systems/modern-minimal.md +145 -0
  162. package/design-systems/premium-luxury.md +106 -0
  163. package/design-systems/product-type-design-map.md +48 -0
  164. package/design-systems/soft-warm.md +123 -0
  165. package/design-systems/tech-utility.md +113 -0
  166. package/desktop/01-standards/desktop-app-standard.md +72 -0
  167. package/desktop/01-standards/desktop-design.md +71 -0
  168. package/development/00-governance/document-template.md +41 -0
  169. package/development/01-standards/api-versioning-strategies.md +432 -0
  170. package/development/01-standards/authentication-patterns-complete.md +479 -0
  171. package/development/01-standards/css-architecture-complete.md +550 -0
  172. package/development/01-standards/database-migration-strategies.md +484 -0
  173. package/development/01-standards/elasticsearch-complete.md +347 -0
  174. package/development/01-standards/git-complete.md +371 -0
  175. package/development/01-standards/golang-complete.md +1565 -0
  176. package/development/01-standards/graphql-complete.md +298 -0
  177. package/development/01-standards/javascript-bundlers-complete.md +469 -0
  178. package/development/01-standards/javascript-typescript-complete.md +528 -0
  179. package/development/01-standards/jest-complete.md +275 -0
  180. package/development/01-standards/linux-complete.md +234 -0
  181. package/development/01-standards/logging-observability-complete.md +526 -0
  182. package/development/01-standards/microservices-communication.md +502 -0
  183. package/development/01-standards/mongodb-complete.md +406 -0
  184. package/development/01-standards/oauth2-complete.md +285 -0
  185. package/development/01-standards/performance-optimization-complete.md +289 -0
  186. package/development/01-standards/playwright-complete.md +247 -0
  187. package/development/01-standards/postgresql-complete.md +456 -0
  188. package/development/01-standards/pytest-complete.md +340 -0
  189. package/development/01-standards/python-async-programming.md +902 -0
  190. package/development/01-standards/python-complete.md +956 -0
  191. package/development/01-standards/python-decorators-complete.md +799 -0
  192. package/development/01-standards/python-design-patterns.md +2854 -0
  193. package/development/01-standards/python-packaging-distribution.md +420 -0
  194. package/development/01-standards/python-testing-strategies.md +607 -0
  195. package/development/01-standards/python-web-frameworks-comparison.md +471 -0
  196. package/development/01-standards/redis-complete.md +317 -0
  197. package/development/01-standards/rest-api-complete.md +316 -0
  198. package/development/01-standards/rust-complete.md +578 -0
  199. package/development/01-standards/typescript-advanced-types.md +1513 -0
  200. package/development/01-standards/web-security-complete.md +292 -0
  201. package/development/02-playbooks/api-design-playbook.md +810 -0
  202. package/development/02-playbooks/database-migration-playbook.md +580 -0
  203. package/development/02-playbooks/debugging-playbook.md +692 -0
  204. package/development/02-playbooks/feature-delivery-playbook.md +430 -0
  205. package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
  206. package/development/02-playbooks/performance-optimization-playbook.md +531 -0
  207. package/development/02-playbooks/performance-tuning-playbook.md +652 -0
  208. package/development/02-playbooks/refactor-playbook.md +403 -0
  209. package/development/02-playbooks/release-playbook.md +469 -0
  210. package/development/03-checklists/architecture-review-checklist.md +168 -0
  211. package/development/03-checklists/data-migration-checklist.md +157 -0
  212. package/development/03-checklists/oncall-handover-checklist.md +173 -0
  213. package/development/03-checklists/pr-checklist.md +158 -0
  214. package/development/03-checklists/production-readiness-checklist.md +190 -0
  215. package/development/03-checklists/release-readiness-checklist.md +154 -0
  216. package/development/03-checklists/security-review-checklist.md +182 -0
  217. package/development/04-antipatterns/api-antipatterns.md +657 -0
  218. package/development/04-antipatterns/architecture-antipatterns.md +686 -0
  219. package/development/04-antipatterns/backend-antipatterns.md +648 -0
  220. package/development/04-antipatterns/cicd-antipatterns.md +540 -0
  221. package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
  222. package/development/04-antipatterns/data-antipatterns.md +658 -0
  223. package/development/04-antipatterns/database-antipatterns.md +578 -0
  224. package/development/04-antipatterns/frontend-antipatterns.md +635 -0
  225. package/development/04-antipatterns/reliability-antipatterns.md +700 -0
  226. package/development/04-antipatterns/security-antipatterns.md +747 -0
  227. package/development/05-cases/case-api-version-migration.md +428 -0
  228. package/development/05-cases/case-authorization-hardening.md +383 -0
  229. package/development/05-cases/case-bluegreen-rollback.md +466 -0
  230. package/development/05-cases/case-cache-snowball-protection.md +485 -0
  231. package/development/05-cases/case-ci-cd-pipeline.md +544 -0
  232. package/development/05-cases/case-database-scaling.md +500 -0
  233. package/development/05-cases/case-db-hotspot-optimization.md +487 -0
  234. package/development/05-cases/case-incident-mttr-reduction.md +563 -0
  235. package/development/05-cases/case-microservice-migration.md +375 -0
  236. package/development/05-cases/case-performance-optimization.md +406 -0
  237. package/development/05-cases/case-security-incident-response.md +345 -0
  238. package/development/06-glossary/full-stack-glossary.md +166 -0
  239. package/development/09-maturity/quarterly-audit-template.md +35 -0
  240. package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
  241. package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
  242. package/development/12-scenarios/development-scenarios-guide.md +565 -0
  243. package/development/13-implementation-assets/implementation-toolkit.md +282 -0
  244. package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
  245. package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
  246. package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
  247. package/development/api-contract-and-versioning-guide.md +36 -0
  248. package/development/api-governance-complete.md +43 -0
  249. package/development/backend-engineering-complete.md +43 -0
  250. package/development/code-review-quality-complete.md +43 -0
  251. package/development/concurrency-reliability-complete.md +43 -0
  252. package/development/database-engineering-complete.md +43 -0
  253. package/development/engineering-effectiveness-complete.md +43 -0
  254. package/development/engineering-standards-deep-dive.md +38 -0
  255. package/development/frontend-engineering-complete.md +43 -0
  256. package/development/performance-capacity-complete.md +43 -0
  257. package/development/refactor-migration-complete.md +42 -0
  258. package/development/refactoring-and-techdebt-playbook.md +37 -0
  259. package/development/security-in-development-complete.md +43 -0
  260. package/devops/01-standards/cicd-pipeline-complete.md +262 -0
  261. package/devops/01-standards/docker-complete.md +1490 -0
  262. package/devops/01-standards/github-actions-complete.md +337 -0
  263. package/devops/01-standards/kubernetes-complete.md +638 -0
  264. package/devops/01-standards/terraform-complete.md +2117 -0
  265. package/devops/02-playbooks/docker-compose-playbook.md +233 -0
  266. package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
  267. package/devops/02-playbooks/docker-production-playbook.md +952 -0
  268. package/edge-iot/01-standards/edge-iot-complete.md +473 -0
  269. package/experts/architect/api-design.md +178 -0
  270. package/experts/architect/methodology.md +124 -0
  271. package/experts/architect/security.md +75 -0
  272. package/experts/backend-lead/methodology.md +216 -0
  273. package/experts/devops/methodology.md +160 -0
  274. package/experts/frontend-lead/methodology.md +178 -0
  275. package/experts/product-manager/industry/ecommerce.md +43 -0
  276. package/experts/product-manager/industry/saas.md +40 -0
  277. package/experts/product-manager/methodology.md +97 -0
  278. package/experts/qa-lead/methodology.md +123 -0
  279. package/experts/qa-lead/test-strategy.md +128 -0
  280. package/experts/uiux-designer/methodology.md +125 -0
  281. package/frontend/01-standards/accessibility-complete.md +532 -0
  282. package/frontend/01-standards/accessibility-standard.md +74 -0
  283. package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
  284. package/frontend/01-standards/design-tokens-complete.md +444 -0
  285. package/frontend/01-standards/forms-and-validation.md +77 -0
  286. package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
  287. package/frontend/01-standards/i18n-and-localization.md +65 -0
  288. package/frontend/01-standards/nextjs-complete.md +451 -0
  289. package/frontend/01-standards/react-complete.md +713 -0
  290. package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
  291. package/frontend/01-standards/react-hooks-complete.md +1171 -0
  292. package/frontend/01-standards/seo-and-web-vitals.md +77 -0
  293. package/frontend/01-standards/state-management-complete.md +444 -0
  294. package/frontend/01-standards/vue-complete.md +499 -0
  295. package/frontend/01-standards/vue3-complete.md +2002 -0
  296. package/frontend/01-standards/web-framework-best-practices.md +64 -0
  297. package/frontend/01-standards/web-performance-complete.md +495 -0
  298. package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
  299. package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
  300. package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
  301. package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
  302. package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
  303. package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
  304. package/frontend/03-checklists/component-quality-checklist.md +166 -0
  305. package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
  306. package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
  307. package/frontend/05-cases/case-performance-optimization.md +274 -0
  308. package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
  309. package/harmony/01-standards/harmonyos-design.md +65 -0
  310. package/high-quality-engineering-playbook.md +54 -0
  311. package/incident/01-standards/incident-response-complete.md +303 -0
  312. package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
  313. package/incident/02-playbooks/postmortem-playbook.md +398 -0
  314. package/incident/03-checklists/incident-readiness-checklist.md +181 -0
  315. package/incident/04-antipatterns/incident-antipatterns.md +490 -0
  316. package/incident/05-cases/case-cascade-failure.md +176 -0
  317. package/incident/06-glossary/incident-glossary.md +114 -0
  318. package/incident/postmortem-and-response-deep-dive.md +39 -0
  319. package/industries/ecommerce/ecommerce-complete.md +631 -0
  320. package/industries/education/education-complete.md +555 -0
  321. package/industries/fintech/fintech-complete.md +501 -0
  322. package/industries/gaming/gaming-complete.md +587 -0
  323. package/industries/healthcare/healthcare-complete.md +452 -0
  324. package/low-code/01-standards/low-code-complete.md +944 -0
  325. package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
  326. package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
  327. package/miniprogram/01-standards/miniprogram-design.md +61 -0
  328. package/miniprogram/01-standards/miniprogram-standard.md +81 -0
  329. package/mobile/01-standards/android-material-design.md +70 -0
  330. package/mobile/01-standards/flutter-complete.md +384 -0
  331. package/mobile/01-standards/ios-design-hig.md +78 -0
  332. package/mobile/01-standards/mobile-app-standard.md +85 -0
  333. package/mobile/01-standards/react-native-complete.md +352 -0
  334. package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
  335. package/mobile/02-playbooks/mobile-performance.md +473 -0
  336. package/mobile/03-checklists/mobile-release-checklist.md +234 -0
  337. package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
  338. package/mobile/05-cases/case-app-performance.md +500 -0
  339. package/mobile/05-cases/case-app-startup-optimization.md +218 -0
  340. package/mobile/06-glossary/mobile-glossary.md +484 -0
  341. package/observability/01-standards/observability-standards.md +103 -0
  342. package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
  343. package/observability/02-playbooks/structured-logging-playbook.md +73 -0
  344. package/observability/03-checklists/observability-checklist.md +54 -0
  345. package/observability/04-antipatterns/observability-antipatterns.md +106 -0
  346. package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
  347. package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
  348. package/operations/03-checklists/production-launch-checklist.md +365 -0
  349. package/operations/04-antipatterns/operations-antipatterns.md +664 -0
  350. package/operations/05-cases/case-sre-practices.md +581 -0
  351. package/operations/06-glossary/operations-glossary.md +120 -0
  352. package/operations/aiops-anomaly-detection.md +758 -0
  353. package/operations/capacity-planning.md +1061 -0
  354. package/operations/chaos-engineering.md +659 -0
  355. package/operations/incident-command-system.md +38 -0
  356. package/operations/observability-complete.md +442 -0
  357. package/operations/slo-sli-playbook.md +517 -0
  358. package/operations/sre-operations-deep-dive.md +39 -0
  359. package/package.json +8 -0
  360. package/performance/01-standards/performance-and-scalability.md +80 -0
  361. package/performance/01-standards/performance-standards.md +156 -0
  362. package/performance/02-playbooks/query-optimization-playbook.md +103 -0
  363. package/performance/03-checklists/performance-checklist.md +56 -0
  364. package/performance/04-antipatterns/performance-antipatterns.md +146 -0
  365. package/product/01-standards/product-management-complete.md +285 -0
  366. package/product/02-playbooks/feature-launch-playbook.md +207 -0
  367. package/product/02-playbooks/user-research-playbook.md +532 -0
  368. package/product/03-checklists/feature-launch-checklist.md +275 -0
  369. package/product/04-antipatterns/product-antipatterns.md +355 -0
  370. package/product/05-cases/case-mvp-to-scale.md +384 -0
  371. package/product/06-glossary/product-glossary.md +462 -0
  372. package/product/feature-prioritization-framework.md +40 -0
  373. package/product/kpi-and-metric-tree.md +37 -0
  374. package/product/product-discovery-and-prd-deep-dive.md +41 -0
  375. package/quantum/01-standards/quantum-complete.md +1186 -0
  376. package/security/01-standards/api-security-complete.md +511 -0
  377. package/security/01-standards/container-runtime-security.md +574 -0
  378. package/security/01-standards/data-protection-gdpr.md +543 -0
  379. package/security/01-standards/owasp-top10-complete.md +1890 -0
  380. package/security/01-standards/secure-coding-baseline.md +90 -0
  381. package/security/01-standards/supply-chain-security.md +441 -0
  382. package/security/01-standards/web-security-checklist.md +108 -0
  383. package/security/01-standards/zero-trust-architecture.md +521 -0
  384. package/security/02-playbooks/auth-sso-playbook.md +166 -0
  385. package/security/02-playbooks/incident-response-security-playbook.md +588 -0
  386. package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
  387. package/security/02-playbooks/payment-integration-playbook.md +119 -0
  388. package/security/02-playbooks/penetration-testing-playbook.md +517 -0
  389. package/security/03-checklists/security-audit-checklist.md +356 -0
  390. package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
  391. package/security/05-cases/case-log4shell-incident.md +537 -0
  392. package/security/05-cases/case-major-breaches.md +468 -0
  393. package/security/06-glossary/security-glossary.md +212 -0
  394. package/security/compliance-automation.md +993 -0
  395. package/security/container-security.md +680 -0
  396. package/security/devsecops-complete.md +426 -0
  397. package/security/sast-dast-sca.md +775 -0
  398. package/security/secrets-management.md +594 -0
  399. package/security/security-architecture-deep-dive.md +37 -0
  400. package/security/threat-modeling-stride-playbook.md +40 -0
  401. package/seed-templates/auth-system.md +59 -0
  402. package/seed-templates/blog-content.md +94 -0
  403. package/seed-templates/dashboard.md +89 -0
  404. package/seed-templates/docs-site.md +73 -0
  405. package/seed-templates/e-commerce.md +50 -0
  406. package/seed-templates/saas-landing.md +92 -0
  407. package/seed-templates/settings-page.md +51 -0
  408. package/testing/01-standards/test-strategy-and-layering.md +83 -0
  409. package/testing/01-standards/testing-strategy-complete.md +422 -0
  410. package/testing/01-standards/unit-testing-best-practices.md +118 -0
  411. package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
  412. package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
  413. package/testing/03-checklists/test-strategy-checklist.md +208 -0
  414. package/testing/04-antipatterns/testing-antipatterns.md +718 -0
  415. package/testing/05-cases/case-testing-transformation.md +300 -0
  416. package/testing/06-glossary/testing-glossary.md +110 -0
  417. package/testing/risk-based-test-matrix.md +36 -0
  418. package/testing/testing-strategy-deep-dive.md +37 -0
@@ -0,0 +1,799 @@
1
+ ---
2
+ id: python-decorators-complete
3
+ title: Python 装饰器完全指南
4
+ domain: development
5
+ category: 01-standards
6
+ difficulty: intermediate
7
+ tags: [python, decorators, metaprogramming, advanced]
8
+ quality_score: 92
9
+ maintainer: python-team@umadev.com
10
+ last_updated: 2026-03-29
11
+ version: 2.0
12
+ related_knowledge:
13
+ - python-context-managers
14
+ - python-generators
15
+ - python-metaclasses
16
+ prerequisites:
17
+ - python-complete
18
+ - python-type-system
19
+ ---
20
+
21
+ # Python 装饰器完全指南
22
+
23
+ ## 概述
24
+
25
+ 装饰器是 Python 最强大的特性之一,它允许在不修改原函数代码的情况下,动态地扩展或修改函数的行为。装饰器本质上是接受一个函数作为参数并返回一个新函数的高阶函数,广泛应用于日志记录、性能监控、权限检查、缓存等场景。
26
+
27
+ 理解装饰器需要掌握闭包、高阶函数、`*args` 和 `**kwargs` 等概念。本指南将从基础到高级,全面讲解装饰器的原理、用法和最佳实践。
28
+
29
+ ## 核心概念
30
+
31
+ ### 1. 装饰器的基本原理
32
+
33
+ 装饰器利用了 Python 的两个核心特性:
34
+ 1. **函数是一等公民**: 函数可以作为参数传递、作为返回值、赋值给变量
35
+ 2. **闭包**: 内部函数可以访问外部函数的变量,即使外部函数已经返回
36
+
37
+ ```python
38
+ # 最简单的装饰器
39
+ def my_decorator(func):
40
+ def wrapper():
41
+ print("Before function call")
42
+ result = func()
43
+ print("After function call")
44
+ return result
45
+ return wrapper
46
+
47
+ # 使用装饰器
48
+ @my_decorator
49
+ def say_hello():
50
+ print("Hello!")
51
+
52
+ # 等价于
53
+ say_hello = my_decorator(say_hello)
54
+ ```
55
+
56
+ ### 2. 装饰器的执行流程
57
+
58
+ ```mermaid
59
+ sequenceDiagram
60
+ participant Code as 调用代码
61
+ participant Decorator as 装饰器
62
+ participant Wrapper as 包装函数
63
+ participant Original as 原函数
64
+
65
+ Code->>Decorator: @decorator 定义时
66
+ Decorator->>Original: 接收原函数
67
+ Decorator->>Wrapper: 创建包装函数
68
+ Decorator-->>Code: 返回包装函数
69
+
70
+ Code->>Wrapper: 调用函数
71
+ Wrapper->>Wrapper: 前置处理
72
+ Wrapper->>Original: 执行原函数
73
+ Original-->>Wrapper: 返回结果
74
+ Wrapper->>Wrapper: 后置处理
75
+ Wrapper-->>Code: 返回最终结果
76
+ ```
77
+
78
+ ### 3. 带参数的装饰器
79
+
80
+ ```python
81
+ from functools import wraps
82
+
83
+ def decorator_with_args(arg1, arg2):
84
+ """带参数的装饰器"""
85
+ def actual_decorator(func):
86
+ @wraps(func)
87
+ def wrapper(*args, **kwargs):
88
+ print(f"Decorator args: {arg1}, {arg2}")
89
+ return func(*args, **kwargs)
90
+ return wrapper
91
+ return actual_decorator
92
+
93
+ @decorator_with_args("hello", "world")
94
+ def my_function(x, y):
95
+ return x + y
96
+
97
+ # 执行
98
+ result = my_function(3, 5)
99
+ # 输出: Decorator args: hello, world
100
+ ```
101
+
102
+ ## 实现指南
103
+
104
+ ### 基础装饰器模式
105
+
106
+ #### 1. 简单装饰器
107
+
108
+ ```python
109
+ from functools import wraps
110
+ import time
111
+
112
+ def timer(func):
113
+ """测量函数执行时间的装饰器"""
114
+ @wraps(func)
115
+ def wrapper(*args, **kwargs):
116
+ start_time = time.perf_counter()
117
+ result = func(*args, **kwargs)
118
+ end_time = time.perf_counter()
119
+ print(f"{func.__name__} executed in {end_time - start_time:.4f} seconds")
120
+ return result
121
+ return wrapper
122
+
123
+ @timer
124
+ def slow_function():
125
+ time.sleep(1)
126
+ return "Done"
127
+
128
+ slow_function()
129
+ # 输出: slow_function executed in 1.0012 seconds
130
+ ```
131
+
132
+ **关键点**:
133
+ - 使用 `@wraps(func)` 保留原函数的元数据(`__name__`, `__doc__` 等)
134
+ - 使用 `*args, **kwargs` 支持任意参数
135
+ - 始终返回原函数的结果
136
+
137
+ #### 2. 带参数的装饰器
138
+
139
+ ```python
140
+ from functools import wraps
141
+
142
+ def repeat(times):
143
+ """重复执行函数指定次数"""
144
+ def decorator(func):
145
+ @wraps(func)
146
+ def wrapper(*args, **kwargs):
147
+ results = []
148
+ for i in range(times):
149
+ result = func(*args, **kwargs)
150
+ results.append(result)
151
+ return results
152
+ return wrapper
153
+ return decorator
154
+
155
+ @repeat(times=3)
156
+ def greet(name):
157
+ return f"Hello, {name}!"
158
+
159
+ print(greet("Alice"))
160
+ # 输出: ['Hello, Alice!', 'Hello, Alice!', 'Hello, Alice!']
161
+ ```
162
+
163
+ #### 3. 类装饰器
164
+
165
+ ```python
166
+ class CountCalls:
167
+ """统计函数调用次数的类装饰器"""
168
+
169
+ def __init__(self, func):
170
+ self.func = func
171
+ self.count = 0
172
+ self.__name__ = func.__name__
173
+
174
+ def __call__(self, *args, **kwargs):
175
+ self.count += 1
176
+ print(f"Call {self.count} of {self.func.__name__}")
177
+ return self.func(*args, **kwargs)
178
+
179
+ @CountCalls
180
+ def say_hello():
181
+ print("Hello!")
182
+
183
+ say_hello() # Call 1 of say_hello
184
+ say_hello() # Call 2 of say_hello
185
+ ```
186
+
187
+ ### 高级装饰器模式
188
+
189
+ #### 1. 装饰器栈(多个装饰器组合)
190
+
191
+ ```python
192
+ @decorator1
193
+ @decorator2
194
+ @decorator3
195
+ def my_function():
196
+ pass
197
+
198
+ # 等价于
199
+ my_function = decorator1(decorator2(decorator3(my_function)))
200
+ ```
201
+
202
+ **执行顺序**: 从下到上应用,从外到内执行
203
+
204
+ ```mermaid
205
+ graph TD
206
+ A[调用 my_function] --> B[decorator1 前置]
207
+ B --> C[decorator2 前置]
208
+ C --> D[decorator3 前置]
209
+ D --> E[执行原函数]
210
+ E --> F[decorator3 后置]
211
+ F --> G[decorator2 后置]
212
+ G --> H[decorator1 后置]
213
+ H --> I[返回结果]
214
+ ```
215
+
216
+ #### 2. 可选参数装饰器
217
+
218
+ ```python
219
+ from functools import wraps
220
+
221
+ def smart_decorator(_func=None, *, option1="default", option2=True):
222
+ """既可以带参数使用,也可以不带参数使用"""
223
+ def decorator(func):
224
+ @wraps(func)
225
+ def wrapper(*args, **kwargs):
226
+ print(f"Options: option1={option1}, option2={option2}")
227
+ return func(*args, **kwargs)
228
+ return wrapper
229
+
230
+ # 如果直接调用 @smart_decorator
231
+ if _func is None:
232
+ return decorator
233
+ # 如果带参数调用 @smart_decorator()
234
+ else:
235
+ return decorator(_func)
236
+
237
+ # 使用方式 1: 不带参数
238
+ @smart_decorator
239
+ def func1():
240
+ pass
241
+
242
+ # 使用方式 2: 带参数
243
+ @smart_decorator(option1="custom", option2=False)
244
+ def func2():
245
+ pass
246
+ ```
247
+
248
+ #### 3. 异步装饰器
249
+
250
+ ```python
251
+ from functools import wraps
252
+ import asyncio
253
+
254
+ def async_timer(func):
255
+ """异步函数计时装饰器"""
256
+ @wraps(func)
257
+ async def wrapper(*args, **kwargs):
258
+ start = asyncio.get_event_loop().time()
259
+ result = await func(*args, **kwargs)
260
+ end = asyncio.get_event_loop().time()
261
+ print(f"{func.__name__} took {end - start:.4f} seconds")
262
+ return result
263
+ return wrapper
264
+
265
+ @async_timer
266
+ async def async_task():
267
+ await asyncio.sleep(1)
268
+ return "Async done"
269
+
270
+ # 执行
271
+ asyncio.run(async_task())
272
+ ```
273
+
274
+ #### 4. 装饰器工厂
275
+
276
+ ```python
277
+ from functools import wraps
278
+
279
+ class DecoratorFactory:
280
+ """动态创建装饰器的工厂"""
281
+
282
+ @staticmethod
283
+ def create_logger(log_level="INFO"):
284
+ def decorator(func):
285
+ @wraps(func)
286
+ def wrapper(*args, **kwargs):
287
+ print(f"[{log_level}] Calling {func.__name__}")
288
+ result = func(*args, **kwargs)
289
+ print(f"[{log_level}] {func.__name__} returned")
290
+ return result
291
+ return wrapper
292
+ return decorator
293
+
294
+ # 使用
295
+ info_logger = DecoratorFactory.create_logger("INFO")
296
+ debug_logger = DecoratorFactory.create_logger("DEBUG")
297
+
298
+ @info_logger
299
+ def important_function():
300
+ return "Important result"
301
+ ```
302
+
303
+ ## 实战案例
304
+
305
+ ### 案例 1: 缓存装饰器 (Memoization)
306
+
307
+ ```python
308
+ from functools import wraps
309
+
310
+ def memoize(func):
311
+ """缓存函数结果"""
312
+ cache = {}
313
+
314
+ @wraps(func)
315
+ def wrapper(*args):
316
+ if args not in cache:
317
+ cache[args] = func(*args)
318
+ return cache[args]
319
+
320
+ wrapper.cache = cache # 暴露缓存供外部访问
321
+ return wrapper
322
+
323
+ @memoize
324
+ def fibonacci(n):
325
+ """斐波那契数列"""
326
+ if n < 2:
327
+ return n
328
+ return fibonacci(n - 1) + fibonacci(n - 2)
329
+
330
+ # 测试
331
+ print(fibonacci(100)) # 第一次计算
332
+ print(fibonacci(100)) # 从缓存读取
333
+ print(fibonacci.cache) # 查看缓存
334
+ ```
335
+
336
+ ### 案例 2: 重试装饰器
337
+
338
+ ```python
339
+ from functools import wraps
340
+ import time
341
+ from typing import Callable, Type
342
+
343
+ def retry(
344
+ max_attempts: int = 3,
345
+ delay: float = 1.0,
346
+ exceptions: tuple = (Exception,),
347
+ backoff: float = 2.0
348
+ ):
349
+ """自动重试装饰器"""
350
+ def decorator(func):
351
+ @wraps(func)
352
+ def wrapper(*args, **kwargs):
353
+ attempts = 0
354
+ current_delay = delay
355
+
356
+ while attempts < max_attempts:
357
+ try:
358
+ return func(*args, **kwargs)
359
+ except exceptions as e:
360
+ attempts += 1
361
+ if attempts == max_attempts:
362
+ raise
363
+
364
+ print(f"Attempt {attempts} failed: {e}")
365
+ print(f"Retrying in {current_delay} seconds...")
366
+ time.sleep(current_delay)
367
+ current_delay *= backoff
368
+
369
+ return wrapper
370
+ return decorator
371
+
372
+ # 使用
373
+ @retry(max_attempts=3, delay=1.0, exceptions=(ConnectionError,))
374
+ def fetch_data(url):
375
+ import random
376
+ if random.random() < 0.7:
377
+ raise ConnectionError("Network error")
378
+ return f"Data from {url}"
379
+
380
+ fetch_data("https://api.example.com")
381
+ ```
382
+
383
+ ### 案例 3: 权限检查装饰器
384
+
385
+ ```python
386
+ from functools import wraps
387
+ from typing import List
388
+
389
+ def require_permissions(*required_permissions: str):
390
+ """权限检查装饰器"""
391
+ def decorator(func):
392
+ @wraps(func)
393
+ def wrapper(user_permissions: List[str], *args, **kwargs):
394
+ # 检查用户是否拥有所有必需权限
395
+ missing = set(required_permissions) - set(user_permissions)
396
+ if missing:
397
+ raise PermissionError(
398
+ f"Missing required permissions: {missing}"
399
+ )
400
+ return func(*args, **kwargs)
401
+ return wrapper
402
+ return decorator
403
+
404
+ # 使用
405
+ @require_permissions("admin", "write")
406
+ def delete_user(user_id):
407
+ return f"User {user_id} deleted"
408
+
409
+ # 测试
410
+ try:
411
+ delete_user(["admin", "write"], user_id=123) # 成功
412
+ delete_user(["read"], user_id=456) # 抛出 PermissionError
413
+ except PermissionError as e:
414
+ print(e)
415
+ ```
416
+
417
+ ### 案例 4: 单例模式装饰器
418
+
419
+ ```python
420
+ from functools import wraps
421
+
422
+ def singleton(cls):
423
+ """单例装饰器"""
424
+ instances = {}
425
+
426
+ @wraps(cls)
427
+ def get_instance(*args, **kwargs):
428
+ if cls not in instances:
429
+ instances[cls] = cls(*args, **kwargs)
430
+ return instances[cls]
431
+
432
+ return get_instance
433
+
434
+ @singleton
435
+ class Database:
436
+ def __init__(self, connection_string):
437
+ self.connection_string = connection_string
438
+ print(f"Creating database connection: {connection_string}")
439
+
440
+ # 测试
441
+ db1 = Database("mysql://localhost/db")
442
+ db2 = Database("mysql://localhost/db")
443
+ print(db1 is db2) # True
444
+ ```
445
+
446
+ ### 案例 5: 类型检查装饰器
447
+
448
+ ```python
449
+ from functools import wraps
450
+ from typing import get_type_hints
451
+ import inspect
452
+
453
+ def validate_types(func):
454
+ """运行时类型检查装饰器"""
455
+ @wraps(func)
456
+ def wrapper(*args, **kwargs):
457
+ # 获取类型提示
458
+ hints = get_type_hints(func)
459
+ sig = inspect.signature(func)
460
+ bound_args = sig.bind(*args, **kwargs)
461
+ bound_args.apply_defaults()
462
+
463
+ # 检查参数类型
464
+ for param_name, value in bound_args.arguments.items():
465
+ if param_name in hints:
466
+ expected_type = hints[param_name]
467
+ if not isinstance(value, expected_type):
468
+ raise TypeError(
469
+ f"Parameter '{param_name}' expected {expected_type}, "
470
+ f"got {type(value)}"
471
+ )
472
+
473
+ # 执行函数
474
+ result = func(*args, **kwargs)
475
+
476
+ # 检查返回值类型
477
+ if 'return' in hints:
478
+ expected_return = hints['return']
479
+ if not isinstance(result, expected_return):
480
+ raise TypeError(
481
+ f"Return value expected {expected_return}, "
482
+ f"got {type(result)}"
483
+ )
484
+
485
+ return result
486
+
487
+ return wrapper
488
+
489
+ # 使用
490
+ @validate_types
491
+ def add_numbers(a: int, b: int) -> int:
492
+ return a + b
493
+
494
+ add_numbers(3, 5) # 正常
495
+ add_numbers(3, "5") # TypeError
496
+ ```
497
+
498
+ ## 最佳实践
499
+
500
+ ### 1. 始终使用 functools.wraps
501
+
502
+ ```python
503
+ # ❌ 错误: 丢失元数据
504
+ def bad_decorator(func):
505
+ def wrapper(*args, **kwargs):
506
+ return func(*args, **kwargs)
507
+ return wrapper
508
+
509
+ @bad_decorator
510
+ def example():
511
+ """This is an example function"""
512
+ pass
513
+
514
+ print(example.__name__) # wrapper (错误!)
515
+ print(example.__doc__) # None (错误!)
516
+
517
+ # ✅ 正确: 保留元数据
518
+ from functools import wraps
519
+
520
+ def good_decorator(func):
521
+ @wraps(func)
522
+ def wrapper(*args, **kwargs):
523
+ return func(*args, **kwargs)
524
+ return wrapper
525
+
526
+ @good_decorator
527
+ def example():
528
+ """This is an example function"""
529
+ pass
530
+
531
+ print(example.__name__) # example (正确!)
532
+ print(example.__doc__) # This is an example function (正确!)
533
+ ```
534
+
535
+ ### 2. 保持装饰器简洁
536
+
537
+ ```python
538
+ # ❌ 错误: 装饰器做太多事情
539
+ def bad_decorator(func):
540
+ @wraps(func)
541
+ def wrapper(*args, **kwargs):
542
+ # 日志记录
543
+ # 权限检查
544
+ # 缓存检查
545
+ # 性能监控
546
+ # 重试逻辑
547
+ # ... 太多职责
548
+ return func(*args, **kwargs)
549
+ return wrapper
550
+
551
+ # ✅ 正确: 单一职责,组合使用
552
+ @log_calls
553
+ @check_permissions
554
+ @cache_result
555
+ @monitor_performance
556
+ def good_function():
557
+ pass
558
+ ```
559
+
560
+ ### 3. 正确处理异常
561
+
562
+ ```python
563
+ from functools import wraps
564
+
565
+ def safe_decorator(func):
566
+ @wraps(func)
567
+ def wrapper(*args, **kwargs):
568
+ try:
569
+ return func(*args, **kwargs)
570
+ except Exception as e:
571
+ # 记录异常但不要吞掉它
572
+ print(f"Error in {func.__name__}: {e}")
573
+ raise # 重新抛出异常
574
+ return wrapper
575
+ ```
576
+
577
+ ### 4. 文档化装饰器
578
+
579
+ ```python
580
+ from functools import wraps
581
+
582
+ def documented_decorator(func):
583
+ """
584
+ 示例装饰器,展示如何文档化装饰器。
585
+
586
+ Args:
587
+ func: 被装饰的函数
588
+
589
+ Returns:
590
+ 包装后的函数
591
+
592
+ Example:
593
+ @documented_decorator
594
+ def my_function():
595
+ pass
596
+ """
597
+ @wraps(func)
598
+ def wrapper(*args, **kwargs):
599
+ """包装函数的文档字符串"""
600
+ return func(*args, **kwargs)
601
+
602
+ # 添加额外的文档
603
+ wrapper._decorator_name = "documented_decorator"
604
+ return wrapper
605
+ ```
606
+
607
+ ### 5. 线程安全
608
+
609
+ ```python
610
+ from functools import wraps
611
+ import threading
612
+
613
+ def thread_safe(func):
614
+ """线程安全装饰器"""
615
+ lock = threading.Lock()
616
+
617
+ @wraps(func)
618
+ def wrapper(*args, **kwargs):
619
+ with lock:
620
+ return func(*args, **kwargs)
621
+
622
+ return wrapper
623
+
624
+ @thread_safe
625
+ def increment_counter(counter):
626
+ counter['value'] += 1
627
+ return counter['value']
628
+ ```
629
+
630
+ ## 常见陷阱
631
+
632
+ ### 1. 忘记返回原函数结果
633
+
634
+ ```python
635
+ # ❌ 错误
636
+ def bad_decorator(func):
637
+ def wrapper(*args, **kwargs):
638
+ func(*args, **kwargs) # 没有返回结果!
639
+ return wrapper
640
+
641
+ # ✅ 正确
642
+ def good_decorator(func):
643
+ @wraps(func)
644
+ def wrapper(*args, **kwargs):
645
+ return func(*args, **kwargs) # 返回结果
646
+ return wrapper
647
+ ```
648
+
649
+ ### 2. 装饰器参数错误
650
+
651
+ ```python
652
+ # ❌ 错误: 忘记调用装饰器工厂
653
+ @retry # 缺少括号
654
+ def my_function():
655
+ pass
656
+
657
+ # ✅ 正确
658
+ @retry() # 带括号
659
+ def my_function():
660
+ pass
661
+
662
+ # 或者使用可选参数模式
663
+ def retry(_func=None, *, max_attempts=3):
664
+ def decorator(func):
665
+ @wraps(func)
666
+ def wrapper(*args, **kwargs):
667
+ for _ in range(max_attempts):
668
+ try:
669
+ return func(*args, **kwargs)
670
+ except Exception:
671
+ pass
672
+ return wrapper
673
+
674
+ if _func is None:
675
+ return decorator
676
+ else:
677
+ return decorator(_func)
678
+
679
+ # 现在两种方式都支持
680
+ @retry
681
+ def func1():
682
+ pass
683
+
684
+ @retry(max_attempts=5)
685
+ def func2():
686
+ pass
687
+ ```
688
+
689
+ ### 3. 闭包变量陷阱
690
+
691
+ ```python
692
+ # ❌ 错误: 闭包中的循环变量
693
+ def create_multipliers():
694
+ return [lambda x: x * i for i in range(5)]
695
+
696
+ multipliers = create_multipliers()
697
+ print(multipliers[0](10)) # 40 (期望 0)
698
+ print(multipliers[1](10)) # 40 (期望 10)
699
+
700
+ # ✅ 正确: 使用默认参数捕获变量
701
+ def create_multipliers():
702
+ return [lambda x, i=i: x * i for i in range(5)]
703
+
704
+ multipliers = create_multipliers()
705
+ print(multipliers[0](10)) # 0
706
+ print(multipliers[1](10)) # 10
707
+ ```
708
+
709
+ ### 4. 类方法装饰器顺序
710
+
711
+ ```python
712
+ class MyClass:
713
+ # ❌ 错误: @classmethod 必须在最外层
714
+ @decorator
715
+ @classmethod
716
+ def method(cls):
717
+ pass
718
+
719
+ # ✅ 正确: @classmethod 在内层
720
+ @classmethod
721
+ @decorator
722
+ def method(cls):
723
+ pass
724
+ ```
725
+
726
+ ## 性能考虑
727
+
728
+ ### 装饰器的性能影响
729
+
730
+ ```python
731
+ import timeit
732
+ from functools import wraps
733
+
734
+ # 原函数
735
+ def original_function(n):
736
+ return sum(range(n))
737
+
738
+ # 带装饰器的函数
739
+ def simple_decorator(func):
740
+ @wraps(func)
741
+ def wrapper(*args, **kwargs):
742
+ return func(*args, **kwargs)
743
+ return wrapper
744
+
745
+ @simple_decorator
746
+ def decorated_function(n):
747
+ return sum(range(n))
748
+
749
+ # 性能对比
750
+ original_time = timeit.timeit(
751
+ lambda: original_function(1000),
752
+ number=100000
753
+ )
754
+
755
+ decorated_time = timeit.timeit(
756
+ lambda: decorated_function(1000),
757
+ number=100000
758
+ )
759
+
760
+ print(f"Original: {original_time:.4f}s")
761
+ print(f"Decorated: {decorated_time:.4f}s")
762
+ print(f"Overhead: {(decorated_time - original_time) / original_time * 100:.2f}%")
763
+ ```
764
+
765
+ **优化建议**:
766
+ 1. 避免在装饰器中进行不必要的计算
767
+ 2. 使用 `functools.lru_cache` 缓存装饰器结果
768
+ 3. 对于性能关键代码,考虑内联优化而非装饰器
769
+
770
+ ## 参考资料
771
+
772
+ ### 官方文档
773
+ - [Python Decorators PEP 318](https://www.python.org/dev/peps/pep-0318/)
774
+ - [Python functools Module](https://docs.python.org/3/library/functools.html)
775
+ - [Python Descriptor Protocol](https://docs.python.org/3/howto/descriptor.html)
776
+
777
+ ### 经典文章
778
+ - [Understanding Python Decorators](https://realpython.com/primer-on-python-decorators/)
779
+ - [Python Decorators: A Complete Guide](https://www.datacamp.com/tutorial/decorators-python)
780
+ - [Advanced Python Decorators](https://www.toptal.com/python/python-decorators)
781
+
782
+ ### 书籍
783
+ - *Fluent Python* by Luciano Ramalho (Chapter 7: Decorators and Closures)
784
+ - *Python Cookbook* by David Beazley (Chapter 9: Metaprogramming)
785
+ - *Effective Python* by Brett Slatkin (Item 26: Use functools.wraps)
786
+
787
+ ### 视频教程
788
+ - [Raymond Hettinger - Python's Class Development Toolkit](https://www.youtube.com/watch?v=HTLu2DFOdTg)
789
+ - [James Powell - Decorators: A Powerful and Useful Tool in Python](https://www.youtube.com/watch?v=4QCYT49rHvY)
790
+
791
+ ---
792
+
793
+ **知识ID**: `python-decorators-complete`
794
+ **领域**: development
795
+ **类型**: standards
796
+ **难度**: intermediate
797
+ **质量分**: 92
798
+ **维护者**: python-team@umadev.com
799
+ **最后更新**: 2026-03-29