首页 > 解决方案 > 定义函数时“重载”变量

问题描述

在 Python 中,可以在函数定义中“重用”变量名。例如,可以如下定义函数 f(x,y) = x + y^2:

def f(x,y):
    def square(x):
        return x**2
    return square(y)+x

这是有效的,因为 Python 知道 square(x) 定义中的 x 指的是 square() 的参数,而不是 f(x,y) 中的 x

但是在做更复杂的版本时会遇到问题吗?这被认为是不好的编程习惯吗?例如,以下会更好吗?

def f(x,y):
    def square(z):
        return z**2
    return square(y)+x

标签: python

解决方案


是的,确实有可能,实际上这种做法有一个名字 -包装。但是这个方法会占用更多的内存,因为你每次调用一个方法时都定义一个方法,所以这不会用在像这样简单的事情上。但是对于像 tensorflow 这样的模块,您必须为 TF 类的每个新实例定义自定义输入函数,这非常有用,因为您可以只返回一个函数。


推荐阅读