python:如何将上下文传递给函数

时间:2016-05-05 06:06:31

标签: python

将上下文(没有特定类型)传递给函数的正确方法是什么? 有多种方法,每种方法都在其签名中接受上下文。每个函数都知道它应该在上下文中查找哪个变量(在下面的示例中,f1知道它应该查找" a")。我无法弄清楚如何定义上下文并为其中一个属性设置值。

我正在考虑用C背景写这个,所以在python世界中看起来有点尴尬,任何关于如何重做这整件事的建议也被接受了。在C中,应该为它可能设置的所有变量完全定义上下文。在python中,因为它是动态的,我的印象是我们不需要上下文变量的类型,但是我不确定没有定义上下文我如何设置context.a。

我想要做的简化示例如下所示:

def f1(context):
    a = context.a
    print "a: " + a

def f2(context):
    b = context.b
    print "b: " + b

context1.a = "testing1"
f1(context1)

context2.b = "testing2"
f2(context2)

2 个答案:

答案 0 :(得分:2)

你可以定义一个"空" class,并在代码中动态地将变量添加到该类的实例中:

#!python3

class Context:
    pass

def f1(context):
    a = context.a
    print("a:", a)

def f2(context):
    b = context.b
    print("b:", b)

c = Context()
c.a = 1
c.b = "alfalfa"

f1(c)
f2(c)

答案 1 :(得分:1)

Python是一种动态语言,因此您可以将任意类型作为任何参数传递,并且由函数中的代码决定是否做正确的事。

"Duck typing" on Wikipedia