GVKun编程网logo

将Python列表传递给嵌入式Rust函数(python函数传入一个列表)

22

想了解将Python列表传递给嵌入式Rust函数的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python函数传入一个列表的相关问题,此外,我们还将为您介绍关于jquery–将json列表

想了解将Python列表传递给嵌入式Rust函数的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于python函数传入一个列表的相关问题,此外,我们还将为您介绍关于jquery – 将json列表传递给MVC 3、Python + C/C++ 嵌入式编程:Qt向Python传递数组、python列表查询、list函数、元组、templates – 将Twig块传递给嵌入式模板的新知识。

本文目录一览:

将Python列表传递给嵌入式Rust函数(python函数传入一个列表)

将Python列表传递给嵌入式Rust函数(python函数传入一个列表)

我正在学习如何在Python中嵌入Rust函数,并且如果我的输入是ints而不是list ,一切都可以正常工作。

如果我的lib.rs文件是:

#[no_mangle]pub extern fn my_func(x: i32, y: i32) -> i32 {    return x + y;}

我可以这样使用:

In [1]: from ctypes import cdllIn [2]: lib = cdll.LoadLibrary("/home/user/RustStuff/embed/target/release/libembed.so")In [3]: lib.my_func(5,6)Out[3]: 11

但是,如果我更改lib.rs为:

#[no_mangle]pub extern fn my_func(my_vec: Vec<i32>) -> i32 {    let mut my_sum = 0;    for i in my_vec {        my_sum += i;    }    return my_sum;}

我不能再在Python中使用它(此编译良好):

In [1]: from ctypes import cdllIn [2]: lib = cdll.LoadLibrary("/home/user/RustStuff/embed/target/release/libembed.so")In [3]: lib.my_func([2,3,4])---------------------------------------------------------------------------ArgumentError                             Traceback (most recent call last)<ipython-input-3-454ffc5ba9dd> in <module>()----> 1 lib.my_func([2,3,4])ArgumentError: argument 1: <type ''exceptions.TypeError''>: Don''t know how to convert parameter 1

原因,尽管我可以这样做是因为Pythonlist和RustVec都是 动态数组 ,但显然我在这里缺少了一些东西。

为什么我的尝试不起作用?我该怎么做才能解决?

答案1

小编典典

不要这样做:

#[no_mangle]pub extern fn my_func(my_vec: Vec<i32>) -> i32 { ... }

基本上,您 从不 希望接受或返回extern函数中的任意Rust对象,仅是Repr。相反,您应该接受C可以表示的内容。正如6502所说的,对于这种特殊情况,最好的主意是接受一个指针和一个长度。

Vec从概念上讲,Rust的指针指向数据,计数 和容量
。您可以Vec通过添加或删除对象来修改,这可能导致重新分配。这是双重不利的,因为Python和Rust可能使用彼此不兼容的不同分配器。分段错误就是这样!你真的想要
切片

相反,在Rust方面执行以下操作:

extern crate libc;use libc::{size_t,int32_t};use std::slice;#[no_mangle]pub extern fn my_func(data: *const int32_t, length: size_t) -> int32_t {    let nums = unsafe { slice::from_raw_parts(data, length as usize) };    nums.iter().fold(0, |acc, i| acc + i)}

也就是说,您正在使用保证匹配的C类型,然后将指针和长度转换为Rust知道如何处理的东西。

我不是Pythonista,但是这个经过拼凑的代码(在“如何使用ctypes将Python列表转换为C数组?”的帮助下)似乎可以与上面的Rust一起使用:

import ctypeslib = ctypes.cdll.LoadLibrary("./target/debug/libpython.dylib")lib.my_func.argtypes = (ctypes.POINTER(ctypes.c_int32), ctypes.c_size_t)list_to_sum = [1,2,3,4]c_array = (ctypes.c_int32 * len(list_to_sum))(*list_to_sum)print lib.my_func(c_array, len(list_to_sum))

当然,您可能希望将其包装起来以使其对您的代码调用者更好。

jquery – 将json列表传递给MVC 3

jquery – 将json列表传递给MVC 3

@H_301_2@
我试图用Ajax将它提交给MVC3控制器:

var params = {
        'productId': productId,'list': []
    };

    $.each($('.specificationId'),function () {
        var specId = $(this).attr('id').replace('specification_','');

        var specification = {
            specificationId: specId,articleId: $('#articleid_' + specId).attr('value'),price: $('#price_' + specId).attr('value'),stock: $('#stock_' + specId).attr('value'),stockCount: $('#stockcount_' + specId).attr('value'),weight: $('#weight_' + specId).attr('value'),visible: $('#visible_' + specId).attr('checked')
        };

        params.list.add(specification);
    });

    console.log(params);
    //all values are parsed fine here,shows an array with json objects

    $.ajax({
        type: "POST",url: "/Admin/Product/Save/",data: params,success: function () { alert('done'); }
    });

现在这必须像这样去控制器:

[HttpPost]
    public Boolean Save(Int32 productId,Object[] specifications)
    {

        return true;
    }

但是Object []不起作用,返回null,我尝试了各种各样的东西,比如模型列表等,但是它会保持为null.

如何解决这个问题?

@H_301_2@

解决方法

ASP.NET MVC 3包含内置的JSON模型绑定.

因此,创建与您尝试提交的JSON匹配的简单POCO:

public class ProductJsonModel
{
   public int ProductId { get; set; }
   public ProductSpecificationjsonModel[] @List { get; set; }
}

public class ProductSpecificationjsonModel
{
   public int SpecificationId { get; set; }
   public int ArticleId { get; set; }
   public double Price { get; set; }
   public int Stock { get; set; }
   public int StockCount { get; set; }
   public int Weight { get; set; }
   public bool Visible { get; set; }
}

然后在你的行动中接受:

[HttpPost]
public Boolean Save(ProductJsonModel model)

只要JSON对象中的属性名称与POCO中的属性名称匹配,MVC就会为您绑定.

此外 – 您应该使用.stringify或类似的东西序列化JSON,并相应地设置$.ajax对象的contentType.

@H_301_2@ @H_301_2@
@H_301_2@
@H_301_2@

总结

以上是小编为你收集整理的jquery – 将json列表传递给MVC 3全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

jQuery相关文章

Jquery属性选择器(同时匹配多个条件,与或非)(附样例)
1. 前言为了处理除了两项不符合条件外的选择,需要用到jquery选择器的多个条件匹配来处理,然后整理了一下相关的与或非的条件及其组合。作为笔记记录。2. 代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
jquery的$().each,$.each 遍历对象和数组
原文链接 http://www.frontopen.com/1394.html在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法。两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点。$().each,对于这个方法,在dom处理上面用的较多。如果页面有多个input标签类型为checkbox,对于这时用$().each来处理多个checkbo...
[JQ权威指南]动画表格排序插件TableSort
转自:https://yq.aliyun.com/articles/20669 <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript" src="js/jquery-1.9.0.min.js"><
[JQ权威指南]使用JQuery调用XML实现无刷新即时聊天
HTML:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>使用JQuery调用XML
[JQ权威指南]类级别插件开发
(1)功能描述:新增两个类级别的全局函数,分别用于计算两数之和与两数之差,并将结果返回调用的页面中。 (2)JS/// <reference path="jquery-1.4.2-vsdoc.js"/>/// <reference path="jquery-1.4.2.js"/>/*--------------------------------------------------------
[JQ权威指南]validate验证插件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>validate验证插件</tit
[JQ权威指南]SlideDown()与SlideUp()方法实现滑动效果
SildeDown()与slideUp()方法 body{font-size:13px} .divFrame{width:86px; border:solid 1px #666} .divFrame.divTitle{ padding:5px; background-color:#eee} .divFrame.divContent{padding:8px} .divFrame.div
[JQ权威指南]animate() 方法
定义和用法 animate() 方法执行 CSS 属性集的自定义动画。 该方法通过CSS样式将元素从一个状态改变为另一个状态。CSS属性值是逐渐改变的,这样就可以创建动画效果。 只有数字值可创建动画(比如 “margin:30px”)。字符串值无法创建动画(比如 “background-color:red”)。 注释:使用 “+=” 或 “-=” 来创建相对动画(relative anima
  • • Jquery属性选择器(同时匹配多个条件,与
  • • jquery的$().each,$.each 遍历对象和数
  • • [JQ权威指南]动画表格排序插件TableSor
  • • [JQ权威指南]使用JQuery调用XML实现无刷
  • • [JQ权威指南]类级别插件开发
  • • [JQ权威指南]validate验证插件
  • • [JQ权威指南]SlideDown()与SlideUp()方
  • • [JQ权威指南]animate() 方法
  • • [JQ权威指南]对象级别插件的开发
  • • [JQ权威指南]JQuery操作XML数据
HTMLreactjsCSSNode.jsangulartypescriptvue.jsreact-natispringkotlinAPIseleniumtensorflowbashangularJSexpressxcodematplotlibflaskHibernatedictionaryrailscocoswebnpmreact-hookmongoosegoogle-appformswpfRestwebpackunit-testihttpclassfileNext.jsJsHTML5bootstrap-

Python + C/C++ 嵌入式编程:Qt向Python传递数组

Python + C/C++ 嵌入式编程:Qt向Python传递数组

编程环境Qt5.7.1 MSVC版,VS2013,python3.7.1,我使用Qt像python传递字节数组,Qt和python代码如下,当多次点击按钮多次调用(第二次调用时)python程序时,提示程序异常结束。


Qt程序:
INCLUDEPATH +=D:/Python3.7.3/include
INCLUDEPATH += D:/Python3.7.3/Lib/site-packages/numpy/core/include
LIBS += -LD:/Python3.7.3/libs/ -lpython37
int init_numpy()
{
import_array();
}
void MainWindow::on_ButtonNumpy_clicked()
{
Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
init_numpy();
if (!Py_IsInitialized())
{
printf("初始化失败!");
return ;
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(''./'')");//这一步很重要,修改Python路径
PyObject pModule = PyImport_ImportModule("demo2");//这里是要调用的文件名hello.py
PyObject
pDict    = PyModule_GetDict(pModule);
if (pModule == NULL)
{
printf("Can''t open python file\n");
return ;
}
//PyObject pFunc = PyObject_GetAttrString(pModule, "szSecTest");
double CArrays[3][3] = {{1.3, 2.4, 5.6}, {4.5, 7.8, 8.9}, {1.7, 0.4, 0.8}};
qDebug()<<"rrr";
npy_intp Dims[2] = {3, 3};
//生成包含这个多维数组的PyObject对象,使用PyArray_SimpleNewFromData函数,第一个参数2表示维度,第二个为维度数组Dims,第三个参数指出数组的类型,第四个参数为数组
PyObject
PyArray  = PyArray_SimpleNewFromData(2, Dims, NPY_DOUBLE, CArrays);
PyObject ArgArray = PyTuple_New(1);
PyTuple_SetItem(ArgArray, 0, PyArray);
PyObject
pFunc = PyDict_GetItemString(pDict , "Test");//这里是要调用的函数名
// PyObject * pFunc = PyObject_GetAttrString(pModule , "Test");
if (!pFunc){
printf("Get function hello failed\n");
return ;
}  PyObject *pRrturn = PyObject_CallObject(pFunc, ArgArray);   qDebug()<<pRrturn;    PyArray = NULL;   ArgArray = NULL;   pRrturn = NULL;   pModule=NULL;   pDict=NULL;   Py_Finalize();
}
python程序:import numpy as np
def Test(test):
print (test.shape,test[0], test[1],test[2])
报错:
Starting F:\Qt\build-TestNumpy-Desktop_Qt_5_7_1_MSVC2013_32bit-Release\release\TestNumpy.exe...
rrr
(3, 3) [1.3 2.4 5.6] [4.5 7.8 8.9] [1.7 0.4 0.8]
0x66937c44
D:\搜狗输入法\SogouInput\Components\程序异常结束。
F:\Qt\build-TestNumpy-Desktop_Qt_5_7_1_MSVC2013_32bit-Release\release\TestNumpy.exe crashed.

python列表查询、list函数、元组

python列表查询、list函数、元组

查:list.index()返回查找到的坐标

  • print(list1.index(5));
    in和not in可以查找某个元素是否存在列表内,返回布尔类型
    print(1 in list1);
    print(1 not in list1);
  • 嵌套列表
  • list3=[[''张飞'',''刘备'',''关羽''],[''zhangfei'',''liubei'',''guanyu'']];
    print(list3[0]);#读取嵌套列表内的数据,用过下标提取
    print(list3[1]);
    print(list3[1][1]);

list函数

  • #len(list) 列表元素的个数
    print(len(list3));#读取列表长度
    for i in range(len(list2)):#遍历列表长度,返回下标
        print(i);
    for i in range(len(list2)):  # 遍历列表长度,返回列表内的数据
        print(list2[i]);
  • 列表中最大值,最小值list1.max(),list1.min()
  • print(max(list2));
    print(min(list2));
    print(max([''a'',''B'',''c'']))#返回c
    print(max([''aac'',''aab'',''abc'',''aca'']))#第一位比较完,比较第二位大小
  • list(seq)将元组转换成列表
  • print((''1'',''3'',''33'',''ffe''))
    print(list((''1'',''3'',''33'',''ffe'')))
  • everse()反向列表中的元素
  • list1=[''a'',''b'',''c'',''d'',''e'']
    list1.reverse()#返回列表的倒叙
    print(list1)
  • sort([func])排序,默认升序
  • list2=[5,3,6,2,8]
    list2.sort()#返回从小到大排序
    print(list2)
  • clear()请空列表
  • list3=[''1'',''2'',''3'',''4'']
    list3.clear()#返回空列表
    print(list3)
  • copy()复制列表,在内存中又开辟了一个空间;通过等号复制副本,在内存中指向原来的地址
  • list1=[''a'',''b'',''c'',''d'',''e''];
    list2=[5,3,6,2,8];
    list2=list1.copy();
    print(list2)
  • eval()将元组、字典、列表类型的字符串转为元组、字典、列表,可以把list,tuple,dict和string相互转化
  • a="[[1,2], [3,4], [5,6]]";#字符串转换成列表
    m=eval(a);
    print(type(m));
    print(m);
  • a="{''a'':''A'',''b'':''B''}";#字符串转换成字典
    m=eval(a);
    print(type(m));
    print(m);
  • a="(''a'',''b'',''c'')";#字符串转换成元组
    m=eval(a)
    print(type(m));
    print(m);

小练习

  • 定义一个列表,让用户动态输入5个值,遍历输出列表的值
  • nums=[]
    for i in range(5):
        nums.append(input(''请输入:''))
    else:
        print(''输入完毕!'')
    print(nums);

元组

  • 元组与列表类似,但是元组的元素不能修改
  • c=(2,3,3,''tom'',''OK'',False)
    d=(''张飞'',''刘备'')
    c=c+d;
    print( c[:].index(''张飞''))#访问,使用切片
    print(c[:4])
    print(c[::-1])
    a=(1,2);
    b=(3,4);
    c=a+b#运算符 + * in not in
    print(c);
    
    d=a*2
    print(d)
  • 通讯录管理系统

  • print("=======通讯录管理系统=======")
    print("1.增加姓名和手机")
    print("2.删除姓名")
    print("3.修改手机")
    print("4.查询所有用户")
    print("5.根据姓名查找手机号")
    print("6.退出")
    print("============================")
    name_list=[]
    phone_list=[]
    while True:
        input_val=int(input(''请输入操作项:''))
        if input_val in range(1,7):
            if input_val==1:
                name_list.append(input(''请输入姓名:''))
                phone_list.append(input(''请输入电话:''))
                print(''姓名和电话:'',name_list,phone_list)
                sign=input(''是否继续:y/n'')
                if sign==''n'':
                    break
                else:
                    continue
            elif input_val==2:
                print(name_list)
                sign=input(''是否删除姓名:y/n'')
                if sign==''y'':
                    del name_list[:]
                    print(''已删除!'')
                    sign=input("是否退出y/n")
                    if sign==''y'':
                        break
                    else:
                        continue
                else:
                    print(''未进行删除!'')
            elif input_val==3:
                phone=(input(''请输入需要修改的手机:''))
                if phone not in phone_list:
                    print(''请重新输入电话!'')
                else:
                    phone_list[(phone_list).index(phone)]=(input(''请输入修改后的手机:''))
                    print(''已成功修改手机!'')
                sign = input("是否退出y / n")
                if sign == ''y'':
                    break
                else:
                    continue
            elif input_val==4:
                print(''所有用户:'',name_list[:])
            elif input_val==5:
                names_reac=input(''请输入姓名:'')
                if names_reac in name_list[:]:
                    print(names_reac,''的手机为'',phone_list[name_list.index(names_reac)])
                    sign=input(''是否继续y/n'')
                    if sign==''n'':
                        break
                    else:
                        continue
                else:
                    print(''未查询到该人!'')
            else:
                break
        else:
            print("输入有误!")
    print("谢谢使用!")

templates – 将Twig块传递给嵌入式模板

templates – 将Twig块传递给嵌入式模板

我在一个纤薄的框架应用程序中使用twig模板.我有一个模板page.phtml,它对一组数据进行分页,并有几个子块,用于覆盖每个元素细节,如分页用户,事件,订单等.

page.phtml

<div>
    {% block block1 %}default content{% endblock %}
    <ul>
    ...
    </ul>
    {% block block2 %}{% endblock %}
</div>

我有一个event.phtml模板,它嵌入了page.phtml并在页面中添加了一些其他内容;它还会覆盖默认页面的block1内容

event.phtml

<html>
    <body>
        <h1>Event Page</h1>
        {% embed "page.phtml" %}
            {% block block1 %}event page content{% endblock %}
        {% endembed %}
    </body>
</html>

我有一个自定义事件页面,只需要修改一些事件页面的块,所以我像这样扩展了event.phtml

custom_event.phtml

{% extends "event.phtml" %}
{% block block2 %}overridden value{% endblock %}

并期望block2的重写内容显示在父模板嵌入的page.phtml模板中.我可以在父模板中输出block2的值,它就在那里,但在嵌入式模板中却没有.我尝试在嵌入的event.phtml中显式传递块,就像这样

{%embed "page.phtml" %}
    {% block block2 %}{{parent()}}{% endblock %}
    ...
{% endembed %}

但这并没有产生任何影响.如何从custom_event.phtml模板中一直通过扩展的event.phtml模板和嵌入的page.phtml模板获取重写的block2?

解决方法

你不能做这个.

{%embed%}在技术上定义了一个新的(匿名)模板,它扩展了嵌入式模板(这就是它可以覆盖块的方式)并被包含在当前的模板中.这实际上只是{%include%}和{%extends%}的语法糖,以避免必须将此部分模板存储在自己的文件中并仅包含一次.子模板不能扩展Twig包含.只有当前模板的块可用于扩展.并且event.phtml没有任何块.

关于将Python列表传递给嵌入式Rust函数python函数传入一个列表的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于jquery – 将json列表传递给MVC 3、Python + C/C++ 嵌入式编程:Qt向Python传递数组、python列表查询、list函数、元组、templates – 将Twig块传递给嵌入式模板等相关内容,可以在本站寻找。

本文标签: