python学习笔记—— 函数
〈p>读取远程页面
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码
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 = z = 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 ,或扫描二维码


机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义