首页 > 后端开发 > 正文

python与c++混合编程如何入门

2024-02-27 09:13:30 | 我爱编程网

今天我爱编程网小编整理了python与c++混合编程如何入门相关信息,希望在这方面能够更好的大家。

本文目录一览:

python与c++混合编程如何入门

Node.js 与 Python 混合编程

有一个需求是做一个基于 Node.js 的程序化股票交易功能。

既然 Python 已经有现成的 easytrader、easyquotation ,那就不要再去重复造轮子。

主要使用 python-shell 这个库

python与c++混合编程如何入门

python与c++混合编程如何入门

派桑和c/c++实际上是不同的工具,一个是斧头,一个是菜刀,各有各的用途。非要把让菜刀能砍柴,让斧头能切菜,这种努力有无必要,值得考虑。

派桑常用剧本,噜苏,速度慢,不严谨,但有它的便利,例如它有 list, tuple, 之类的东西。

混合编程 常用于 提高 派桑 速度。

常用 方法 是(1)包含 Python.h 文件头 (2)定义 派桑 的 各种对象 为 各种 c 结构

(3)派桑 的 各种对象用指针,名字用 Py 或 _Py大头 动态分配 在 heap (4)用函数跟踪统计 各种对象结构 的个数变化,即时 释放内存(5)及时处理 派桑 exception

(6) 输出为派桑的数据格式。

我没有合起来用过,不过基本套路如此。

python与c++混合编程如何入门

如何实现Perl与Python混合编程

边举栗子便说明:

1. Perl 使用 Python 中定义的变量

#!/usr/bin/perl -w

use strict;

use Inline 'Python' => <<'END';

a = 1

END

print $a;

首先从这个栗子我们可以学习Inline::Python的程序布局:一个典型的用法是把Python代码以

use Inline 'Python' => <<'END';

END

这样的Perl多行字符串的形式包裹。当然包裹Python代码的方法还有很多种,详见Inline::Python的文档。

然而不幸的是,这个栗子是行不通的。我们继续往下看。

2 Perl 使用 Python 中定义的函数

代码:

#!/usr/bin/perl -w

use strict;

use Inline 'Python' => <<'END';

def Foo(*args):

print "==Python Def=="

for a in args:

print type(a)

print a

END

Foo(1); #[1]

Foo('Hello'); #[2]

Foo('Hello','World'); #[3]

Foo(('Hello','World')); #[4]

Foo(['Hello','World']); #[5]

Foo({'Hello' => 1,'World' => 2}); #[6]

这段代码可以正常运行。在Python区块中定义的函数在Perl中可见。最为关心的是参数传递问题,逐条分析:

#[1] Perl 传入数字,Python也会理解为数字。

#[2] Perl 传入STRING类型,Python会理解为str类型。

#[3] 函数支持多个参数。

#[4] Perl 传入ARRAY值(即@)类型,Python会理解为多个参数。由于在Perl中,HASH值类型(即%)实际上是一种特殊的ARRAY,Python的处理方式应相同。

#[5] Perl 传入ARRAY的引用,Python会理解为list。

#[6] Perl 传入HASH的引用,Python会理解为dict。

返回值的问题同理。

3 传递function引用

有时候需要向Python传递“函数指针”以实现回调。Inline::Python已经照顾到了这种需求:

#!/usr/bin/perl -w

use strict;

use Inline 'Python' => <<'END';

def Foo(func):

print type(func)

func({'Hello' : 1,'World' : 2})

END

use Data::Dumper;

sub Bar {

print Dumper shift;

}

Foo(\&Bar);

它的运行结果:

$VAR1 = {

'World' => 2,

'Hello' => 1

};

Inline::Python为函数引用建立了一个类型_perl_sub。在Python中,这个类型的值可以当成函数对象来使用。

顺便这个例子验证了Python的dict会被Perl理解为HASH引用。

能再复杂一点么?找个对象怎么样?

4 例化Python中定义的类

作为面向对象的语言,Python中很多功能都是以提供类的方式实现的。

看代码:

#!/usr/bin/perl -w

use strict;

use Inline 'Python' => <<'END';

class Bar:

def __init__(self,p):

self.p = p

def foo(self,q):

print self.p + q

END

my $bar = Bar->new(1);

$bar->foo(2);

这个例子说明,如果在Python区块中定义了类Bar,那么在Perl环境中就相当于有了一个package Bar。Inline::Python会自动提供一个构造函数new。

说到这里基本的问题差不多都解决了。小伙伴们可以利用Inline::Python,足不出户,在Perl中就可以调用各种稀奇古怪的第三方Python库了。

能不能再复杂点,都OO了……

5 继承Python中定义的类

写这样的代码也不难:

#!/usr/bin/perl -w

use strict;

use Inline 'Python' => <<'END';

class Bar:

def __init__(self,p):

self.p = p

def foo(self,q):

print self.p + q

END

package Foo;

our @ISA = ('Bar');

sub new {

my $class = shift;

my $p = shift;

my $self = $class->SUPER::new($p);

return bless $self,$class;

}

sub bar {

my $self = shift;

my $q = shift;

print $self->{p} - $q;

}

1;

package main;

my $foo = Foo->new(1);

$foo->foo(2);

$foo->bar(3);

几个要点需要注意:

1) 用Perl内置的@ISA继承Python提供的类。我爱编程网

2) 用SUPER保留字访问父对象,别忘了和类名bless在一起。

3) 如果父对象定义了变量,用HASH key的方法能访问到。也就是说,Python里的 self.p 相当于 Perl中的 $self->{p}

以上就是我爱编程网小编给大家带来的python与c++混合编程如何入门全部内容,希望对大家有所帮助!
与“python与c++混合编程如何入门”相关推荐