从函数外部返回变量名称,作为python函数内部的字符串

狮子座

因此,我创建了一个函数,该函数将一个操作(在这种情况下,将数组与正弦波进行逐点乘法,但这对我的问题无关紧要)应用于数组。

现在,我创建了另一个函数,我想使用该函数创建stringpython代码以在以后多次应用第一个函数。第二个函数的输入可以是astring或an array,因此,如果需要的话,我也可以在其自身的输出上使用第二个函数。我在字符串中获取变量名的方法在函数外部起作用。

输入:

var = np.array([[1,3],[2,4]]) # or sometimes var = 'a string'

if type(var)==str:
    var_name = var
else:
    var_name = [ k for k,v in locals().items() if v is var][0]

var_name

输出:

'var'

因此,这里var是提供给函数的变量(数组或字符串),在这种情况下为数组。if语句很好地返回了我的名字。

但是,当我在函数中使用此函数时,无论我提供什么输入,它实际上似乎都在locals()中寻找var不知何故,它不会从函数输入中获取var

定义:

def functionTWO(var, listoflistsofargs=None):
    if type(var)==str:
        var_name = var
    else:
        var_name = [ k for k,v in locals().items() if v is var][0]
    if listoflistsofargs==None:
        return var_name
    command = []
    for i in range(len(listoflistsofargs)):
        if i==0:
            command.append('functionONE(')
            command.append(var_name)
            command.append(',%.17f, %.17f)' % tuple(listoflistsofargs[i]))
        else:
            command.insert(0,'functionONE(')
            command.append(',%.17f, %.17f)' % tuple(listoflistsofargs[i]))
    ''.join(command)
    command[0] = var_name + ' + ' + command[0]
    return ''.join(command)

输入:

somearray = np.array([[1,2,3],[1,2,3],[1,2,3]])
args = [[1,3],[6,5]]
command = functionTWO(somearray, args)
command

输出:

NameError: name 'var' is not defined

想要的输出:

'functionONE(functionONE(somearray, 1, 3), 6, 5)'

为什么listoflistsofargs要从功能输入中提取而var不是?var在listcomprehension中指定的定义functionTWO通常,当我将列表推导与函数输入一起使用时,它可以正常工作。有人知道为什么这里不是这种情况吗?先感谢您!

编辑:所以我想答案不是Marcin实现的类看起来更加简洁,并且代码量的顺序大致相同。太糟糕了,我无法在函数内部工作。对于其他donts(实际上其他的想法)关于使用变量名作为字符串有这个问题,在这里我得到了变量名上面的列表理解。

马辛

您不能将变量作为字符串*传递,也不应这样做。

如果要在函数之间传递值,通常的方法是将其作为参数传递,然后作为返回值传递。

如果不方便,通常的解决方案是一个对象:定义一个既包含共享变量又作用于变量的方法的类。

如果需要创建命令对象,最好以结构化的方式进行。例如,如果要传递函数和参数,则可以从字面上传递元组中的函数对象和参数:

def foo():
    return (functionONE,somearray,1,3)

command = foo()
command[0](*command[1:])

如果要将此类命令嵌入命令中,则可能需要用一个类将其包装起来,以便可以递归地评估参数。实际上,这里有一个小评估者:

def evaluator(object):
    def __init__(self,func=None,params=None):
        self.func = func
        self.params = params

    def eval(self,alternativeparams=None):
        if alternativeparams is not None:
           params = alternativeparams
        else:
           params = self.params

        if params is not None:
           evaluatedparams = (item() if callable(item) else item for item in params)
        else: evaluatedparams = None

        if func is not None:
           return self.func(*(evaluatedparams or ()))
        else: return evaluatedparams
    def __call__(self, *params):
        return self.eval(params if params else None)

尽管有一些技巧可以使您从函数中传递对局部变量的引用,但这并不是一个好主意,因为您最终会创建自己的半熟对象系统,这很难理解。

*这是因为变量具有名称(是字符串)和上下文,该上下文将名称映射到字符串。因此,您至少需要传递一个元组才能真正传递一个变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取变量名称作为字符串?

来自分类Dev

将字符串更改为现有变量名称以为多个变量创建1个函数(内部类,使用Tkinter的root)

来自分类Dev

Python3-使用函数参数作为变量名称

来自分类Dev

如何在函数内部使用R字符向量元素作为字符串和变量?

来自分类Dev

python函数字符串参数转换为变量名

来自分类Dev

如何使用任何输入变量名从字符串中解析python函数?

来自分类Dev

Python使用函数作为字符串

来自分类Dev

如何将字符串转换为在函数全局内部实例化的变量名?

来自分类Dev

通过变量名称在函数内部的JavaScript调用函数

来自分类Dev

获取PHP变量名称作为许多变量的字符串

来自分类Dev

使用变量名称作为字符串使用循环设置变量

来自分类Dev

使用模板字符串(ES6)作为函数中的返回变量

来自分类Dev

返回一个全局变量,使用字符串作为变量名

来自分类Dev

从Python函数返回字符串

来自分类Dev

Python函数返回字符串

来自分类Dev

值名称作为赋值函数中的字符串

来自分类Dev

使用输入字符串作为函数名称C ++

来自分类Dev

OCaml函数名称作为字符串

来自分类Dev

Ajax响应字符串作为函数名称

来自分类Dev

访问json将变量名称作为字符串传递

来自分类Dev

获取空字符串从全局变量内部函数

来自分类Dev

使用函数的输出作为字符串变量

来自分类Dev

使用带变量的字符串作为函数名

来自分类Dev

字符串变量作为 Regex() 构造函数中的模式

来自分类Dev

Python - 使用字符串数组,将它们作为函数的数据帧名称的输入传递

来自分类Dev

一个char指针函数在函数内部返回字符串,但在main函数中返回字符串?

来自分类Dev

创建引用变量和值的字符串名称的函数

来自分类Dev

在javascript中获取函数内部的变量名称

来自分类Dev

是否可以在函数内部获取结果变量名称?

Related 相关文章

  1. 1

    如何获取变量名称作为字符串?

  2. 2

    将字符串更改为现有变量名称以为多个变量创建1个函数(内部类,使用Tkinter的root)

  3. 3

    Python3-使用函数参数作为变量名称

  4. 4

    如何在函数内部使用R字符向量元素作为字符串和变量?

  5. 5

    python函数字符串参数转换为变量名

  6. 6

    如何使用任何输入变量名从字符串中解析python函数?

  7. 7

    Python使用函数作为字符串

  8. 8

    如何将字符串转换为在函数全局内部实例化的变量名?

  9. 9

    通过变量名称在函数内部的JavaScript调用函数

  10. 10

    获取PHP变量名称作为许多变量的字符串

  11. 11

    使用变量名称作为字符串使用循环设置变量

  12. 12

    使用模板字符串(ES6)作为函数中的返回变量

  13. 13

    返回一个全局变量,使用字符串作为变量名

  14. 14

    从Python函数返回字符串

  15. 15

    Python函数返回字符串

  16. 16

    值名称作为赋值函数中的字符串

  17. 17

    使用输入字符串作为函数名称C ++

  18. 18

    OCaml函数名称作为字符串

  19. 19

    Ajax响应字符串作为函数名称

  20. 20

    访问json将变量名称作为字符串传递

  21. 21

    获取空字符串从全局变量内部函数

  22. 22

    使用函数的输出作为字符串变量

  23. 23

    使用带变量的字符串作为函数名

  24. 24

    字符串变量作为 Regex() 构造函数中的模式

  25. 25

    Python - 使用字符串数组,将它们作为函数的数据帧名称的输入传递

  26. 26

    一个char指针函数在函数内部返回字符串,但在main函数中返回字符串?

  27. 27

    创建引用变量和值的字符串名称的函数

  28. 28

    在javascript中获取函数内部的变量名称

  29. 29

    是否可以在函数内部获取结果变量名称?

热门标签

归档