python - Python - 将变量范围绑定到闭包
问题描述
我有一些使用外部变量的函数。一个(基本上)简化的例子:
a = 2
b = 3
def f(x):
return x * a + b
虽然我需要a
and b
in f
,但我在其他任何地方都不需要它们。特别是,一个人可以写a = 5
,这将改变 的行为f
。我应该如何让a
外界b
看不见?
其他语言允许我大致编写以下代码:
let f =
a = 2
b = 3
lambda x: x * a + b
我想要的是:
f
必须按预期工作并具有相同的签名a
并且b
必须只计算一次a
并且b
不得存在于范围之外f
- 分配
a = ...
和b = ...
不影响f
- 最干净的方法来做到这一点。例如,以下解决方案正式有效,但它引入
g
然后删除它,我不喜欢(例如,存在覆盖现有的风险,g
我认为它只是丑陋):
def g():
a = 2
b = 3
return lambda x: x * a + b
f = g()
del g
解决方案
您可以使用默认参数来完成此操作。默认参数仅在创建闭包时计算一次(这就是为什么如果您将可变对象作为默认参数,则在调用之间保留状态)。
def f(x, a=2, b=3):
return x * a + b
推荐阅读
- asp.net-core - Razor CShtml SelectList SelectListItem 默认值不适用
- tensorflow - 张量流对象检测api中的边界框格式
- c# - Linq 查询不返回任何内容(语法可能错误)
- php - 用于可变产品的 Woocommerce is_purchasable 挂钩
- nearprotocol - 如何在不验证块的情况下设置近节点?
- javascript - 关于 AppcompactAtvity 到 Fragment 问题的导航
- vue.js - 使用 vue-ads-pagination 分页模块创建锚点
- c# - 如何正确地将 DependencyProperty 绑定到 CollectionViewSource?
- python - 制作一个实时聊天平台-sounddevice问题
- solidity - 如何检查 Tron 地址是否是 TRC20 中的合约