GVKun编程网logo

在Python中按数组索引调用函数(python 数组索引)

10

如果您想了解在Python中按数组索引调用函数和python数组索引的知识,那么本篇文章将是您的不二之选。我们将深入剖析在Python中按数组索引调用函数的各个方面,并为您解答python数组索引的疑

如果您想了解在Python中按数组索引调用函数python 数组索引的知识,那么本篇文章将是您的不二之选。我们将深入剖析在Python中按数组索引调用函数的各个方面,并为您解答python 数组索引的疑在这篇文章中,我们将为您介绍在Python中按数组索引调用函数的相关知识,同时也会详细的解释python 数组索引的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

在Python中按数组索引调用函数(python 数组索引)

在Python中按数组索引调用函数(python 数组索引)

我在Python out1,out2,out3等中有很多函数,并且想基于传入的整数来调用它们。

def arryofPointersToFns (value):     #call outn where n = value

是否有捷径可寻?

答案1

小编典典

tl; dr:编写out(n)函数而不是,out1(), out2(), ..., outN()并且不要理会此hack。

我无法想象在实际情况中会出现这个问题的合理情况。请重新考虑问题的体系结构;可能会有一个更好的方法(因为将它们存储在列表中意味着除索引外,函数没有其他意义;例如,我只能想象如果要创建该函数,则可以这样做)一堆动态生成的thunk,它们的时间顺序很重要,或者类似。尤其是正在阅读此答案的任何新手用户,都可以考虑制作一个可以处理所有内容的更通用的功能,或者将更多的标识信息与每个功能相关联,或者将其作为类的一部分进行粘贴等。

就是说,这就是你要怎么做。

myFuncs = [f0,f1,f2]myFuncs[2](...) #calls f2

要么

myFuncs = {''alice'':f1, ''bob'':f2}myFuncs[''alice''](...) #calls f1

这只是一步中的以下两个步骤:

myFuncs = [f0,f1,f2]f = myFuncs[i]f(...) #calls fi

或者,如果您没有上述OP所述的函数“
myFunc”的注册表,则可以使用globals(),尽管它的形式极其骇人,并且应避免使用(除非您希望这些函数在模块名称空间中可用,在这种情况下也许很好…但是这种情况很少见,您可能宁愿先在子模块中定义这些函数,然后再对frommysubmodule import *它们进行定义,而后者又会有些皱眉):

def fN(n):    return globals()[''f''+str(n)]def f2():    print("2 was called!")fN(2)(...) #calls f2

这是另外两个想法(接受答案后再添加两个想法):

您还可以这样创建一个装饰器:

>>> def makeRegistrar():...     registry = {}...     def registrar(func):...         registry[func.__name__] = func...         return func  # normally a decorator returns a wrapped function, ...                      # but here we return func unmodified, after registering it...     registrar.all = registry...     return registrar

并像这样使用它:

>>> reg = makeRegistrar()>>> @reg... def f1(a):...  return a+1... >>> @reg... def f2(a,b):...  return a+b... >>> reg.all{''f1'': <function f1 at 0x7fc24c381958>, ''f2'': <function f2 at 0x7fc24c3819e0>}

那么您可以调用reg.all [‘f1’]。您可以调整reg装饰器以跟踪索引并执行以下操作:

registry = []index = int(re.regextofindthenumber(func.__name__))if not index==len(registry):    raise Exception(''Expected def f{} but got def f{}'')else:    registry[index] = func

另外,为了避免globals(),您可以定义一个类:

class Funcs(object):    def f1():        ...    def f2():        ...    def num(n):        [code goes here]

如果您的功能数量很少,您可以选择[''f1'',''f2'',''f3''][i]

当然,如果没有更多的信息,所有这些建议都只会忽略真正的问题:这种情况永远都不会出现,并且可能表示存在严重的体系结构缺陷,而您可能希望有一些东西(使用示例),例如:

# a possibly-better worlddef out(n):    # output to N, whatever that means

而不是

# what you have nowdef out1():    # output to 1def out2():    # output to 2def outN(n):    # ???

c# – 在Python中加载DLL文件和调用函数

c# – 在Python中加载DLL文件和调用函数

我有加载DLL文件和在 Python中调用函数的问题.
我已经尝试了很多教程,但仍然无法弄清楚它是如何工作的.
这是我的类导出为DLL文件.我使用简单的C#代码.

namespace DemoClassLib
{
    public class cLib
    {
        public int increment(int x)
        {
            return x + 1;
        }
    }
}

构建C#代码后,我得到名为“DemoClassLib.dll”的DLL文件.
我使用ctypes加载DLL文件.一切都还好,直到现在.

from ctypes import *
myDll = WinDLL('D:\\Resources\\DemoClassLib\\bin\\Debug\\DemoClassLib.dll')

从那时开始,我无法继续.
我尝试过的所有命令都失败了.

n = c_int(1)
myDll.increment(n)

它不断向我展示错误.
如何在Python中调用方法“increment()”?
我如何传递输入并从中检索输出?
我是Python的新手.
有谁可以帮助我吗?
如果您能为我提供源代码教程,我将非常感激.

解决方法

您不能使用ctypes执行此操作,因为二进制文件中没有符号称为“increment”,因为您的increment方法是类的成员.即使这是C,名字也会被破坏.但是使用C#,你甚至不会在符号表中得到一个受损的名称,因为代码是由.NET框架解释的.

如果由于某种原因必须与C#库接口,您可能需要考虑尝试IronPython(http://ironpython.net/),这是在.NET框架上运行的Python,可以完全访问CLR.上面的注释表明暴露COM接口也可以工作.

Python Numpy 2D数组索引

Python Numpy 2D数组索引

我对python和numpy很陌生。请问有人可以帮助我了解如何对用作索引的某些数组进行索引。我有以下六个2D阵列-

array([[2,0],[3,1],[5,2]])

我想将这些数组用作索引,并将值10放入新的空矩阵的相应索引中。输出应如下所示:

array([[ 0,[ 0,[10,10,10]])

到目前为止,我已经尝试过

    from numpy import*
    a = array([[2,2]])
    b = zeros((6,3),dtype ='int32')
    b[a] = 10

但这给了我错误的输出。任何帮助请。

python – 通过没有循环的2D索引数组索引2D numpy数组

python – 通过没有循环的2D索引数组索引2D numpy数组

我正在寻找一种矢量化的方法来索引numpy.array的numpy.array索引.

例如:

import numpy as np

a = np.array([[0,3,4],[5,6,0],[0,1,9]])

inds = np.array([[0,1],[1,2],2]])

我想构建一个新数组,使得该数组中的每一行(i)都是数组a的一行(i),由数组inds(i)的行索引.我想要的输出是:

array([[ 0.,3.],# a[0][:,1]]
       [ 6.,0.],# a[1][:,2]] 
       [ 0.,9.]])  # a[2][:,2]]

我可以用循环实现这个目的:

def loop_way(my_array,my_indices):
    new_array = np.empty(my_indices.shape)
    for i in xrange(len(my_indices)):
        new_array[i,:] = my_array[i][:,my_indices[i]]
    return new_array

但我正在寻找一种纯粹的矢量化解决方案.

解决方法

使用索引数组索引另一个数组时,每个索引数组的形状应与输出数组的形状匹配.您希望列索引与inds匹配,并且您希望行索引与输出的行匹配,例如:
array([[0,[2,2]])

由于广播,您可以使用上面的单个列,因此您可以使用np.arange(3)[:,None]是垂直范围,因为None会插入新轴:

>>> np.arange(3)[:,None]
array([[0],[1],[2]])

最后,一起:

>>> a[np.arange(3)[:,None],inds]
array([[0,3],# a[0,1]]
       [6,# a[1,2]] 
       [0,9]])  # a[2,2]]

python 用函数名的字符串调用函数

python 用函数名的字符串调用函数

自己写代码遇到的小问题

def ppp():
    print(''***'')
a = ''ppp''

问:如何用字符串a调用ppp()?

a()是肯定不行的

此处使用eval() 可以将一行字符串转化为可执行代码

eval(a)()
output = ***

即可轻松解决

今天关于在Python中按数组索引调用函数python 数组索引的介绍到此结束,谢谢您的阅读,有关c# – 在Python中加载DLL文件和调用函数、Python Numpy 2D数组索引、python – 通过没有循环的2D索引数组索引2D numpy数组、python 用函数名的字符串调用函数等更多相关知识的信息可以在本站进行查询。

本文标签: