SlideShare a Scribd company logo
1 of 39
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 Enginen Googleが提供するWebアプリケーション開発環境 Xen Pythonが使われた1台で複数台のOSが稼働できる有名な仮想ソフトウェア(OCamlも使われてるらしい さすが関数型帝国!) MAYA CGを作るアプリケーション 機能などの拡張にPythonを使用 Zope/Plone Webアプリケーション鯖 Pythonで書かれてます。 Django Webフレームワーク Zopeと似てる
それでは本題
Boost::Pythonの使い方
Boost::Pythonを使うには 自分の環境では、 Boost-1.42.0 を利用してます。 言い訳:1.46.0などでやろうとしたんですが、Boost自体がうまくビルドが、  できないのかわからないんですが 全然利用できなくて 1.42.0あたりが安定してる模様なのでお勧め(最新バージョンが一番いいんですがね) 色々と言い訳を連ねたいですがこれ以上続けると ⇛
と,“なのは”さんからSLBあたりをブッパされそうな気がするのd(ry
はじめに
C++からPythonへ C++で書かれた関数やクラスの資源をPythonの資源 として利用するために、 拡張モジュールとして、 コンパイルする方法。
C++でBoost.Pythonをincludeする。 C++で関数やクラスを書く。 マクロを使ってその関数やクラスをラッピングする。 コンパイルする(私はVCのコンパイラでコンパイルしました(真っ黒い画面で)) .pydっていう未知の生命体が出てくる。 その未知の生命体をC:ython27LLs に投下 インタラクティブシェルを起動 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 win32 Type "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!')"      "cpp() "      "value=2**20" , 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

What's hot

PEP8を読んでみよう
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう2bo 2bo
 
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会虎の穴 開発室
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Etsuji Nakai
 
Wrapping a C++ library with Cython
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cythonfuzzysphere
 
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabApilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabYutaka Kobayshi
 
D言語にまだ入っていない新機能 (Dの日#2)
D言語にまだ入っていない新機能 (Dの日#2)D言語にまだ入っていない新機能 (Dの日#2)
D言語にまだ入っていない新機能 (Dの日#2)tom-tan
 
Polyphony IO まとめ
Polyphony IO まとめPolyphony IO まとめ
Polyphony IO まとめryos36
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカーTetsuya Morimoto
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめgion_XY
 
L-1グランプリ "D言語"
L-1グランプリ "D言語"L-1グランプリ "D言語"
L-1グランプリ "D言語"det coder
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Tetsuya Morimoto
 
数値計算のための Python + FPGA
数値計算のための Python + FPGA数値計算のための Python + FPGA
数値計算のための Python + FPGAryos36
 
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?Aki Ariga
 
Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語Takuya Ueda
 
LLdeade Python Language Update
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language UpdateAtsushi Shibata
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone teradaManabu Terada
 

What's hot (20)

PEP8を読んでみよう
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう
 
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編Python 機械学習プログラミング データ分析ライブラリー解説編
Python 機械学習プログラミング データ分析ライブラリー解説編
 
Wrapping a C++ library with Cython
Wrapping a C++ library with CythonWrapping a C++ library with Cython
Wrapping a C++ library with Cython
 
Apilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlabApilecture for 2014/02/22 at shannonlab
Apilecture for 2014/02/22 at shannonlab
 
D言語にまだ入っていない新機能 (Dの日#2)
D言語にまだ入っていない新機能 (Dの日#2)D言語にまだ入っていない新機能 (Dの日#2)
D言語にまだ入っていない新機能 (Dの日#2)
 
Polyphony IO まとめ
Polyphony IO まとめPolyphony IO まとめ
Polyphony IO まとめ
 
C#勉強会
C#勉強会C#勉強会
C#勉強会
 
Pythonと型チェッカー
Pythonと型チェッカーPythonと型チェッカー
Pythonと型チェッカー
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
 
L-1グランプリ "D言語"
L-1グランプリ "D言語"L-1グランプリ "D言語"
L-1グランプリ "D言語"
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
数値計算のための Python + FPGA
数値計算のための Python + FPGA数値計算のための Python + FPGA
数値計算のための Python + FPGA
 
Python入門
Python入門Python入門
Python入門
 
なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?なぜ科学計算にはPythonか?
なぜ科学計算にはPythonか?
 
Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語
 
LLdeade Python Language Update
LLdeade Python Language UpdateLLdeade Python Language Update
LLdeade Python Language Update
 
PyCon JP 2014 plone terada
PyCon JP 2014 plone teradaPyCon JP 2014 plone terada
PyCon JP 2014 plone terada
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 

Similar to Boost.python

Python 学習教材 (~299ページ)
Python 学習教材 (~299ページ)Python 学習教材 (~299ページ)
Python 学習教材 (~299ページ)Jun MITANI
 
.NETの自作ツール公開手段
.NETの自作ツール公開手段.NETの自作ツール公開手段
.NETの自作ツール公開手段Pierre3 小林
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Yasutomo Kawanishi
 
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) kunihikokaneko1
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
PostgreSQLとpython
PostgreSQLとpythonPostgreSQLとpython
PostgreSQLとpythonSoudai Sone
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
 
PythonでPodcastを聴く
PythonでPodcastを聴くPythonでPodcastを聴く
PythonでPodcastを聴くMasato Fujitake
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Springanyakichi
 
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」Takashi Ogura
 
rpi_handson_2.5
rpi_handson_2.5rpi_handson_2.5
rpi_handson_2.5teruyaono1
 
最近思った機械学習(PyTorch)のベストプラクティス
最近思った機械学習(PyTorch)のベストプラクティス最近思った機械学習(PyTorch)のベストプラクティス
最近思った機械学習(PyTorch)のベストプラクティスMasato Fujitake
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用Yasutomo Kawanishi
 

Similar to Boost.python (20)

Python 学習教材 (~299ページ)
Python 学習教材 (~299ページ)Python 学習教材 (~299ページ)
Python 学習教材 (~299ページ)
 
.NETの自作ツール公開手段
.NETの自作ツール公開手段.NETの自作ツール公開手段
.NETの自作ツール公開手段
 
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
osakapy 2014.05 LT
osakapy 2014.05 LTosakapy 2014.05 LT
osakapy 2014.05 LT
 
Python の基本
Python の基本Python の基本
Python の基本
 
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列) cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
cs-10. Python の基礎(オブジェクト,メソッド,引数,文字列)
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
Study3 boost
Study3 boostStudy3 boost
Study3 boost
 
PostgreSQLとpython
PostgreSQLとpythonPostgreSQLとpython
PostgreSQLとpython
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
PythonでPodcastを聴く
PythonでPodcastを聴くPythonでPodcastを聴く
PythonでPodcastを聴く
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
 
Django_fukuoka
Django_fukuokaDjango_fukuoka
Django_fukuoka
 
Django_Fukuoka
Django_FukuokaDjango_Fukuoka
Django_Fukuoka
 
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
RoboticsとC++@歌舞伎座.tech#8「C++初心者会」
 
rpi_handson_2.5
rpi_handson_2.5rpi_handson_2.5
rpi_handson_2.5
 
最近思った機械学習(PyTorch)のベストプラクティス
最近思った機械学習(PyTorch)のベストプラクティス最近思った機械学習(PyTorch)のベストプラクティス
最近思った機械学習(PyTorch)のベストプラクティス
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用
 

Boost.python