首页 / PYTHON / python延迟执行
python延迟执行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python延迟执行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2027字,纯文字阅读大概需要3分钟。
内容图文
![python延迟执行](/upload/InfoBanner/zyjiaocheng/761/dcfb7639ce804ab68d028d6990f96575.jpg)
要在Lisp中实现streams as delayed lists,使用Lisp宏是recommended.
(defmacro cons-stream (a b)
(cons ,a (delay ,b)))
(defmacro delay (expr)
`(memo-proc (lambda () ,expr)))
用Python和Perl的方式做同样的事情是什么?
编辑.是否可以使用这样一个很酷的结构作为流
(define primes (sieve (integers-starting-from 2)))
在Python和Perl等语言中
解决方法:
Perl的
runrig suggested Mark Dominus出色的Higher Order Perl技术.使用HOP免费提供的样品代码Stream module,Eratosthenes的筛子是
#! /usr/bin/env perl
use strict;
use warnings;
use Stream qw/ filter head node promise show tail upfrom /;
use subs 'sieve'; # no parens on recursive calls
sub sieve {
my($s) = @_;
my $n = head $s;
node $n, promise { sieve filter { $_[0] % $n != 0 } tail $s };
}
sub primes { sieve upfrom 2 }
show primes, 10;
输出:
$./primes 2 3 5 7 11 13 17 19 23 29
Python
从gist by alexbowe借用代码,使用流的Python筛选
#! /usr/bin/env python
null_stream = (None, None)
def reduce(f, result, stream):
if stream is null_stream: return result
return reduce(f, f(result, head(stream)), tail(stream))
def take(N, stream):
if N <= 0 or stream is null_stream: return null_stream
return (head(stream), lambda: take(N-1, tail(stream)))
def filter(pred, stream):
if stream is null_stream: return null_stream
if pred(head(stream)):
return (head(stream), lambda: filter(pred, tail(stream)))
return filter(pred, tail(stream))
def integers_from(N): return (N, lambda: integers_from(N+1))
def head((H, _)): return H
def tail((_, T)): return T()
def to_array(stream): return reduce(lambda a, x: a + [x], [], stream)
def sieve(stream):
if stream is null_stream: return null_stream
h = head(stream)
return (h, lambda: sieve(filter(lambda x: x%h != 0, tail(stream))))
def primes(): return sieve(integers_from(2))
print to_array(take(10, primes()))
输出:
$./prymes [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
其他可能性
在某些语言中,流模式是不可见的.例如,延迟评估是Haskell的一个特性,因此您可以将质数定义为
primes = sieve [2 ..]
where sieve (x:xs) =
let remains = filter (not . isMultipleOf x) xs
in x : sieve remains
isMultipleOf a b = b `mod` a == 0
内容总结
以上是互联网集市为您收集整理的python延迟执行全部内容,希望文章能够帮你解决python延迟执行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。