小知识点笔记二(原始版)

论坛 期权论坛     
选择匿名的用户   2021-5-23 01:16   5   0
<div id="post_detail">
<div class="post">
  <div class="postTitle">
   <a href="https://www.cnblogs.com/staff/p/9271858.html" id="cb_post_title_url">小知识点笔记二(原始版)</a>
  </div>
  <div class="postText">
   <div class="blogpost-body" id="cnblogs_post_body">
    <p><span style="color:#ff0000;">1、高阶函数(函数即变量)</span></p>
    <div class="cnblogs_code">
     <pre class="blockcode"><span style="color:#800000;">&#39;&#39;&#39;</span><span style="color:#800000;">
一个函数add()接收另一个函数abs作为参数,add称为高阶函数
</span><span style="color:#800000;">&#39;&#39;&#39;</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> add(a, b, f):
    </span><span style="color:#0000ff;">return</span> f(a) &#43;<span style="color:#000000;"> f(b)
res </span>&#61; add(-1,-3<span style="color:#000000;">,abs)
</span><span style="color:#0000ff;">print</span>(res)</pre>
    </div>
    <p><span style="color:#ff0000;">2、嵌套函数--&gt;闭包</span></p>
    <div class="cnblogs_code">
     <img alt="" class="code_img_closed" id="code_img_closed_f1927cd2-5072-481a-8703-741a213ce699" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-8f900a89c6347c561fdf2122f13be562.gif">
     <img alt="" class="code_img_opened" id="code_img_opened_f1927cd2-5072-481a-8703-741a213ce699" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-961ddebeb323a10fe0623af514929fc1.gif">
     <div class="cnblogs_code_hide" id="cnblogs_code_open_f1927cd2-5072-481a-8703-741a213ce699">
      <pre class="blockcode"><span style="color:#0000ff;">def</span><span style="color:#000000;"> outer():
    x </span>&#61; 1
    <span style="color:#0000ff;">def</span><span style="color:#000000;"> inner():
        </span><span style="color:#0000ff;">print</span><span style="color:#000000;">(x)
    inner()

outer() </span><span style="color:#008000;">#</span><span style="color:#008000;"> 1</span>
<span style="color:#800000;">&#39;&#39;&#39;</span><span style="color:#800000;">
inner做为嵌套函数,它可以访问外部函数的变量,调用 outer 函数时,发生了3件事:
1、给 变量 x 赋值为1
2、定义嵌套函数 inner,此时并不会执行 inner 中的代码,因为该函数还没被调用,直到第3步
3、调用 inner 函数,执行 inner 中的代码逻辑。
</span><span style="color:#800000;">&#39;&#39;&#39;</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> outer(x):
    </span><span style="color:#0000ff;">def</span><span style="color:#000000;"> inner():
        </span><span style="color:#0000ff;">print</span><span style="color:#000000;">(x)

    </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> inner
closure </span>&#61; outer(2<span style="color:#000000;">)
closure() </span><span style="color:#008000;">#</span><span style="color:#008000;"> 2</span>

<span style="color:#800000;">&#39;&#39;&#39;</span><span style="color:#800000;">
同样是嵌套函数,只是稍改动一下,把局部变量 x 作为参数了传递进来,
嵌套函数不再直接在函数里被调用,而是作为返回值返回,
这里的 closure就是一个闭包,本质上它还是函数,闭包是引用了自由变量(x)的函数(inner)。
</span><span style="color:#800000;">&#39;&#39;&#39;</span></pre>
     </div>
     <span class="cnblogs_code_collapse">View Code</span>
    </div>
    <p> </p>
    <p><span style="color:#ff0000;"> 3、装饰器</span></p>
    <pre class="blockcode"><em>装饰器:本质是函数,功能是用来装饰其他函数</em><br><em>为其他函数添加附加功能</em><br><em>原则:1、不修改被装饰函数的源代码</em><br><em>      2、不修改被装饰函数的调用方式</em><br><em>      即:装饰器对于被装饰函数来说是透明的</em></pre>
    <p> 普通装饰器</p>
    <div class="cnblogs_code">
     <img alt="" class="code_img_closed" id="code_img_closed_e83a568b-0267-4f40-9599-3dd498454d29" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-8f900a89c6347c561fdf2122f13be562.gif">
     <img alt="" class="code_img_opened" id="code_img_opened_e83a568b-0267-4f40-9599-3dd498454d29" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-961ddebeb323a10fe0623af514929fc1.gif">
     <div class="cnblogs_code_hide" id="cnblogs_code_open_e83a568b-0267-4f40-9599-3dd498454d29">
      <pre class="blockcode"><span style="color:#800000;">&#39;&#39;&#39;</span><span style="color:#800000;">
普通的装饰器
</span><span style="color:#800000;">&#39;&#39;&#39;</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> decorator(func):
    </span><span style="color:#0000ff;">def</span> wrapper(*args, **<span style="color:#000000;">kwargs):
        </span><span style="color:#0000ff;">print</span>(<span style="color:#800000;">&#34;</span><span style="color:#800000;">前面加的代码</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
        old_result </span>&#61; func(*args, **<span style="color:#000000;">kwargs)
        </span><span style="color:#0000ff;">print</span>(<span style="color:#800000;">&#34;</span><span style="color:#800000;">后面加的代码</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP