SlideShare a Scribd company logo
Boost.Pythonの有能性
Boost.python
目次自己紹介Pythonについて		PythonとはBoost::Pythonの使い方C++からPythonへPythonからC++へBoost::Pythonの有能性まとめ
自己紹介Twitter ID: fate_fox本名:安江 直樹職業:高校3年生主な言語:C ,C++ , Python etc… 興味がある分野:自然言語処理,人工知能,グリッドコンピューティング,クラウド,並列処理 etc….
今回の発表を提案してくださったのは、Bleis氏デス!このアイコン⇒
Pythonについて
Pythonとはなにか
撫子
というのは私の妄想です。
正しくはこちら ⇛
Pythonの歴史Python(パイソン)は、オランダ人のグイド・ヴァンロッサムが作ったオープンソースのプログラミング言語。オブジェクト指向スクリプト言語の一種であり、Perlとともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。Pythonは英語で爬虫類のニシキヘビの意味で、Python言語のマスコットやアイコンとして使われることがある。Pythonは汎用の高水準言語である。プログラマの生産性とコードの信頼性を重視して設計されており、核となるシンタックスおよびセマンティクスは必要最小限に抑えられている反面、利便性の高い大規模な標準ライブラリを備えている。Unicodeによる文字列操作をサポートしており、日本語処理も標準で可能である。 多くのプラットフォームをサポートしており(動作するプラットフォーム)、また、豊富なドキュメント、豊富なライブラリがあることから、産業界でも利用が増えつつある。….
By Wiki
要点を纏めると
Pythonを知らない人のためにPythonは覚えやすく使いやすい!覚えやすいように文法がシンプル!曖昧さをなくすためにインデントなどにうるさい!豊富なライブラリやモジュールで機能を拡張できる!Guidovan Rossum氏が開発したインタプリタ言語!ソースが読みやすい!他言語より予約語(31語)が少ない!「Python2.6より」
Pythonで有名な物Google App EnginenGoogleが提供するWebアプリケーション開発環境XenPythonが使われた1台で複数台のOSが稼働できる有名な仮想ソフトウェア(OCamlも使われてるらしい さすが関数型帝国!)MAYACGを作るアプリケーション 機能などの拡張にPythonを使用Zope/PloneWebアプリケーション鯖 Pythonで書かれてます。DjangoWebフレームワーク Zopeと似てる
それでは本題
Boost::Pythonの使い方
Boost::Pythonを使うには自分の環境では、 Boost-1.42.0 を利用してます。言い訳:1.46.0などでやろうとしたんですが、Boost自体がうまくビルドが、 できないのかわからないんですが 全然利用できなくて 1.42.0あたりが安定してる模様なのでお勧め(最新バージョンが一番いいんですがね)色々と言い訳を連ねたいですがこれ以上続けると ⇛
Boost.python
と,“なのは”さんからSLBあたりをブッパされそうな気がするのd(ry
はじめに
C++からPythonへC++で書かれた関数やクラスの資源をPythonの資源として利用するために、拡張モジュールとして、コンパイルする方法。
C++でBoost.Pythonをincludeする。C++で関数やクラスを書く。マクロを使ってその関数やクラスをラッピングする。コンパイルする(私はVCのコンパイラでコンパイルしました(真っ黒い画面で)).pydっていう未知の生命体が出てくる。その未知の生命体をC:\python27\DLLs に投下インタラクティブシェルを起動Import 利用できた!
 実践
// sample1.cpp //関数のラッピング#define BOOST_PYTHON_STATIC_LIB // Boost.Pythonライブラリを静的にリンクする#include <string>#include <boost/python.hpp>std::string hello_world(void){		return "Hellow, world!";}BOOST_PYTHON_MODULE(sample1) // sample1はpython拡張Moduleの名前になる{		// C++のhello_world関数を、" hello_world_python"という名前でPythonに公開するboost::python::def  ("hello_world_python", &hello_world);}
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import sample1>>> dir (sample1)['__doc__', '__file__', '__name__', '__package__', 'hello_world_python']>>> sample1.hello_world_python<Boost.Python.function object at 0x00E43990>>>> sample1.hello_world_python()'Hellow, world!'>>> print sample1.hello_world_python()Hellow, world!>>>
//  sample2.cpp  //クラスのラッピング#define BOOST_PYTHON_STATIC_LIB  / /  Boost.Pythonライブラリを静的にリンクする #include <boost/python.hpp> structCValue{  intgetValue(void) const { return value; }   void  setValue(int value) { this->value = value; }    int  value; }; BOOST_PYTHON_MODULE(sample2)  //  sample2はpython拡張モジュールの名前になる {   //  C++のCValueクラス(構造体)を、”PValue”という名前で pythonに公開する boost::python::class_<CValue>("PValue")     .def(“get”, &CValue::getValue) ;   //  getValueメンバ関数を、”get”という名前のメソッド として公開する .def("set", &CValue::setValue);   //  setValueメンバ関数を、”set”という名前のメソッド として公開する }
//  sample3.cpp  //C++のアクセサをPythonのプロパティに公開#define BOOST_PYTHON_STATIC_LIB  //  Boost.Pythonライブラリを静的にリンクする #include <boost/python.hpp> structCValue{ intgetValue(void) const { return value; }   void setValue(int value) { this->value = value; } int value; }; BOOST_PYTHON_MODULE(sample3) //  sample3は python拡張モジュールの名前になる { //  C++のCValueクラス(構造体)を、”PValue”という名前で pythonに公開する boost::python::class_<CValue>("PValue") //“value”プロパティは読み書き可 .add_property("value", &CValue::getValue, &CValue::setValue)   //“rvalue”プロパティは読み取り専用 .add_property("rvalue", &CValue::getValue);               }
PythonからC++へPythonのコード資源を直接C++のコード資源に投げ込みます。詳細的には実践で説明します。
実  践
//  sample4.cpp  //C++上でPythonインタプリタの実行#define BOOST_PYTHON_STATIC_LIB  //  Boost.Pythonライブラリを静的にリンクする #include <iostream> #include <boost/python.hpp> void c_plus_plus(void) {   std::cout << "C++" << std::endl; } int main() {   //  Pythonインタプリタを初期化する Py_Initialize();   //  "__main__"モジュールをインポートする boost::python::object module = boost::python::import("__main__");    //  "__main__"モジュールの名前空間でコードを実行する boost::python::object ns = module.attr("__dict__");   //   "cpp"という名前で Pythonのインタプリタから呼び出す ns["cpp"] = &c_plus_plus;   //  Pythonのインタプリタを実行する boost::python::exec(     "print('Hello, World!')\n"     "cpp() \n"     "value=2**20\n" , ns);   //  "__main__"モジュールの名前空間で定義した変数の値を取り出す int v = boost::python::extract<int>(ns["value"]);   std::cout << v << std::endl;   //  Pythonインタプリタの終了処理を行う Py_Finalize(); }
Boost::Pythonの有能性
C++から見たメリットC++で書かれた関数やクラスの資源をラッピングできる。拡張モジュールとしてファイルを出力できる。そのままPythonにimportできるから、Pythonへの実装が容易
Pythonから見たメリットC++のコードにそのままPythonのコードを書ける。C++上でPythonインタプリタが実行出来る。
 要点を     纏めると(2回目)
とても実用的!!⇑みんなの願望と夢
ということで
僕と契約してBoost.Pythonerになってよ!
ご清聴ありがとうございました!

More Related Content

PPTX
Boost.python
PDF
20170131 python3 6 PEP526
PDF
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
PDF
NumPyが物足りない人へのCython入門
PDF
Python パッケージの影響を歴史から理解してみよう!
PDF
PEP8を読んでみよう
PPTX
2017/12/21 虎の穴 Python勉強会
Boost.python
20170131 python3 6 PEP526
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
NumPyが物足りない人へのCython入門
Python パッケージの影響を歴史から理解してみよう!
PEP8を読んでみよう
2017/12/21 虎の穴 Python勉強会

What's hot (19)

PDF
Cython intro prelerease
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
PDF
Wrapping a C++ library with Cython
PPTX
Apilecture for 2014/02/22 at shannonlab
PDF
D言語にまだ入っていない新機能 (Dの日#2)
PPTX
Polyphony IO まとめ
PDF
C#勉強会
PDF
Pythonと型チェッカー
PDF
Cython ことはじめ
PDF
L-1グランプリ "D言語"
PDF
Python と型ヒント (Type Hints)
PPTX
数値計算のための Python + FPGA
PDF
Python入門
PDF
なぜ科学計算にはPythonか?
PDF
Goroutineと channelから はじめるgo言語
PDF
LLdeade Python Language Update
PDF
PyCon JP 2014 plone terada
ODP
Introduction of Python
PDF
Boost tour 1.60.0 merge
Cython intro prelerease
Python 機械学習プログラミング データ分析ライブラリー解説編
Wrapping a C++ library with Cython
Apilecture for 2014/02/22 at shannonlab
D言語にまだ入っていない新機能 (Dの日#2)
Polyphony IO まとめ
C#勉強会
Pythonと型チェッカー
Cython ことはじめ
L-1グランプリ "D言語"
Python と型ヒント (Type Hints)
数値計算のための Python + FPGA
Python入門
なぜ科学計算にはPythonか?
Goroutineと channelから はじめるgo言語
LLdeade Python Language Update
PyCon JP 2014 plone terada
Introduction of Python
Boost tour 1.60.0 merge
Ad

Similar to Boost.python (20)

PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
PDF
Pyconjp2014_implementations
PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
PPT
Python languageupdate (2004)
PDF
Boost.Flyweight
PPTX
Wacode5thでのpython講義資料
PDF
「Python言語」はじめの一歩 / First step of Python
DOCX
Boost勉強会 #10 ディスカッションまとめ
KEY
Pythonについて
PDF
PyPy 紹介
PDF
Introduction Pycon2010
PDF
Python physicalcomputing
PDF
Python Kyoto study
PDF
Boost tour 1_40_0
KEY
ひのきのぼうだけで全クリ目指す
PDF
Pythonで始めるDropboxAPI
PDF
Python & PyConJP 2014 Report
PDF
boost tour 1.48.0 all
KEY
Hello World Python featuring GAE
PPTX
開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython
次世代言語 Python による PyPy を使った次世代の処理系開発
Pyconjp2014_implementations
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Python languageupdate (2004)
Boost.Flyweight
Wacode5thでのpython講義資料
「Python言語」はじめの一歩 / First step of Python
Boost勉強会 #10 ディスカッションまとめ
Pythonについて
PyPy 紹介
Introduction Pycon2010
Python physicalcomputing
Python Kyoto study
Boost tour 1_40_0
ひのきのぼうだけで全クリ目指す
Pythonで始めるDropboxAPI
Python & PyConJP 2014 Report
boost tour 1.48.0 all
Hello World Python featuring GAE
開発環境構築からはじめるPython VisualStudio Codeとpipenvで始めるpython
Ad

Boost.python