python如何在调用一个函数前修改他的locals

myrfy2004 2016-11-23 11:12:16
例如定义如下函数:


def calc():
print x


现在希望在调用calc前,由调用者为calc添加x这个局部变量。这里要求x必须是局部变量。

现在的想法有两个,一个是想办法直接修改calc的local,但是在calc的外部没有办法访问其内部local,所以这个应该行不通。
另一个思路是,能不能动态修改calc的定义,通过一个装饰器或者其他手段,动态修改calc的定义为

def calc(x):
print x


但是这里要求函数的参数x是通过某种手段动态添加的。这样的话,是不是要使用装饰器配合修改Python的字节码才能完成呢?

不知这个思路是否可行。


最后要说的是,这个其实可以使用动态参数比如kwargs,但是我希望能有一种更简洁的语法书写方式。
...全文
263 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
屎克螂 2016-11-25
  • 打赏
  • 举报
回复
不用多想了 就这个法子 def calc(x): print x
混沌鳄鱼 2016-11-23
  • 打赏
  • 举报
回复
第一办法可以通过闭包实现

	
def wraper(x):
	def func():
		print x
	return func

func = wraper(1)
func()
# 1

第二办法,你可以利用Python所有的东西都是object这个特性。 这样就可以了。

def func()
    print func.x

func.__setattr__('x', 1)

func()
# 1

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧