{"id":142,"date":"2026-05-10T00:10:59","date_gmt":"2026-05-09T16:10:59","guid":{"rendered":"https:\/\/www.xzqbear.com\/?p=142"},"modified":"2026-05-10T10:05:22","modified_gmt":"2026-05-10T02:05:22","slug":"python-%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f","status":"publish","type":"post","link":"https:\/\/www.xzqbear.com\/index.php\/2026\/05\/10\/python-%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f\/","title":{"rendered":"Python \u8bbe\u8ba1\u6a21\u5f0f \u2014\u2014 \u5de5\u5382\u6a21\u5f0f"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u5de5\u5382\u6a21\u5f0f\u7684\u6982\u5ff5<\/h2>\n\n\n\n<p>\u5728\u7f16\u7a0b\u4e2d\uff0c\u6211\u4eec\u7ecf\u5e38\u9700\u8981\u521b\u5efa\u5bf9\u8c61\u3002\u5982\u679c\u76f4\u63a5\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528 <code>new<\/code> \u5173\u952e\u5b57 (C++) \u6216\u7c7b\u7684\u6784\u9020\u51fd\u6570\uff0c\u4f1a\u5bfc\u81f4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4ee3\u7801\u8026\u5408\u5ea6\u9ad8<\/strong>\uff1a\u521b\u5efa\u5bf9\u8c61\u7684\u4ee3\u7801\u4e0e\u5177\u4f53\u7c7b\u7d27\u5bc6\u7ed1\u5b9a<\/li>\n\n\n\n<li><strong>\u7ef4\u62a4\u56f0\u96be<\/strong>\uff1a\u5f53\u9700\u8981\u4fee\u6539\u6216\u6dfb\u52a0\u65b0\u7684\u5bf9\u8c61\u7c7b\u578b\u65f6\uff0c\u9700\u8981\u4fee\u6539\u591a\u5904\u4ee3\u7801<\/li>\n\n\n\n<li><strong>\u8fdd\u53cd\u5f00\u95ed\u539f\u5219<\/strong>\uff1a\u5bf9\u6269\u5c55\u5f00\u653e\uff0c\u5bf9\u4fee\u6539\u5173\u95ed\u7684\u539f\u5219\u88ab\u7834\u574f<\/li>\n<\/ul>\n\n\n\n<p>\u5de5\u5382\u6a21\u5f0f\u901a\u8fc7\u5c06\u5bf9\u8c61\u7684\u521b\u5efa\u8fc7\u7a0b\u5c01\u88c5\u8d77\u6765\uff0c\u89e3\u51b3\u4e86\u8fd9\u4e9b\u95ee\u9898.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b80\u5355\u5de5\u5382\u6a21\u5f0f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5185\u5bb9\u548c\u5177\u4f53\u5b9e\u73b0<\/h3>\n\n\n\n<p>\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u6bd4\u8f83\u7b80\u5355\uff0c\u5176\u4e3b\u8981\u7684\u90e8\u5206\u662f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u62bd\u8c61\u57fa\u7c7b<\/li>\n\n\n\n<li>\u57fa\u4e8e\u57fa\u7c7b\u5b9e\u73b0\u7684\u5b50\u7c7b<\/li>\n\n\n\n<li>\u7b80\u5355\u5de5\u5382\u7c7b\uff0c\u76f4\u63a5\u8c03\u7528\u8fd9\u4e2a\u5de5\u5382\u7c7b\u7684\u65b9\u6cd5\u53ef\u4ee5\u521b\u5efa\u5b50\u7c7b.<\/li>\n<\/ul>\n\n\n\n<p>\u4e00\u4e2a\u7b80\u5355\u7684\u5b9e\u73b0\u5982\u4e0b\uff0c\u8003\u8651\u591a\u81c2\u8001\u864e\u673a\u7684\u57fa\u7c7b\uff0c\u53ef\u4ee5\u770b\u5230\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>from abc import ABC, abstractmethod\n# \u4ea7\u54c1\u63a5\u53e3\uff0c\u6216\u8005\u8bf4\u662f\u62bd\u8c61\u57fa\u7c7b\nclass Bandit(ABC):\n\u00a0 \u00a0 @abstractmethod\n\u00a0 \u00a0 def pull():\n\u00a0 \u00a0 \u00a0 \u00a0 # \u7ed3\u679c\u7531\u5b50\u7c7b\u5b9e\u73b0\n\u00a0 \u00a0 \u00a0 \u00a0 pass\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">from<\/span><span style=\"color: #E1E4E8\"> abc <\/span><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">, abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u4ea7\u54c1\u63a5\u53e3\uff0c\u6216\u8005\u8bf4\u662f\u62bd\u8c61\u57fa\u7c7b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\u00a0 \u00a0 <\/span><span style=\"color: #B392F0\">@abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\u00a0 \u00a0 <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">():<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #6A737D\"># \u7ed3\u679c\u7531\u5b50\u7c7b\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u8fd9\u91cc\u7684 <code>ABC<\/code> \u548c <code>abstractmethod<\/code> \u7684\u4e3b\u8981\u4f5c\u7528\u662f\uff1a<code>ABC<\/code> \u6307\u793a\u7684\u7c7b\u662f\u62bd\u8c61\u57fa\u7c7b\uff0c\u5176\u4e0d\u80fd\u88ab\u5b9e\u4f8b\u5316\uff0c\u5e76\u4e14\u5982\u679c\u5176\u5b50\u7c7b\u6709 <code>abstractmethod<\/code> \u672a\u5b9e\u73b0\uff0c\u5219\u5b50\u7c7b\u4e5f\u5c06\u65e0\u6cd5\u5b9e\u4f8b\u5316\uff1b <code>abstractmethod<\/code> \u8868\u793a\u65b9\u6cd5\u662f\u62bd\u8c61\u65b9\u6cd5\uff0c\u5b50\u7c7b\u5fc5\u987b\u5b9e\u73b0\uff0c\u5426\u5219\u62a5\u9519.<\/p>\n\n\n\n<p>\u4e00\u4e2a\u5b50\u7c7b\u5982\u679c\u5199\u4e3a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class BernoulliBandit(Bandit):\n\u00a0 \u00a0 pass\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BernoulliBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\u00a0 \u00a0 <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u7136\u540e\u76f4\u63a5\u8c03\u7528 <code>BernoulliBandit.pull()<\/code> \uff0c\u5219\u5c06\u4f1a\u6709\u5982\u4e0b\u62a5\u9519\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Traceback (most recent call last):\n  File \"e:\\Projects\\\u8bbe\u8ba1\u6a21\u5f0f\\\u5de5\u5382\u6a21\u5f0f\\\u7b80\u5355\u5de5\u5382\u6a21\u5f0f.py\", line 23, in &lt;module>\n    bandit = BernoulliBandit()\n             ^^^^^^^^^^^^^^^^^\nTypeError: Can't instantiate abstract class BernoulliBandit without an implementation for abstract method 'pull'\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #E1E4E8\">Traceback (most recent call last):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">  File <\/span><span style=\"color: #9ECBFF\">&quot;e:\\Projects\\\u8bbe\u8ba1\u6a21\u5f0f\\\u5de5\u5382\u6a21\u5f0f\\\u7b80\u5355\u5de5\u5382\u6a21\u5f0f.py&quot;<\/span><span style=\"color: #E1E4E8\">, line <\/span><span style=\"color: #79B8FF\">23<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\">module<\/span><span style=\"color: #F97583\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    bandit <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> BernoulliBandit()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">             <\/span><span style=\"color: #F97583\">^^^^^^^^^^^^^^^^^<\/span><\/span>\n<span class=\"line\"><span style=\"color: #79B8FF\">TypeError<\/span><span style=\"color: #E1E4E8\">: Can<\/span><span style=\"color: #9ECBFF\">&#39;t instantiate abstract class BernoulliBandit without an implementation for abstract method &#39;<\/span><span style=\"color: #E1E4E8\">pull<\/span><span style=\"color: #9ECBFF\">&#39;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u56e0\u6b64\u6211\u4eec\u8fd9\u91cc\u7ed9\u51fa\u4e00\u4e2a\u5b50\u7c7b\u7684\u5b9e\u73b0\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import random\n# \u5177\u4f53\u5b9e\u73b0\nclass BernoulliBandit(Bandit):\n    def pull(self):\n        return random.randint(0, 1)\n\nif __name__ == \"__main__\":\n    bandit = BernoulliBandit()\n    print(bandit.pull())\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> random<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u5177\u4f53\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BernoulliBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> random.randint(<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    bandit <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> BernoulliBandit()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(bandit.pull())<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u603b\u4f53\u800c\u8a00\uff0c\u8fd9\u4e2a <code>BernoulliBandit<\/code> \u5b9e\u73b0\u4e86 <code>pull<\/code> \u65b9\u6cd5\uff0c\u6240\u4ee5 <code>abstractmethod<\/code> \u6b64\u65f6\u4e0d\u4f1a\u62a5\u9519\uff0c\u540c\u7406\u8fd8\u80fd\u5b9e\u73b0\u4e00\u4e9b\u4e0d\u540c\u7684\u8001\u864e\u673a\uff0c\u6bd4\u5982\u6807\u51c6\u6b63\u6001\u8001\u864e\u673a.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import numpy as np\nclass StdNormalBandit(Bandit):\n\u00a0 \u00a0 def pull(self):\n\u00a0 \u00a0 \u00a0 \u00a0 return np.random.randn()\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> numpy <\/span><span style=\"color: #F97583\">as<\/span><span style=\"color: #E1E4E8\"> np<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">StdNormalBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\u00a0 \u00a0 <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> np.random.randn()<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u7136\u540e\u6700\u91cd\u8981\u7684\u5c31\u662f\u7b80\u5355\u5de5\u5382\u7c7b\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class BanditFactory:\n    @staticmethod\n    def create_bandit(bandit_type):\n        if bandit_type == \"bernoulli\":\n            return BernoulliBandit()\n        elif bandit_type == \"normal\":\n            return StdNormalBandit()\n        else:\n            raise ValueError(f\"\u672a\u77e5\u7684\u8001\u864e\u673a\u7c7b\u578b\uff1a{bandit_type}\")\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BanditFactory<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@<\/span><span style=\"color: #79B8FF\">staticmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(bandit_type):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> bandit_type <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;bernoulli&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> BernoulliBandit()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">elif<\/span><span style=\"color: #E1E4E8\"> bandit_type <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;normal&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> StdNormalBandit()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">raise<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">ValueError<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;\u672a\u77e5\u7684\u8001\u864e\u673a\u7c7b\u578b\uff1a<\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">bandit_type<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u8fd9\u4e2a\u7684\u4f5c\u7528\u5c31\u662f\u7b80\u5355\u5de5\u5382\uff0c\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u5316\u5b50\u7c7b\u7684\u65b9\u6cd5\uff0c\u5e76\u4e14\u8fd9\u4e2a\u65b9\u6cd5\u662f\u9759\u6001\u65b9\u6cd5\uff08\u4e5f\u5c31\u662f\u65e0\u9700\u5b9e\u4f8b\u5316\uff0c\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\uff0c\u65e0\u6cd5\u8bbf\u95ee <code>self<\/code> \u7684\u65b9\u6cd5\uff09.<\/p>\n\n\n\n<p>\u4e0b\u9762\u7ed9\u51fa\u5b8c\u6574\u7684\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># \u4f7f\u7528\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u6765\u5b9e\u73b0\u591a\u81c2\u8001\u864e\u673a\nimport numpy as np\nfrom abc import ABC, abstractmethod\n\n\n# \u4ea7\u54c1\u63a5\u53e3\uff0c\u6216\u8005\u8bf4\u662f\u62bd\u8c61\u57fa\u7c7b\nclass Bandit(ABC):\n    @abstractmethod\n    def pull(self):\n        # \u7ed3\u679c\u7531\u5b50\u7c7b\u5b9e\u73b0\n        pass\n\n\n# \u5177\u4f53\u5b9e\u73b0\nclass BernoulliBandit(Bandit):\n    def pull(self):\n        return np.random.randint(0, 2)\n\n\nclass StdNormalBandit(Bandit):\n    def pull(self):\n        return np.random.randn()\n\n\nclass BanditFactory:\n    @staticmethod\n    def create_bandit(bandit_type):\n        if bandit_type == \"bernoulli\":\n            return BernoulliBandit()\n        elif bandit_type == \"normal\":\n            return StdNormalBandit()\n        else:\n            raise ValueError(f\"\u672a\u77e5\u7684\u8001\u864e\u673a\u7c7b\u578b\uff1a{bandit_type}\")\n\n\nif __name__ == \"__main__\":\n    bandit = BanditFactory.create_bandit(bandit_type=\"bernoulli\")\n    print(bandit.pull())\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A737D\"># \u4f7f\u7528\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u6765\u5b9e\u73b0\u591a\u81c2\u8001\u864e\u673a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> numpy <\/span><span style=\"color: #F97583\">as<\/span><span style=\"color: #E1E4E8\"> np<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">from<\/span><span style=\"color: #E1E4E8\"> abc <\/span><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">, abstractmethod<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u4ea7\u54c1\u63a5\u53e3\uff0c\u6216\u8005\u8bf4\u662f\u62bd\u8c61\u57fa\u7c7b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># \u7ed3\u679c\u7531\u5b50\u7c7b\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u5177\u4f53\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BernoulliBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> np.random.randint(<\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">StdNormalBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> np.random.randn()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BanditFactory<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@<\/span><span style=\"color: #79B8FF\">staticmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(bandit_type):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> bandit_type <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;bernoulli&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> BernoulliBandit()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">elif<\/span><span style=\"color: #E1E4E8\"> bandit_type <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;normal&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> StdNormalBandit()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">else<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            <\/span><span style=\"color: #F97583\">raise<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">ValueError<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #F97583\">f<\/span><span style=\"color: #9ECBFF\">&quot;\u672a\u77e5\u7684\u8001\u864e\u673a\u7c7b\u578b\uff1a<\/span><span style=\"color: #79B8FF\">{<\/span><span style=\"color: #E1E4E8\">bandit_type<\/span><span style=\"color: #79B8FF\">}<\/span><span style=\"color: #9ECBFF\">&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    bandit <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> BanditFactory.create_bandit(<\/span><span style=\"color: #FFAB70\">bandit_type<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #9ECBFF\">&quot;bernoulli&quot;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(bandit.pull())<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u4f18\u70b9\u4e0e\u7f3a\u70b9<\/h3>\n\n\n\n<p><strong>\u4f18\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5ba2\u6237\u7aef\u4e0e\u5177\u4f53\u4ea7\u54c1\u7c7b\u89e3\u8026<\/li>\n\n\n\n<li>\u804c\u8d23\u5206\u79bb\uff0c\u6613\u4e8e\u7ef4\u62a4<\/li>\n<\/ul>\n\n\n\n<p><strong>\u7f3a\u70b9\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6dfb\u52a0\u65b0\u4ea7\u54c1\u9700\u8981\u4fee\u6539\u5de5\u5382\u7c7b\uff0c\u8fdd\u53cd\u5f00\u95ed\u539f\u5219<\/li>\n\n\n\n<li>\u5de5\u5382\u7c7b\u804c\u8d23\u8fc7\u91cd\uff0c\u4e0d\u7b26\u5408\u5355\u4e00\u804c\u8d23\u539f\u5219<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u5185\u5bb9\u548c\u5177\u4f53\u5b9e\u73b0<\/h3>\n\n\n\n<p>\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f\u901a\u8fc7\u8ba9\u5b50\u7c7b\u51b3\u5b9a\u521b\u5efa\u4ec0\u4e48\u5bf9\u8c61\u6765\u89e3\u51b3\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u4e4b\u524d\u7684\u7b80\u5355\u5de5\u5382\u7c7b\u804c\u8d23\u8fc7\u91cd\uff0c\u6240\u4ee5\u6211\u4eec\u73b0\u5728\u5e94\u8be5\u8003\u8651\u7684\u95ee\u9898\u662f\u89e3\u8026.<\/p>\n\n\n\n<p>\u8fd8\u662f\u591a\u81c2\u8001\u864e\u673a\u7684\u4f8b\u5b50\uff0c\u6b64\u65f6\u6211\u4eec\u4e4b\u524d\u7684\u8001\u864e\u673a\u5de5\u5382\u7c7b\u6709\u95ee\u9898\u5c31\u662f\u4e3a\u4e86\u6dfb\u52a0\u65b0\u7684\u5206\u5e03\uff08\u8001\u864e\u673a\uff09\u9700\u8981\u4fee\u6539\u5de5\u5382\u7c7b\uff0c\u8fc7\u4e8e\u9ebb\u70e6\uff0c\u90a3\u4e48\uff0c\u6211\u4eec\u4f55\u4e0d\u76f4\u63a5\u5c06\u5176\u8bbe\u7f6e\u62bd\u8c61\u51fa\u6765\uff0c\u6bcf\u4e2a\u90fd\u5bf9\u5e94\u5199\u4e00\u4e2a <code>BanditConfig<\/code> \u5462\uff1f<\/p>\n\n\n\n<p>\u540c\u65f6\uff0c\u4e3a\u4e86\u8bf4\u660e\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f\u7684\u597d\u5904\uff0c\u6211\u4eec\u4e0d\u59a8\u601d\u8003\uff0c\u4e4b\u524d\u5b9e\u73b0\u7684\u8001\u864e\u673a\u663e\u7136\u662f\u4e0d\u591f\u683c\u7684\uff0c\u5bf9\u4e8e Bernoulli \u8001\u864e\u673a\uff0c\u6211\u4eec\u5e94\u8be5\u7ed9\u51fa Bernoulli \u5206\u5e03\u7684\u53c2\u6570 p \uff1b\u6b63\u6001\u5206\u5e03\u8001\u864e\u673a\u5219\u9700\u8981\u7ed9\u51fa\u5747\u503c\u4ee5\u53ca\u65b9\u5dee\uff0c\u4f46\u662f\u7b80\u5355\u5de5\u5382\u7c7b\u662f\u5f88\u96be\u5305\u7eb3\u6240\u6709\u8fd9\u4e9b\u5206\u5e03\u7684\u7a00\u5947\u53e4\u602a\u7684\u53c2\u6570\u7684. \u5f53\u7136\uff0c\u4e00\u4e2a\u5b9e\u73b0\u5c31\u662f\u4f7f\u7528\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>def create_bandit(bandit_type, **kwargs):\n\tif bandit_type == \"bernoulli\":\n\t\tp = kwargs.get('p', 0.5)   # \u9ed8\u8ba40.5\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(bandit_type, <\/span><span style=\"color: #F97583\">**<\/span><span style=\"color: #E1E4E8\">kwargs):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t<\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> bandit_type <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;bernoulli&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">\t\tp <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> kwargs.get(<\/span><span style=\"color: #9ECBFF\">&#39;p&#39;<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">0.5<\/span><span style=\"color: #E1E4E8\">)   <\/span><span style=\"color: #6A737D\"># \u9ed8\u8ba40.5<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u53ea\u662f\uff0c\u8fd9\u79cd\u5b9e\u73b0\u4e0d\u80fd\u7ed9\u4f7f\u7528\u8005\u6216\u8005\u7f16\u5199\u8005\u5e26\u6765\u4efb\u4f55\u4fe1\u606f. \u4e3a\u4e86\u6539\u8fdb\uff0c\u6211\u4eec\u6bcf\u4e2a\u8001\u864e\u673a\u8bbe\u7f6e\u90fd\u53ef\u4ee5\u5355\u72ec\u7ee7\u627f\u81ea\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6\u57fa\u7c7b. \u8fd9\u91cc\u6211\u7ed9\u51fa\u5b8c\u6574\u7684\u4ee3\u7801\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># \u4f7f\u7528\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u6765\u5b9e\u73b0\u591a\u81c2\u8001\u864e\u673a\nfrom numpy.ma import mean\nimport numpy as np\nfrom abc import ABC, abstractmethod\n\n\n# \u4ea7\u54c1\u63a5\u53e3\uff0c\u6216\u8005\u8bf4\u662f\u62bd\u8c61\u57fa\u7c7b\nclass Bandit(ABC):\n    \"\"\"\u8001\u864e\u673a\u62bd\u8c61\u57fa\u7c7b\"\"\"\n\n    @abstractmethod\n    def pull(self):\n        # \u7ed3\u679c\u7531\u5b50\u7c7b\u5b9e\u73b0\n        pass\n\n\n# \u8001\u864e\u673a\u5177\u4f53\u5b9e\u73b0\nclass BernoulliBandit(Bandit):\n    \"\"\"Bernoulli \u8001\u864e\u673a\"\"\"\n\n    def __init__(self, p: float = 0.5):\n        self.p: float = p\n\n    def pull(self):\n        return np.random.binomial(n=1, p=self.p)\n\n\nclass NormalBandit(Bandit):\n    \"\"\"\u6b63\u6001\u8001\u864e\u673a\"\"\"\n\n    def __init__(self, mean: float = 0.0, variance: float = 1.0):\n        self.mean: int | float = mean\n        self.variance: int | float = variance\n\n    def pull(self):\n        return self.mean + np.random.randn() * np.sqrt(self.variance)\n\n\n# \u914d\u7f6e\u6587\u4ef6\u62bd\u8c61\u7c7b\nclass BanditConfig(ABC):\n    \"\"\"\u8001\u864e\u673a\u914d\u7f6e\u7c7b\u57fa\u7c7b\"\"\"\n\n    @abstractmethod\n    def create_bandit(self):\n        pass\n\n\n# \u914d\u7f6e\u5177\u4f53\u5b9e\u73b0\nclass BernoulliConfig(BanditConfig):\n    \"\"\"Bernoulli \u8001\u864e\u673a\u914d\u7f6e\"\"\"\n\n    def __init__(self, p: float):\n        self.p: float = p\n\n    def create_bandit(self) -> Bandit:\n        return BernoulliBandit(p=self.p)\n\n\nclass NormalConfig(BanditConfig):\n    \"\"\"\u6b63\u6001\u8001\u864e\u673a\u914d\u7f6e\"\"\"\n\n    def __init__(self, mean: float = 0.0, variance: float = 1.0):\n        self.mean: int | float = mean\n        self.variance: int | float = variance\n\n    def create_bandit(self) -> Bandit:\n        return NormalBandit(mean=self.mean, variance=self.variance)\n\n\nif __name__ == \"__main__\":\n    config = NormalConfig()\n    bandit = config.create_bandit()\n    print(bandit.pull())\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A737D\"># \u4f7f\u7528\u7b80\u5355\u5de5\u5382\u6a21\u5f0f\u6765\u5b9e\u73b0\u591a\u81c2\u8001\u864e\u673a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">from<\/span><span style=\"color: #E1E4E8\"> numpy.ma <\/span><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> mean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> numpy <\/span><span style=\"color: #F97583\">as<\/span><span style=\"color: #E1E4E8\"> np<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">from<\/span><span style=\"color: #E1E4E8\"> abc <\/span><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">, abstractmethod<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u4ea7\u54c1\u63a5\u53e3\uff0c\u6216\u8005\u8bf4\u662f\u62bd\u8c61\u57fa\u7c7b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u8001\u864e\u673a\u62bd\u8c61\u57fa\u7c7b&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># \u7ed3\u679c\u7531\u5b50\u7c7b\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u8001\u864e\u673a\u5177\u4f53\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BernoulliBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;Bernoulli \u8001\u864e\u673a&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.5<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> p<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> np.random.binomial(<\/span><span style=\"color: #FFAB70\">n<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #FFAB70\">p<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">NormalBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u6b63\u6001\u8001\u864e\u673a&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, mean: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.0<\/span><span style=\"color: #E1E4E8\">, variance: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1.0<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> mean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> variance<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> np.random.randn() <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> np.sqrt(<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u914d\u7f6e\u6587\u4ef6\u62bd\u8c61\u7c7b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BanditConfig<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u8001\u864e\u673a\u914d\u7f6e\u7c7b\u57fa\u7c7b&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u914d\u7f6e\u5177\u4f53\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BernoulliConfig<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">BanditConfig<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;Bernoulli \u8001\u864e\u673a\u914d\u7f6e&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> p<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(self) -&gt; Bandit:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> BernoulliBandit(<\/span><span style=\"color: #FFAB70\">p<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">NormalConfig<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">BanditConfig<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u6b63\u6001\u8001\u864e\u673a\u914d\u7f6e&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, mean: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.0<\/span><span style=\"color: #E1E4E8\">, variance: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1.0<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> mean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> variance<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(self) -&gt; Bandit:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> NormalBandit(<\/span><span style=\"color: #FFAB70\">mean<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean, <\/span><span style=\"color: #FFAB70\">variance<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    config <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> NormalConfig()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    bandit <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> config.create_bandit()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(bandit.pull())<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f\u63d0\u4f9b\u4e00\u4e2a\u521b\u5efa\u4e00\u7cfb\u5217\u76f8\u5173\u6216\u4f9d\u8d56\u5bf9\u8c61\u7684\u63a5\u53e3\uff0c\u800c\u65e0\u9700\u6307\u5b9a\u5b83\u4eec\u5177\u4f53\u7684\u7c7b.<\/p>\n<\/blockquote>\n\n\n\n<p>\u4e0a\u9762\u7684\u5b9a\u4e49\u770b\u7740\u5f88\u62bd\u8c61\uff0c\u5b9e\u9645\u4e0a\u5f88\u7b80\u5355\uff0c\u5c31\u662f\u8003\u8651\u4e4b\u524d\u7684 <code>Config<\/code> \u5982\u679c\u80fd\u521b\u5efa\u591a\u4e2a\u7c7b\uff0c\u90a3\u4e48\u5b83\u5b9e\u9645\u4e0a\u5c31\u53d8\u6210\u4e86\u4e00\u4e2a\u65b0\u7684\u5de5\u5382\uff0c<code>Config<\/code> \u57fa\u7c7b\u4e5f\u5c31\u53d8\u6210\u4e86\u62bd\u8c61\u5de5\u5382.<\/p>\n\n\n\n<p>\u5177\u4f53\u6848\u4f8b\u6765\u770b\uff0c\u5047\u5982\u4f60\u5728\u5199\u4e00\u4e2a\u591a\u81c2\u8001\u864e\u673a\u7684\u5e93\uff0c\u6b64\u65f6\u6709\u4eba\u63d0\u8bae\u52a0\u65b0\u7684\u529f\u80fd\uff0c\u8bf4\u5e94\u8be5\u53cd\u590d\u91c7\u6837\u5e76\u5206\u6790\u591a\u81c2\u8001\u864e\u673a\u62c9\u6746\u7684\u7ed3\u679c\uff0c\u56e0\u6b64\u5e94\u8be5\u52a0\u4e2a <code>Analyzer<\/code> \uff0c\u540c\u65f6\u8d1f\u8d23\u5206\u6790\u7ed3\u679c. Bernoulli \u8001\u864e\u673a\u53ea\u9700\u8981\u770b\u5747\u503c\uff0c\u4f46\u6b63\u6001\u8001\u864e\u673a\u5fc5\u987b\u8003\u8651\u6837\u672c\u5747\u503c\u548c\u65b9\u5dee.<\/p>\n\n\n\n<p>\u4e0b\u9762\u76f4\u63a5\u7ed9\u51fa\u5b8c\u6574\u7684\u4ee3\u7801\uff1a<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">Python<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"\u590d\u5236\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># \u4f7f\u7528\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f\u6765\u5b9e\u73b0\u591a\u81c2\u8001\u864e\u673a\nimport numpy as np\nfrom abc import ABC, abstractmethod\n\n\n# \u4ea7\u54c1\u63a5\u53e3\uff0c\u6216\u8005\u8bf4\u662f\u62bd\u8c61\u57fa\u7c7b\nclass Bandit(ABC):\n    \"\"\"\u8001\u864e\u673a\u62bd\u8c61\u57fa\u7c7b\"\"\"\n\n    @abstractmethod\n    def pull(self):\n        # \u7ed3\u679c\u7531\u5b50\u7c7b\u5b9e\u73b0\n        pass\n\n\n# \u8001\u864e\u673a\u5177\u4f53\u5b9e\u73b0\nclass BernoulliBandit(Bandit):\n    \"\"\"Bernoulli \u8001\u864e\u673a\"\"\"\n\n    def __init__(self, p: float = 0.5):\n        self.p: float = p\n\n    def pull(self):\n        return np.random.binomial(n=1, p=self.p)\n\n\nclass NormalBandit(Bandit):\n    \"\"\"\u6b63\u6001\u8001\u864e\u673a\"\"\"\n\n    def __init__(self, mean: float = 0.0, variance: float = 1.0):\n        self.mean: int | float = mean\n        self.variance: int | float = variance\n\n    def pull(self):\n        return self.mean + np.random.randn() * np.sqrt(self.variance)\n\n\n# \u5206\u6790\u5668\u57fa\u7c7b\nclass Analyzer(ABC):\n    \"\"\"\u8001\u864e\u673a\u5206\u6790\u5668\u57fa\u7c7b\"\"\"\n\n    @abstractmethod\n    def analyze(self, n: int):\n        pass\n\n\n# \u5206\u6790\u5668\u5177\u4f53\u5b9e\u73b0\nclass BernoulliAnalyzer(Analyzer):\n    def __init__(self, p: float):\n        self.bandit = BernoulliBandit(p)\n\n    def analyze(self, n: int) -> None:\n        res = []\n        for i in range(n):\n            res.append(self.bandit.pull())\n\n        print(np.mean(res))\n\n\nclass NormalAnalyzer(Analyzer):\n    def __init__(self, mean: float, variance: float):\n        self.bandit = NormalBandit(mean, variance)\n\n    def analyze(self, n: int) -> None:\n        res = []\n        for i in range(n):\n            res.append(self.bandit.pull())\n\n        print(np.mean(res), np.var(res))\n\n\n# \u914d\u7f6e\u6587\u4ef6\u62bd\u8c61\u7c7b\nclass BanditFactory(ABC):\n    \"\"\"\u8001\u864e\u673a\u914d\u7f6e\u7c7b\u57fa\u7c7b\"\"\"\n\n    @abstractmethod\n    def create_bandit(self) -> Bandit:\n        pass\n\n    @abstractmethod\n    def create_analyzer(self) -> Analyzer:\n        pass\n\n\n# \u914d\u7f6e\u5177\u4f53\u5b9e\u73b0\nclass BernoulliFactory(BanditFactory):\n    \"\"\"Bernoulli \u8001\u864e\u673a\u914d\u7f6e\"\"\"\n\n    def __init__(self, p: float):\n        self.p: float = p\n\n    def create_bandit(self) -> Bandit:\n        return BernoulliBandit(p=self.p)\n\n    def create_analyzer(self) -> Analyzer:\n        return BernoulliAnalyzer(p=self.p)\n\n\nclass NormalFactory(BanditFactory):\n    \"\"\"\u6b63\u6001\u8001\u864e\u673a\u914d\u7f6e\"\"\"\n\n    def __init__(self, mean: float = 0.0, variance: float = 1.0):\n        self.mean: int | float = mean\n        self.variance: int | float = variance\n\n    def create_bandit(self) -> Bandit:\n        return NormalBandit(mean=self.mean, variance=self.variance)\n\n    def create_analyzer(self) -> Analyzer:\n        return NormalAnalyzer(mean=self.mean, variance=self.variance)\n\n\nif __name__ == \"__main__\":\n    config = NormalFactory()\n    bandit = config.create_bandit()\n    print(bandit.pull())\n\n    analyzer = config.create_analyzer()\n    analyzer.analyze(n=20000)\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A737D\"># \u4f7f\u7528\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f\u6765\u5b9e\u73b0\u591a\u81c2\u8001\u864e\u673a<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> numpy <\/span><span style=\"color: #F97583\">as<\/span><span style=\"color: #E1E4E8\"> np<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">from<\/span><span style=\"color: #E1E4E8\"> abc <\/span><span style=\"color: #F97583\">import<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">, abstractmethod<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u4ea7\u54c1\u63a5\u53e3\uff0c\u6216\u8005\u8bf4\u662f\u62bd\u8c61\u57fa\u7c7b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u8001\u864e\u673a\u62bd\u8c61\u57fa\u7c7b&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #6A737D\"># \u7ed3\u679c\u7531\u5b50\u7c7b\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u8001\u864e\u673a\u5177\u4f53\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BernoulliBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;Bernoulli \u8001\u864e\u673a&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.5<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> p<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> np.random.binomial(<\/span><span style=\"color: #FFAB70\">n<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #FFAB70\">p<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">NormalBandit<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Bandit<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u6b63\u6001\u8001\u864e\u673a&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, mean: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.0<\/span><span style=\"color: #E1E4E8\">, variance: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1.0<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> mean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> variance<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">pull<\/span><span style=\"color: #E1E4E8\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> np.random.randn() <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #E1E4E8\"> np.sqrt(<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u5206\u6790\u5668\u57fa\u7c7b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">Analyzer<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u8001\u864e\u673a\u5206\u6790\u5668\u57fa\u7c7b&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">analyze<\/span><span style=\"color: #E1E4E8\">(self, n: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u5206\u6790\u5668\u5177\u4f53\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BernoulliAnalyzer<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Analyzer<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.bandit <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> BernoulliBandit(p)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">analyze<\/span><span style=\"color: #E1E4E8\">(self, n: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">) -&gt; <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        res <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            res.append(<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.bandit.pull())<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(np.mean(res))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">NormalAnalyzer<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">Analyzer<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, mean: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\">, variance: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.bandit <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> NormalBandit(mean, variance)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">analyze<\/span><span style=\"color: #E1E4E8\">(self, n: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\">) -&gt; <\/span><span style=\"color: #79B8FF\">None<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        res <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">for<\/span><span style=\"color: #E1E4E8\"> i <\/span><span style=\"color: #F97583\">in<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">range<\/span><span style=\"color: #E1E4E8\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">            res.append(<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.bandit.pull())<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(np.mean(res), np.var(res))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u914d\u7f6e\u6587\u4ef6\u62bd\u8c61\u7c7b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BanditFactory<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">ABC<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u8001\u864e\u673a\u914d\u7f6e\u7c7b\u57fa\u7c7b&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(self) -&gt; Bandit:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #B392F0\">@abstractmethod<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_analyzer<\/span><span style=\"color: #E1E4E8\">(self) -&gt; Analyzer:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">pass<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\"># \u914d\u7f6e\u5177\u4f53\u5b9e\u73b0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">BernoulliFactory<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">BanditFactory<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;Bernoulli \u8001\u864e\u673a\u914d\u7f6e&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> p<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(self) -&gt; Bandit:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> BernoulliBandit(<\/span><span style=\"color: #FFAB70\">p<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_analyzer<\/span><span style=\"color: #E1E4E8\">(self) -&gt; Analyzer:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> BernoulliAnalyzer(<\/span><span style=\"color: #FFAB70\">p<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.p)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">NormalFactory<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">BanditFactory<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #9ECBFF\">&quot;&quot;&quot;\u6b63\u6001\u8001\u864e\u673a\u914d\u7f6e&quot;&quot;&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__init__<\/span><span style=\"color: #E1E4E8\">(self, mean: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0.0<\/span><span style=\"color: #E1E4E8\">, variance: <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1.0<\/span><span style=\"color: #E1E4E8\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> mean<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance: <\/span><span style=\"color: #79B8FF\">int<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">|<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">float<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> variance<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_bandit<\/span><span style=\"color: #E1E4E8\">(self) -&gt; Bandit:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> NormalBandit(<\/span><span style=\"color: #FFAB70\">mean<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean, <\/span><span style=\"color: #FFAB70\">variance<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">def<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">create_analyzer<\/span><span style=\"color: #E1E4E8\">(self) -&gt; Analyzer:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> NormalAnalyzer(<\/span><span style=\"color: #FFAB70\">mean<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.mean, <\/span><span style=\"color: #FFAB70\">variance<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">self<\/span><span style=\"color: #E1E4E8\">.variance)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">__name__<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&quot;__main__&quot;<\/span><span style=\"color: #E1E4E8\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    config <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> NormalFactory()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    bandit <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> config.create_bandit()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">print<\/span><span style=\"color: #E1E4E8\">(bandit.pull())<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    analyzer <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> config.create_analyzer()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    analyzer.analyze(<\/span><span style=\"color: #FFAB70\">n<\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #79B8FF\">20000<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u53ef\u4ee5\u770b\u5230\uff0c\u6240\u8c13\u7684 <code>Factory<\/code> \u5176\u5b9e\u4e5f\u5c31\u662f\u6bd4 <code>Config<\/code> \u591a\u4e86\u4e00\u4e9b\u4e1c\u897f\u800c\u5df2. \u56e0\u6b64\u62bd\u8c61\u5de5\u5382\u6a21\u5f0f\u53ef\u4ee5\u770b\u4f5c\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f\u7684\u4e00\u4e2a\u5ef6\u4f38.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5de5\u5382\u6a21\u5f0f\u7684\u6982\u5ff5 \u5728\u7f16\u7a0b\u4e2d\uff0c\u6211\u4eec\u7ecf\u5e38\u9700\u8981\u521b\u5efa\u5bf9\u8c61\u3002\u5982\u679c\u76f4\u63a5\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528 new \u5173\u952e\u5b57 (C++) \u6216\u7c7b\u7684\u6784\u9020\u51fd [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":124,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[18],"class_list":{"0":"post-142","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-8","8":"tag-18"},"_links":{"self":[{"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/posts\/142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/comments?post=142"}],"version-history":[{"count":2,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/posts\/142\/revisions"}],"predecessor-version":[{"id":144,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/posts\/142\/revisions\/144"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/media\/124"}],"wp:attachment":[{"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/media?parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/categories?post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xzqbear.com\/index.php\/wp-json\/wp\/v2\/tags?post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}