如果您想了解在Python中按数组索引调用函数和python数组索引的知识,那么本篇文章将是您的不二之选。我们将深入剖析在Python中按数组索引调用函数的各个方面,并为您解答python数组索引的疑
如果您想了解在Python中按数组索引调用函数和python 数组索引的知识,那么本篇文章将是您的不二之选。我们将深入剖析在Python中按数组索引调用函数的各个方面,并为您解答python 数组索引的疑在这篇文章中,我们将为您介绍在Python中按数组索引调用函数的相关知识,同时也会详细的解释python 数组索引的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- 在Python中按数组索引调用函数(python 数组索引)
- c# – 在Python中加载DLL文件和调用函数
- Python Numpy 2D数组索引
- python – 通过没有循环的2D索引数组索引2D numpy数组
- 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文件和调用函数
我已经尝试了很多教程,但仍然无法弄清楚它是如何工作的.
这是我的类导出为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的新手.
有谁可以帮助我吗?
如果您能为我提供源代码教程,我将非常感激.
解决方法
如果由于某种原因必须与C#库接口,您可能需要考虑尝试IronPython(http://ironpython.net/),这是在.NET框架上运行的Python,可以完全访问CLR.上面的注释表明暴露COM接口也可以工作.
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数组
例如:
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
但我正在寻找一种纯粹的矢量化解决方案.
解决方法
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 用函数名的字符串调用函数
自己写代码遇到的小问题
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 用函数名的字符串调用函数等更多相关知识的信息可以在本站进行查询。
本文标签: