首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

深入分析iter()方法

但其实如果仔细看官方文档,会发现 iter() 方法其实是接受两个参数的,文档说明如下 iter(object[, sentinel]) sentinel 英文翻译为 哨兵。...sentinel 参数是可选的,当它存在时,object 不再传入一个可迭代对象,而是一个可调用对象,通俗点说就是可以通过()调用的对象,而 sentinel 的作用就和它的翻译一样,是一个“哨兵”,当时可调用对象返回值为这个...(123) TypeError: 'int' object is not iterable 再来看看有第二个参数的情况 If the second argument, sentinel, is given..., then object must be a callable object....翻译:如果给定了第二个参数 sentinel,object 则必须是一个可调用对象,这个可调用对象没有任何参数,当可调用对象的返回值等于 sentinel 的值时,抛出 StopIteration 的异常

48120

for死循环、怪异字符串、两次return……Python冷知识(三)

但是如果让你用 for 写一个死循环,你会写? 这是个开放性的问题,在往下看之前,建议你先尝试自己思考,你会如何解答。...好了,如果你还没有思路,那就来看一下 一个海外 MIT 群友的回答: for i in iter(int, 1):pass 是不是懵逼了。iter 还有这种用法?这为啥是个死循环?...原来iter有两种使用方法,通常我们的认知是第一种,将一个列表转化为一个迭代器。 而第二种方法,他接收一个 callable 对象,和一个sentinel 参数。...第一个对象会一直运行,直到它返回 sentinel 值才结束。 那int 呢,这又是一个知识点,int 是一个内建方法。通过看注释,可以看出它是有默认值0的。

98230

谈谈 Python 那些不为人知的冷知识(三)

但是如果让你用 for 写一个死循环,你会写?(问题来自群友 陈**) 这是个开放性的问题,在往下看之前,建议你先尝试自己思考,你会如何解答。...好了,如果你还没有思路,那就来看一下 一个海外 MIT 群友的回答: for i in iter(int, 1):pass 是不是懵逼了。iter 还有这种用法?这为啥是个死循环?...原来iter有两种使用方法,通常我们的认知是第一种,将一个列表转化为一个迭代器。 而第二种方法,他接收一个 callable对象,和一个sentinel 参数。...第一个对象会一直运行,直到它返回 sentinel 值才结束。 那int 呢,这又是一个知识点,int 是一个内建方法。通过看注释,可以看出它是有默认值0的。

56600

python花式读取大文件(10g50g1t)遇到的性能问题(面试向)

利用生成器解耦代码     假如我们在讨论的不是 Python,而是其他编程语言。那么可以说上面的代码已经很好了。...iter(iterable) 是一个用来构造迭代器的内建函数,但它还有一个更少人知道的用法。...当我们使用 iter(callable, sentinel) 的方式调用它时,会返回一个特殊的对象,迭代它将不断产生可调用对象 callable 的调用结果,直到结果为 setinel 时,迭代终止。...def chunked_file_reader(file, block_size=1024 * 8): """生成器函数:分块读取文件内容,使用 iter 函数 """ # 首先使用...fp.read, block_size) 构造一个新的无需参数的函数 # 循环将不断返回 fp.read(block_size) 调用结果,直到其为 '' 时终止 for chunk in iter

62130

python中的map和filter避坑指南

◆ Pythonic的方式使用map和filter 列表迭代在python中是非常pythonic的使用方式 def inc(x): return x+1 >>> list(map(inc,range...(10))) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # pythonic way >>> [inc(i) for i in range(10)] [1, 2, 3, 4, 5...list 是值类型? 不是,因为list是可变类型。 tuple是值类型? 是的,因为tuple是不可变类型 iterator是值类型?...大多数函数式语言都具有不可变性是有原因的。只有当可以保证表达式的参数每次都具有相同的含义时,才能延迟表达式的求值。 在本例中,filter(is_even, a)的结果取决于迭代器的实现时间。...) >>> take(5, res) (1, 2, 3, 4, 5) >>> take(5, res) (1, 2, 3, 4, 5) 您总是会得到相同的结果,就像在clojure或任何其他函数式编程语言中一样

52010

Python 工匠:高效操作文件的三个建议

而这两行代码主要做了这么几件事: 首先使用 Path(path) 将字符串路径转换为 Path 对象 调用 .glob('*.txt') 对路径下所有内容进行模式匹配并以生成器方式返回,结果仍然是 Path...利用生成器解耦代码 假如我们在讨论的不是 Python,而是其他编程语言。那么可以说上面的代码已经很好了。...iter(iterable) 是一个用来构造迭代器的内建函数,但它还有一个更少人知道的用法。...当我们使用 iter(callable,sentinel) 的方式调用它时,会返回一个特殊的对象,迭代它将不断产生可调用对象 callable 的调用结果,直到结果为 setinel 时,迭代终止。...(callable,sentinel) 可以在一些特定场景简化代码 难以编写测试的代码,通常也是需要改进的代码 让函数依赖“类文件对象”可以提升函数的适用面和可组合性   -python好课-   ?

75850

让你的 Python 代码优雅又地道

一般说地道(idiomatic)的python代码,就是指这份代码很pythonic。Python的语法和标准库设计,处处契合着pythonic的思想。...而且Python社区十分注重编码风格一的一致性,他们极力推行和处处实践着pythonic。所以经常能看到基于某份代码P vs NP (pythonic vs non-pythonic)的讨论。...(partial(f.read, 32), ''): blocks.append(block) iter接受两个参数。...更好的方法 d = defaultdict(list) for name in names: key = len(name) d[key].append(name) 字典的popitem()是原子的?...finally: sys.stdout = oldstdout 简洁的单句表达 两个冲突的原则: 一行不要有太多逻辑 不要把单一的想法拆分成多个部分 Raymond的原则: 一行代码的逻辑等价于一句自然语言

1K100

如何写出优雅又地道的Python代码?

一般说地道(idiomatic)的python代码,就是指这份代码很pythonic。Python的语法和标准库设计,处处契合着pythonic的思想。...而且Python社区十分注重编码风格一的一致性,他们极力推行和处处实践着pythonic。所以经常能看到基于某份代码P vs NP (pythonic vs non-pythonic)的讨论。...(partial(f.read, 32), ''): blocks.append(block) iter接受两个参数。...更好的方法 d = defaultdict(list) for name in names: key = len(name) d[key].append(name) 字典的popitem()是原子的?...finally: sys.stdout = oldstdout 简洁的单句表达 两个冲突的原则: 一行不要有太多逻辑 不要把单一的想法拆分成多个部分 Raymond的原则: 一行代码的逻辑等价于一句自然语言

1.1K100

Python要点总结,我使用了100个小例子!

静态类型 vs 动态 编程语言 强类型 vs 弱类型 编程语言 1.1 类型检查 类型检查是一个验证和施加类型约束的过程,编译器或解释器通常在编译或运行阶段做类型检查。...在静态类型语言中,类型检查发生在编译阶段;动态类型语言,类型检查发生在运行阶段。 强类型语言有更强的类型检查机制,表达式计算中会做严格的类型检查;而弱类型语言允许各种变量类型间做一些运算。...()   判断对象是否可以被调用,能被调用的对象就是一个callable 对象,比如函数 str, int 等都是可被调用的,但是例子4 中xiaoming这个实例是不可被调用的: In [48]: callable...(object, sentinel) 返回一个可迭代对象, sentinel可省略 In [72]: lst = [1,3,5] In [73]: for i in iter(lst): .....我不打算笼统的介绍它们所能实现的功能,而是想分析这些功能背后的实现代码,它们如何做到高效节省内存的,Python内核的贡献者们又是如何写出一手漂亮的代码的,这很有趣,不是

50331

Python要点总结,我使用了100个小例子!

静态类型 vs 动态 编程语言 强类型 vs 弱类型 编程语言 1.1 类型检查 类型检查是一个验证和施加类型约束的过程,编译器或解释器通常在编译或运行阶段做类型检查。...在静态类型语言中,类型检查发生在编译阶段;动态类型语言,类型检查发生在运行阶段。 强类型语言有更强的类型检查机制,表达式计算中会做严格的类型检查;而弱类型语言允许各种变量类型间做一些运算。...()   判断对象是否可以被调用,能被调用的对象就是一个callable 对象,比如函数 str, int 等都是可被调用的,但是例子4 中xiaoming这个实例是不可被调用的: In [48]: callable...(object, sentinel) 返回一个可迭代对象, sentinel可省略 In [72]: lst = [1,3,5] In [73]: for i in iter(lst): .....我不打算笼统的介绍它们所能实现的功能,而是想分析这些功能背后的实现代码,它们如何做到高效节省内存的,Python内核的贡献者们又是如何写出一手漂亮的代码的,这很有趣,不是

54710

Python要点总结,我使用了100个小例子!

静态类型 vs 动态 编程语言 强类型 vs 弱类型 编程语言 1.1 类型检查 类型检查是一个验证和施加类型约束的过程,编译器或解释器通常在编译或运行阶段做类型检查。...在静态类型语言中,类型检查发生在编译阶段;动态类型语言,类型检查发生在运行阶段。 强类型语言有更强的类型检查机制,表达式计算中会做严格的类型检查;而弱类型语言允许各种变量类型间做一些运算。...()   判断对象是否可以被调用,能被调用的对象就是一个callable 对象,比如函数 str, int 等都是可被调用的,但是例子4 中xiaoming这个实例是不可被调用的: In [48]: callable...(object, sentinel) 返回一个可迭代对象, sentinel可省略 In [72]: lst = [1,3,5] In [73]: for i in iter(lst): .....我不打算笼统的介绍它们所能实现的功能,而是想分析这些功能背后的实现代码,它们如何做到高效节省内存的,Python内核的贡献者们又是如何写出一手漂亮的代码的,这很有趣,不是

91220

手把手教你学会Python函数式编程

魔术方法就像是一个API,可以帮助你的对象变得更加Pythonic。...一些对象将具有魔术方法\_\_next\_\_而不是\_\_iter\_\_魔术方法,例如集合(在本文后面讨论)。对于本文,我们假设我们接触的所有内容都是可迭代的对象。...举个例子,这个lambda表达式对给定的数字进行平方: 让我们运行它: 这看起来不像一个函数? 嗯,这有点令人困惑,但可以解释。我们将一些东西分配给变量“square”。...我们可以继续写下它们?好吧,你可以。但程序员很懒的。如果你一遍又一遍地重复同样的事情,这表明有一种更快的方法来加快速度,这将使你不再重复。我们可以在这里使用闭包。...这是一首关于Pythonic意味着什么的诗。

1.1K20

让你的 Python 代码优雅又地道

一般说地道(idiomatic)的python代码,就是指这份代码很pythonic。Python的语法和标准库设计,处处契合着pythonic的思想。...而且Python社区十分注重编码风格一的一致性,他们极力推行和处处实践着pythonic。所以经常能看到基于某份代码P vs NP (pythonic vs non-pythonic)的讨论。...(partial(f.read, 32), ''): blocks.append(block) iter接受两个参数。...更好的方法 d = defaultdict(list) for name in names: key = len(name) d[key].append(name) 字典的popitem()是原子的?...finally: sys.stdout = oldstdout 简洁的单句表达 两个冲突的原则: 一行不要有太多逻辑 不要把单一的想法拆分成多个部分 Raymond的原则: 一行代码的逻辑等价于一句自然语言

63300
领券