Python创建函数,自动创建调用它的函数内的变量?

  • 本文关键字:函数 创建 变量 Python 调用 python
  • 更新时间 :
  • 英文 :


假设这个函数有很多变量设置:

def set_variables():
var_a = 10
var_b = 200

和这些变量需要在多个函数中设置,并通过它们的var名访问。有没有一种方法来创建这个函数s.t.之后,它调用父函数,它有var_avar_b,而不必返回它们?上面的函数是一个例子,但实际上有很多变量,所以像下面这样的东西是不可行的。

def parent_function():
var_a, var_b, ... = set_variables()

最好是

def parent_function():
set_variables()
# do some code with var_a or var_b

或者甚至返回key,val的字典,并自动生成key名称设置为val的变量。

例如

def parent_function():
var_dict = set_variables()
some_func_to_auto_set_vars_from_dict(var_dict)
# Do something with var_a or var_b

返回一个集合,允许您按名称访问值而无需重新分配它们,例如dict:

def set_variables():
return {
'a': 10,
'b': 200,
}
def parent_function():
v = set_variables()
# do some code with v['a'] or v['b']

或者(我个人对这个用例的偏好)一个NamedTuple,它为您提供了类型检查的好处(和IDE自动完成,就像您使用顶级命名变量一样):

from typing import NamedTuple
class Vars(NamedTuple):
a: int
b: int
def set_variables() -> Vars:
return Vars(a=10, b=200)
def parent_function():
v = set_variables()
# do some code with v.a and v.b

让所有函数设置所有变量似乎很容易。但是这种隐式的状态共享已被证明是维护的噩梦。

应该使用不可变的数据类;它们或多或少地提供了您所要求的便利,但允许更容易地对代码进行推理。

@dataclass
class Settings:
a: str =""
b: int =5
...
def parent():
s = initialize(Settings(c=[1,2,3]))
use(s.a, s.b)
...
def initialize (s: Settings):
return dataclass.replace(s,
b=10, d="@#$_"
)

最新更新