从连接字符串名调用Python函数名

2024-10-02 00:40:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过连接“string”+变量+“string”创建一个def函数名,并调用该def函数

为了简单起见,我目前正在使用此压缩版本的代码来完成类似的任务,我希望最小化函数do_update(a)的硬代码内容:

ROTATE = '90'

ROT20 = [
[0, 0, 0, 0, 0, 0, 0, 0],
[126, 129, 153, 189, 129, 165, 129, 126],
[126, 255, 231, 195, 255, 219, 255, 126],
[0, 8, 28, 62, 127, 127, 127, 54],
[0, 8, 28, 62, 127, 62, 28, 8],
[62, 28, 62, 127, 127, 28, 62, 28],
[62, 28, 62, 127, 62, 28, 8, 8],
[0, 0, 24, 60, 60, 24, 0, 0],
];

def updatevalues90(a):
  b = []
  for i in range(8):
    for j in range(8):
      b[i] += a[j] + i
  return b

def do_update(a):  
  if ROTATE == '90':
    ROT = [updatevalues90(char) for char in a]
  elif ROTATE == '180':  
    ROT = [updatevalues180(char) for char in a]
  elif ROTATE == '270':
    ROT = [updatevalues270(char) for char in a]

do_update(ROT20)

我所尝试的一切都导致了无效的语法或用我想要的字符串名填充的ROT

我想对updatevalues90(char)进行函数调用,不需要硬编码,我想将其更改为:

ROT = ["updatevalues" + ROTATE + "(char)" for char in a]

因此,ROTATE中的任何值都将成为函数调用的一部分,即函数名

我的问题是在Python中如何将字符串和变量名连接成可用的函数名

我想是eval,但我不能让语法为我工作。也许Python中有更简单的东西可以工作


Tags: 函数代码inforstringdefupdaterange
1条回答
网友
1楼 · 发布于 2024-10-02 00:40:29

将函数存储在dict中:

updaters = {
  '90': updatevalues90,
  '180': updatevalues180,
  '270': updatevalues270
}

def do_update(a):
    ROT = [updaters[ROTATE](char) for char in a]
    # return ROT   ?

相关问题 更多 >

    热门问题