Ruby's Louvre

每天学习一点点算法

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

python学习笔记—— 函数

〈p>读取远程页面

from urllib import urlretrieve
 
def printFile(url):
    f = open(url)
    for line in f:
        if line.strip():
            print line
    f.close()
 
def loadFile(url=r'http://www.idkin.com/contact.html', process=printFile):
    try:
        fileName = urlretrieve(url,'tmp.html')[0]
        print(fileName)
    except BaseException, e:
        print(str(e))
    if fileName:
        process(fileName)
 
if __name__ == "__main__":
    loadFile()
 
#urlretrieve的返回值是一个tuple, 第一个元素就是目标文件名
#如果urlretrieve仅获取一个参数,返回值的第一个元素就是产生的临时文件名

filter函数,类似javascript1.7的Array#filter。filter函数的功能相当于过滤器。调用一个布尔函数fn来迭代遍历每个seq中的元素;返回一个使fn返回值为true的元素的序列。

from random import randint
def filter(fn,arr):
    ret = [];
    for i in arr:
        if fn(i):
            ret.append(i)
    return ret;
arr = [1,2,3,4,5,6];
print filter(lambda n:n%2,arr)

map函数,类似javascript1.7的Array#map。map函数func作用于给定序列的每个元素,并用一个列表来提供返回值。

from random import randint
def map(fn,arr):
    ret = [];
    for i in arr:
        ret.append(fn(i))
    return ret;
arr = [1,2,3,4,5,6];
print map(lambda n:n+10,arr)

我们也可以用并归的思想实现此迭代器:

def rmap ( fun, list ):
    if list == []:
        return []
    else:
        return [fun( list[0] )] + rmap( fun, list[1:] )

reduce函数,类似javascript1.7的Array#reduce。fn为二元函数,将fn作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值。

from random import randint
def reduce(fn,seq,initial=None):
    lseq = list(seq)
    if initial is None:
        res = lseq.pop(0)
    else:
        res = initial
    for i in lseq:
        res = fn(res,i)
    return res
arr = [1,2,3,4,5,6];
print reduce(lambda a,b:a+b,arr)

追踪闭包词法的变量

output = 'int %r id=%#0x val=%d'
w = x = y ==1
 
def f1():
    x = y = z = 2
     
def f2():
    y = z = 3
     
    def f3():
        z = 4
        print output %('w', id(w),w)
        print output %('x', id(x),x)
        print output %('y', id(y),y)
        print output %('z', id(z),z)
         
        clo = f3.func_closure
        if clo:
            print "f3 closure vars: ",[str(c) for c in clo]
        else:
            print "no f3 closure vars"
             
    f3()
    clo = f2.func_closure
    if clo:
        print "f2 closure vars: ",[str(c) for c in clo]
    else:
        print "no f2 closure vars"
f2()
     
clo = f1.func_closure
if clo:
    print "f1 closure vars: ",[str(c) for c in clo]
else:
    print "no f1 closure vars"
f1()

打印日志

# coding='utf-8'
from time import time
 
def logged(when):
    def log(f,*args,**kargs):
        print '''Called:
        function:%s
        args:%r
        kargs:%r''' % (f,args,kargs)
    def pre_logged(f):
        def wrapper(*args,**kargs):
            log(f,*args,**kargs)
            return f(*args,**kargs)
        return wrapper
 
    def post_logged(f):
        def wrapper(*args,**kargs):
            now=time()
            try:
                return f(*args,**kargs)
            finally:
                log(f,*args,**kargs)
                print "time delta: %s" %(time()-now)
        return wrapper
 
    try:
        return {"pre":pre_logged,"post":post_logged}[when]
    except KeyError, e:
        raise ValueError(e),'must be "pre" or "post"'
 
@logged("post")
def hello(name):
    print "Hello,",name
 
hello("World")

生成器

# coding='utf-8'
def counter(start_at=10):
    count = start_at
    while(True):
        val = (yield count)
        if(val is not None):
            count = val
        else:
            count += 1
            if(count == 10):
                break
 
for i in counter(3):
   print i

如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码

posted on   司徒正美  阅读(1507)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示