python - *参数调用是懒惰的吗?

标签 python lazy-evaluation generator-expression

<分区>

Possible Duplicate:
Do python's variable length arguments (*args) expand a generator at function call time?

假设您有这样一个函数:

def give_me_many(*elements):
   #do something...

你这样调用它:

generator_expr = (... for ... in ... )
give_me_many(*generator_expr)

元素会被延迟调用,还是生成器会在函数执行之前遍历所有可能的数百万个元素?

最佳答案

参数总是作为元组和/或字典传递给函数,因此通过 *args 传递的任何内容都将转换为元组或 **kwargs将被转换为字典。如果 kwargs 已经是一个字典,那么会制作一个副本。元组是不可变的,因此不需要复制 args 除非它发生变化(通过包含其他位置参数或将一些参数移除为命名位置参数),但它将从任何其他序列类型转换为元组。

关于python - *参数调用是懒惰的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11986616/

相关文章:

python - imshow() 函数显示空的灰色图像。我该怎么办?

python - 在 python 3 中使用 .bmp 文件

python - 获取错误 search_products() 至少需要 2 个参数(给定 2 个)

c# - Lazy<T> 无异常缓存

python - 列表推导和生成器表达式中的 yield

python - Opencv 使用 python 和 flask : HIGHGUI ERROR: libv4l unable to ioctl S_FMT

haskell - 为什么使用 fromMaybe 提取 IO (Maybe Bool) 执行两个 IO 操作

swift - 将选项分配给惰性属性的更优雅的方式

python - 生成器表达式使二进制字符串生成器永远卡住

python - 使用生成器表达式加载选项字典