锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩黄色一区二区,免费欧美日韩,国产日韩欧美一区在线 http://www.shnenglu.com/Squirrel/category/1771.html濮嬫湁閬擄紝閬撶敓鏃剁┖銆傛椂絀猴紝緙栫▼涔嬮槾闃熾備笉寰楅亾鑰呭け鏃剁┖錛屽緱閬撹呮椂絀虹泩浣欎互瀹屽伐銆傚叾鏈夊紓涔庯紵zh-cnMon, 19 May 2008 14:47:12 GMTMon, 19 May 2008 14:47:12 GMT60[杞澆]鐢˙oost.Python鏋勫緩娣峰悎緋葷粺 http://www.shnenglu.com/Squirrel/archive/2006/05/15/7193.htmlSquirrelSquirrelMon, 15 May 2006 07:44:00 GMThttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7193.htmlhttp://www.shnenglu.com/Squirrel/comments/7193.htmlhttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7193.html#Feedback2http://www.shnenglu.com/Squirrel/comments/commentRss/7193.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/7193.html

鐩綍

鎽樿

Boost錛嶱ython鏄竴涓紑婧愮殑C++紼嬪簭搴擄紝鎻愪緵綾諱技IDL鐨勬帴鍙f潵鎶奀++綾誨拰鍑芥暟緇戝畾鍒癙ython銆傚熷姪浜嶤++寮哄ぇ鐨勭紪璇戞椂鍐呯渷(introspection)鑳藉姏鍜屾渶鏂扮殑鍏冪紪紼?metaprogramming)鎶鏈紝瀹冨畬鍏ㄧ敤C++鏉ュ疄鐜幫紝鑰屼笉鐢ㄥ紩鍏ユ柊鐨勮娉曘侭oost.Python涓板瘜鐨勭壒鎬у拰楂樼駭鎺ュ彛浣夸粠搴曞眰璧鋒寜娣峰悎緋葷粺鐨勬柟寮忚璁$粍浠舵垚涓哄彲鑳斤紝浠庤屼嬌紼嬪簭鍛樺彲浠ヨ交鏉懼拰榪炶瘡鐨勫悓鏃朵嬌鐢–++楂樻晥鐨勭紪璇戞椂澶氭佸拰Python鏋佸叾鏂逛究鐨勮繍琛屾椂澶氭併?/p>

綆浠?/a>

浣滀負涓ら棬璇█錛宲ython鍜孋++鍦ㄥ緢澶氭柟闈笉涓鏍楓侰++琚紪璇戜負鏈哄櫒鐮侊紝python琚В閲?interpreted)鎵ц銆侾ython鐨勫姩鎬佺被鍨?type)緋葷粺緇忓父琚涓烘槸鐏墊椿鎬х殑鍩虹錛孋++鐨勯潤鎬佺被鍨嬫槸鏁堢巼鐨勫熀鐭熾侰++鏈夊鏉傝壈娣辯殑緙栬瘧鏃跺厓璇█(meta-language)錛岃屽湪python閲岋紝瀹為檯涓婁竴鍒囬兘鍦ㄨ繍琛屾椂鍙戠敓銆傜劧鑰屽寰堝紼嬪簭鍛樻潵璇達紝榪欎簺涓嶅悓鎭板ソ鎰忓懗鐫Python鍜孋++鏄郊姝ょ殑瀹岀編琛ヨ凍銆侾ython 紼嬪簭閲岀殑鎬ц兘鐡墮閮ㄥ垎鍙互鐢–++鏉ラ噸鍐欙紝浠庤屾渶澶у寲閫熷害銆傚己澶х殑C++紼嬪簭搴撶殑浣滆呴夋嫨Python浣滀負涓棿浠?middleware)璇█錛屼粠鑰岃幏寰楃伒媧葷殑緋葷粺闆嗘垚鑳藉姏銆傛澶栵紝琛ㄩ潰鐨勪笉鍚屾帺鐩栦簡浜岃呴潪甯哥被浼肩殑涓浜涘湴鏂癸細

鑰冭檻鍒癙ython涓板瘜鐨勨機'鍗忎綔API錛屽師鍒欎笂鎶奀++鐨勭被鍨嬪拰鍑芥暟浠ョ被浼間簬鏆撮湶緇機++鐨勬帴鍙f毚闇茬粰Python鏄彲鑳界殑銆傜劧鑰岋紝鍗曟槸Python鎻愪緵鐨勮繖縐嶈鏂藉闆嗘垚C++鐨勬敮鎸佹瘮杈冨急銆傚拰C++錛孭ython鐩告瘮錛屸機'鐨勬娊璞℃満鍒墮潪甯稿垵綰э紝鑰屼笖瀹屽叏涓嶆敮鎸佸紓甯稿鐞嗐傗機'鎵╁睍妯″潡鐨勪綔鑰呭繀欏繪墜鍔ㄧ鐞嗗紩鐢ㄨ鏁幫紝榪欎笉浣嗚浜烘伡鐏殑楹葷儲鍜屽崟璋冿紝榪樻瀬搴﹀鏄撳嚭閿欍備紶緇熺殑鎵╁睍妯″潡瀹規(guī)槗浜х敓閲嶅鐨勬牱鏉夸唬鐮?boilerplate code)錛屼粠鑰岄毦浜庣淮鎶わ紝灝ゅ叾鏄鍖呰鐨凙PI寰堝鏉傛椂銆?/p>

涓婅堪闄愬埗瀵艱嚧浜嗕竴浜涘寘瑁呯郴緇熺殑寮鍙戙係WIG_ 鍙兘鏄泦鎴怌/C++鍜孭ython鐨勫寘瑁呯郴緇熶腑鏈嫻佽鐨勩備竴涓洿榪戠殑渚嬪瓙鏄?SIP 錛屽畠涓撻棬璁捐鏉ユ彁渚?Qt 鍥懼艦鐢ㄦ埛鐣岄潰搴撶殑Python鎺ュ彛銆係WIG鍜孲IP閮藉紩鍏ヤ簡瀹冧滑涓撴湁鐨勮璦鏉ュ疄鐜拌璦闂寸粦瀹氥傝繖褰撶劧鏈夊畠鐨勫ソ澶勶紝浣嗕笉寰椾笉搴斾粯涓夌涓嶅悓鐨勮璦(Python錛孋/C++鍜屾帴鍙h璦)涔熷甫鏉ヤ簡瀹為檯鐨勫拰蹇冪悊涓婄殑鍥伴毦銆?CXX 杞歡鍖呭睍紺哄嚭瀹冩槸涓涓湁瓚g殑鍖呰緋葷粺銆傚畠璇存槑浜嗚嚦灝戜竴閮ㄤ喚Python 鈥楥鈥?API鍙互閫氳繃鐢ㄦ埛鍙嬪ソ寰楀鐨凜++鎺ュ彛鏉ュ寘瑁呭拰琛ㄧ幇銆傜劧鑰岋紝鍜孲WIG鍜孲IP涓嶄竴鏍鳳紝CXX涓嶆敮鎸佹妸C++綾誨寘瑁呮垚鏂扮殑Python綾誨瀷銆?/p>

Boost.Python 鐨勭壒鎬у拰鐩爣鍜屽緢澶氳繖鏍風(fēng)殑緋葷粺鏈夌浉褰撶▼搴︾殑閲嶅彔銆傚氨鏄錛孊oost.Python璇曞浘鏈澶у寲渚垮埄鎬у拰鐏墊椿鎬э紝鑰屼笉寮曞叆鍗曠嫭鐨勫寘瑁呰璦銆傜浉鍙嶏紝瀹冨湪騫曞悗鐢ㄩ潤鎬佸厓緙栫▼鎶鏈鐞嗗緢澶氬鏉傞棶棰橈紝璧嬩簣浜嗙敤鎴烽氳繃楂樼駭C++鎺ュ彛鏉ュ寘瑁匔++綾誨拰鍑芥暟鐨勮兘鍔涳紝Boost.Python涔熷湪濡備笅棰嗗煙瓚呰秺浜嗘棭鏈熺殑緋葷粺錛?/p>

  • C++铏氬嚱鏁版敮鎸侊紝铏氬嚱鏁板彲浠ョ敤Python鏉ヨ鐩?override)
  • 鍦ㄦ暣涓敓鍛藉懆鏈熷唴瀵逛綆綰ф寚閽堝拰寮曠敤榪涜鍏ㄩ潰綆$悊鐨勮鏂?
  • 瀵規(guī)妸鎵╁睍(extensions)緇勭粐鎴怭ython packages鐨勬敮鎸侊紝閫氳繃涓績娉ㄥ唽琛?central registry)鏉ヨ繘琛岃璦闂寸被鍨嬭漿鎹?
  • 瀹夊叏鑰屼究鍒╃殑榪炴帴寮哄ぇ鐨凱ython搴忓垪鍖栧紩鎿?pickle)鐨勬満鍒?
  • C++鐨刲value鍜宺value鐨勪竴鑷寸殑澶勭悊瑙勫垯錛岃繖鍙兘鏉ヨ嚜瀵筆ython鍜孋++涓よ呯殑綾誨瀷緋葷粺鐨勬繁鍏ョ悊瑙c?

榧撹垶Boost.Python寮鍙戠殑鍏抽敭鍙戠幇鏄紝浼犵粺鎵╁睍寮鍙戜腑鐨勫ぇ閲忔牱鏉夸唬鐮侀兘鍙互閫氳繃C++緙栬瘧鏃跺唴鐪佹潵娑堥櫎銆傝鍖呰鐨凜++鍑芥暟鐨勬瘡涓弬鏁伴兘蹇呴』鏍規(guī)嵁鍙傛暟綾誨瀷浠嶱ython瀵硅薄閲屽彇鍑烘潵銆傜被浼煎湴錛屽嚱鏁拌繑鍥炲肩殑綾誨瀷鍐沖畾浜嗚繑鍥炲煎浣曚粠C++杞崲鎴怭ython銆傚弬鏁扮被鍨嬪拰榪斿洖鍊肩被鍨嬪綋鐒墮兘鏄瘡涓嚱鏁扮殑綾誨瀷鐨勪竴閮ㄥ垎錛屾鏄粠榪欓噷錛孊oost.Python鎺ㄥ鍑轟簡澶ч儴鍒嗛渶瑕佺殑淇℃伅銆?/p>

榪欑鏂規(guī)硶瀵煎悜浜?鐢ㄦ埛寮曞鐨勫寘瑁?/em> 錛氬敖鍙兘鐨勭敤綰疌++鐨勬鏋剁洿鎺ヤ粠瑕佸寘瑁呯殑浠g爜閲屽彇寰椾俊鎭紝榪欎互澶栫殑淇℃伅鐢辯敤鎴鋒樉寮忔彁渚涖傚ぇ澶氭暟寮曞鏄嚜鍔ㄧ殑錛屽緢灝戦渶瑕佺湡姝g殑騫叉秹銆傚洜涓哄啓鎺ュ彛瑙勮寖鍜屽啓琚毚闇茬殑浠g爜鐨勬槸鍚屼竴闂ㄥ叏鍔熻兘璇█錛屽綋闇瑕佸彇寰楁帶鍒舵椂鐢ㄦ埛鏈変簡絀哄墠寮哄ぇ鐨勮兘鍔涖?/p>

Boost.Python 璁捐鐩爣

Boost.Python鐨勯瑕佺洰鏍囨槸璁╃敤鎴峰彧鐢–++緙栬瘧鍣ㄥ氨鑳藉悜Python鏆撮湶C++綾誨拰鍑芥暟銆傚ぇ浣撴潵璁詫紝鍏佽鐢ㄦ埛鐩存帴浠嶱ython鎿嶄綔C++瀵硅薄銆?/p>

鐒惰岋紝鏈変竴鐐瑰緢閲嶈錛岄偅灝辨槸涓嶈 榪囦簬 鎸夊瓧闈㈢炕璇戞墍鏈夋帴鍙o細蹇呴』鑰冭檻姣忕璇█鐨勬儻鐢ㄨ銆備緥濡傦紝铏界劧C++鍜孭ython閮芥湁榪唬鍣ㄧ殑姒傚康錛岃〃杈炬柟寮忓嵈寰堜笉涓鏍楓侭oost.Python蹇呴』鑳借繛鎺ヨ繖浜涗笉鍚岀殑鎺ュ彛銆?/p>

蹇呴』鎶奝ython鐢ㄦ埛鍜孋++鎺ュ彛鐨勫井灝忚鐢ㄩ犳垚鐨勫穿婧冮殧紱匯傚嚭浜庡悓鏍峰師鍥狅紝搴旇鎶奀++鐢ㄦ埛鍜屼綆綰ython 鈥楥鈥?API闅旂錛屽鏄撳嚭閿欑殑C鎺ュ彛錛屾瘮濡傛墜鍔ㄥ紩鐢ㄨ鏁扮鐞嗭紝鍘熷鐨?raw)PyObject鎸囬拡錛屽簲璇ョ敤鏇村姞鍋ュ.鐨?more-robust)鏇夸唬鐗╂潵鍙栦唬銆?/p>

鏀寔鍩轟簬緇勪歡鐨勫紑鍙戞槸鑷沖叧閲嶈鐨勶紝鍥犳琚毚闇插湪涓涓墿灞曟ā鍧楅噷鐨凜++綾誨瀷搴旇鑳藉琚紶閫掔粰琚毚闇插湪鍙︿竴涓ā鍧椾腑鐨勫嚱鏁幫紝鑰屼笉涓㈠け閲嶈鐨勪俊鎭紝姣斿璇碈++緇ф壙鍏崇郴銆?/p>

鏈鍚庯紝鎵鏈夌殑鍖呰蹇呴』鏄?闈炰鏡鍏ョ殑(non-intrusive) 錛屼笉鑳戒慨鏀圭敋鑷崇湅涓嶅埌鍘熷鐨凜++浠g爜銆傚鍙兘鐪嬭瀹冨ご鏂囦歡鍜屼簩榪涘埗鏂囦歡鐨勭涓夋柟錛岀幇鏈夌殑C++搴撳繀欏繪槸鍙寘瑁呯殑銆?/p>

Hello Boost.Python World

鐜板湪鏉ラ瑙堜竴涓婤oost.Python錛屽茍鐪嬬湅瀹冨浣曟敼榪汸ython鐨勫師濮嬪寘瑁呭姛鑳姐備笅闈㈡槸鎴戜滑鎯蟲毚闇茬殑涓涓嚱鏁?

char const* greet(unsigned x)
{
   static char const* const msgs[] = { "hello"錛?Boost.Python"錛?world!" };

   if (x > 2)
       throw std::range_error("greet: index out of range");

   return msgs[x];
}

鐢≒ython鐨凜 API鍜屾爣鍑咰++鏉ュ寘瑁呰繖涓嚱鏁幫紝鎴戜滑闇瑕佸儚榪欐牱:

extern "C" // 鎵鏈塒ython浜や簰閮戒嬌鐢–閾炬帴鍜岃皟鐢ㄤ範鎯?
{
    // 澶勭悊鍙傛暟/緇撴灉杞崲鍜屾鏌ョ殑鍖呰灞?
    PyObject* greet_wrap(PyObject* args錛孭yObject * keywords)
    {
         int x;
         if (PyArg_ParseTuple(args錛?i"錛?amp;x))    // 鍙栧嚭/媯鏌ュ弬鏁?
         {
             char const* result = greet(x);      // 璋冪敤琚寘瑁呯殑鍑芥暟
             return PyString_FromString(result); // 緇撴灉杞崲鎴怭ython
         }
         return 0;                               // 鍙戠敓浜嗛敊璇?
    }

    // 寰呭寘瑁呭嚱鏁拌〃錛屽嚱鏁扮敤榪欎釜妯″潡鏉ユ毚闇?
    static PyMethodDef methods[] = {
        { "greet"錛実reet_wrap錛孧ETH_VARARGS錛?return one of 3 parts of a greeting" }
        錛寋 NULL錛孨ULL錛?錛孨ULL } // sentinel
    };

    // 妯″潡鍒濆鍖栧嚱鏁?
    DL_EXPORT init_hello()
    {
        (void) Py_InitModule("hello"錛宮ethods); // 娣誨姞鎴愬憳鍑芥暟(method)鍒版ā鍧?
    }
}

鐜板湪鐪嬬湅鎴戜滑浣跨敤Boost.Python鏉ユ毚闇插畠鏃剁殑鍖呰浠g爜:

#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(hello)
{
    def("greet"錛実reet錛?return one of 3 parts of a greeting");
}

涓嬮潰鏄嬌鐢ㄥ畠鐨勪唬鐮?

>>> import hello

>>> for x in range(3):
...     print hello.greet(x)
...
hello
Boost.Python
world!

C API鐗堟湰瑕佸啑闀跨殑澶氾紝姝ゅ錛屼竴浜涘畠娌℃湁姝g‘澶勭悊鐨勫湴鏂瑰煎緱鎻愬埌錛?/p>

  • 鍘熸潵鐨勫嚱鏁版帴鍙楁棤絎﹀彿鏁存暟錛孭ython 鈥楥鈥?API浠呬粎鎻愪緵浜嗘彁鍙栨湁絎﹀彿鏁存暟鐨勬柟寮忋傚鏋滄垜浠瘯鍥懼悜hello.greet浼犻掕礋鏁癇oost.Pyt hon鐗堝皢鎶涘嚭Python寮傚父錛岃孭ython 鈥楥鈥?API鐗堝垯浼氱戶緇儚鍦–++瀹炵幇涓偅鏍瘋漿鎹㈣礋鏁板埌鏃犵鍙鋒暟(閫氬父鍖呰鎴愭煇縐嶅緢澶х殑鏁?錛岀劧鍚?鎶婁笉姝g‘鐨勮漿鎹㈢粨鏋滀紶緇欒鍖呰鍑芥暟銆?
  • 榪欏紩璧蜂簡絎簩涓棶棰橈細濡傛灉鍑芥暟鐨勫弬鏁板ぇ浜?錛孋++ greet()琚皟鐢ㄦ椂浼氭姏鍑哄紓甯搞傚吀鍨嬬殑錛屽鏋淐++寮傚父璺ㄨ秺C緙栬瘧鍣ㄧ敓鎴愮殑浠g爜鐨?杈圭晫浼犻掞紝浼氬鑷村穿婧冦傛濡備綘鍦ㄧ涓涓増鏈腑鐪嬪埌鐨勶紝閭e効娌℃湁C++鑴氭墜鏋?scaffolding)鏉ラ槻姝㈠穿婧冨彂鐢熴傝Boost.Python鍖呰 榪囩殑鍑芥暟鑷姩鍖呭惈浜嗗紓甯稿鐞嗗眰錛屽畠鎶婃湭澶勭悊鐨凜++寮傚父緲昏瘧鎴愮浉搴旂殑Python寮傚父錛屼粠鑰屼繚鎶や簡Python鐢ㄦ埛銆?
  • 涓涓洿寰鐨勯檺鍒舵槸錛孭ython 鈥楥鈥?API鐨勫弬鏁拌漿鎹㈡満鍒跺彧鑳戒互涓縐嶆柟寮忓彇寰楁暣鏁皒銆傚鏋滀竴涓狿ython long 瀵硅薄(浠繪剰綺懼害鏁存暟) 紕板閥鍙互杞崲鎴?fit in)unsigned int鑰屼笉鑳借漿鎹㈡垚signed long錛孭yArg_ParseTuple涓嶈兘瀵瑰叾榪涜杞崲銆傚悓鏍峰鏋滆鍖呰鐨凜++ 綾誨寘鍚敤鎴峰畾涔夌殑闅愬紡operator unsigned int()杞崲錛屽畠姘歌繙涓嶈兘澶勭悊銆侭oost.Python鐨勫姩鎬佺被鍨嬭漿鎹㈡敞鍐岃〃鍏佽鐢ㄦ埛浠繪剰娣誨姞 杞崲鏂規(guī)硶銆?

搴撴瑙?/a>

榪欓儴鍒嗙畝瑕佹弿榪頒簡搴撶殑涓昏鐗規(guī)с備負浜嗛伩鍏嶆販娣嗭紝蹇界暐浜嗗疄鐜扮粏鑺傘?/p>

鏆撮湶綾?Exposing Classes)

C++綾誨拰緇撴瀯浠ョ被浼肩殑綆媧佺殑鎺ュ彛鏉ユ毚闇層傚亣璁炬湁:

struct World
{
    void set(std::string msg) { this->msg = msg; }
    std::string greet() { return msg; }
    std::string msg;
};

涓嬮潰鐨勪唬鐮佸皢鍦ㄦ垜浠殑鎵╁睍妯″潡閲屾毚闇插畠:

#include <boost/python.hpp>

BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World")
        .def("greet"錛?amp;World::greet)
        .def("set"錛?amp;World::set)
    ;
}

灝界涓婅堪浠g爜鏈夋煇縐嶇啛鎮(zhèn)夌殑Pythonic鐨勬劅瑙夛紝浣嗚娉曟湁鏃惰繕鏄湁鐐逛護浜鴻糠鎯戯紝鍥犱負瀹冪湅璧鋒潵涓嶅儚浜轟滑涔犳儻鐨凜++浠g爜銆備絾鏄紝榪欎粛鐒跺彧鏄爣鍑咰++銆傚洜涓哄畠浠伒媧葷殑璇硶鍜屾搷浣滅閲嶈澆錛孋++鍜孭ython閮藉緢閫備簬瀹氫箟鐗瑰畾棰嗗煙(瀛?璇█( domain-specific (sub)languages) (DSLs)銆傞偅灝辨槸鎴戜滑鍦˙oost.Python閲屾墍鍋氱殑銆傛妸浠g爜鎷嗗紑鏉ョ湅:

class_<World>("World")

鏋勯犵被鍨媍lass_<World>鐨勬湭鍛藉悕瀵硅薄錛屾妸"World"浼犵粰瀹冪殑鏋勯犲櫒銆傝繖灝嗗湪鎵╁睍妯″潡閲屽垱寤轟竴涓彨World鐨刵ew-style Python綾伙紝騫舵妸瀹冨拰C++綾誨瀷World鍦˙oost.Python鐨勭被鍨嬭漿鎹㈡敞鍐岃〃閲屽叧鑱旇搗鏉ャ傛垜浠篃鍙互榪欎箞鍐?

class_<World> w("World");

浣嗛偅鏍峰仛鐨勮瘽浼氭洿綣佺悙錛屽洜涓烘垜浠笉寰椾笉鍐嶆鍛藉悕w浠ヨ皟鐢ㄥ畠鐨刣ef()鎴愬憳鍑芥暟:

w.def("greet"錛?amp;World::greet)

鍘熸潵鐨勪緥瀛愰噷琛ㄧず鎴愬憳榪涘叆鐨勭偣鐨勪綅緗病鏈変粈涔堢壒鍒殑錛欳++鍏佽浠繪剰鐨勭┖鐧界鍑虹幇鍦ㄨ〃鎰忕鍙?token)鐨勪換涓杈癸紝鎶婄偣鏀懼湪姣忚鐨勫紑濮嬪厑璁哥敤緇熶竴鐨勮娉曟妸榪炵畫鐨勮皟鐢ㄩ兘涓茶搗鏉ワ紝涓嶇鎴戜滑鎯充覆澶氬皯閮借銆傚彟涓涓厑璁哥殑涓叉帴鐨勪簨瀹炴槸class_<>鎴愬憳鍑芥暟閮借繑鍥炲*this鐨勫紩鐢ㄣ?/p>

鍥犳鍘熸潵鐨勪緥瀛愮瓑鍚屼簬:

class_<World> w("World");
w.def("greet"錛?amp;World::greet);
w.def("set"錛?amp;World::set);

鑳借繖鏍鋒媶鍒咮oost.Python綾誨寘瑁呭眰鐨勭粍鎴愰儴鍒嗘湁鏃跺欐槸鏈夌敤鐨勶紝浣嗘湰鏂囩殑鍓╀笅閮ㄥ垎灝嗕竴鐩翠嬌鐢ㄧ畝媧佺殑璇硶銆?/p>

鏈鍚庢潵鐪嬪寘瑁呯被琚嬌鐢ㄧ殑鎯呭喌:

>>> import hello
>>> planet = hello.World()
>>> planet.set('howdy')
>>> planet.greet()
'howdy'

鏋勯犲櫒(Constructors)

鍥犱負鎴戜滑鐨刉orld綾誨彧鏄竴涓畝鍗曠殑struct錛屽畠鏈変竴涓殣寮忕殑鏃犲弬鏁?no-argument)(nullary)鏋勯犲櫒銆侭oost.Python榛樿鏆撮湶nullary鏋勯犲櫒錛岃繖灝辨槸鎴戜滑鍙互鍍忎笅闈㈣繖鏍峰啓鐨勫師鍥?

>>> planet = hello.World()

鐒惰屼笉綆″摢闂ㄨ璦錛岃璁″緱濂界殑綾誨彲鑳介兘闇瑕佹瀯閫犲櫒鍙傛暟錛屼互寤虹珛浠栦滑鐨勪笉鍙橀噺(invariants)銆傚湪Python閲岋紝__init__鍙槸涓涓壒孌婂悕縐扮殑鎴愬憳鍑芥暟(method)錛屼笌榪欎笉鍚岋紝C++閲岀殑鏋勯犲櫒涓嶈兘鍍忔櫘閫氭垚鍛樺嚱鏁伴偅鏍峰鐞嗐傜壒鍒槸鎴戜滑涓嶈兘鍙栧畠鐨勫湴鍧: &World::World榪欐牱浼氳鎶ラ敊銆傚簱鎻愪緵浜嗕竴涓笉鍚岀殑鎺ュ彛鏉ユ寚瀹氭瀯閫犲櫒銆傚亣璁炬湁:

struct World
{
    World(std::string msg); // 娣誨姞鐨勬瀯閫犲櫒
    ...

鎴戜滑鍙互榪欐牱淇敼鍖呰浠g爜:

class_<World>("World"錛宨nit<std::string>())
    .def(init<double錛宒ouble>())
    ...

褰撶劧錛孋++綾誨彲鑳借繕鏈夊叾浠栫殑鏋勯犲櫒錛屾垜浠篃鍙互鏆撮湶浠栦滑錛屽彧闇瑕佸悜def()浼犻掓洿澶歩nit<鈥?gt;鐨勫疄渚?

class <World>("World"錛宨nit<std::string>())
        .def(init<double錛宒ouble>())
        ...

Boost.Python鍏佽琚寘瑁呯殑鍑芥暟錛屾垚鍛樺嚱鏁頒互鍙婃瀯閫犲櫒琚噸杞斤紝浠ユ槧灝凜++閲嶈澆銆?/p>

鏁版嵁鎴愬憳鍜屽睘鎬?Properties)

C++涓殑浠諱綍鍙叕鍏辯殑璁塊棶鐨勬暟鎹垚鍛橀兘鑳借交鏄撶殑琚寘瑁呮垚鍙鎴栬呭彧鍐欏睘鎬?attributes):

class_<World>("World"錛宨nit<std::string>())
    .def_readonly("msg"錛?amp;World::msg)
    ...

騫剁洿鎺ュ湪Python閲屼嬌鐢?

>>> planet = hello.World('howdy')
>>> planet.msg
'howdy'

榪欎笉浼氬鑷存坊鍔犲睘鎬у埌World瀹炰緥__dict__錛屼粠鑰屽湪鍖呰澶у瀷鏁版嵁緇撴瀯鏃惰妭鐪佸ぇ閲忕殑鍐呭瓨銆傚疄闄呬笂錛岄櫎闈炰粠Python鏄懼紡娣誨姞灞炴э紝鍚﹀垯瀹炰緥__dict__鏍規(guī)湰涓嶄細琚垱寤恒侾ython鐨勮繖縐嶈兘鍔涙潵婧愪簬鏂扮殑Python 2.2 綾誨瀷緋葷粺錛屽挨鍏舵槸descriptor鎺ュ彛鍜宲roperty綾誨瀷銆?/p>

鍦–++閲岋紝鍙叕鍏辯殑璁塊棶鐨勬暟鎹垚鍛樿璁や負鏄碂緋曡璁$殑琛ㄧ幇錛屽洜涓轟粬浠牬鍧忎簡灝佽(encapsulation)錛屾枃浣撳悜瀵?style guides)閫氬父鎸囩ず浠d箣浠?getter" 鍜?"setter"鍑芥暟銆傜劧鑰屽湪Python閲岋紝__getattr__錛宊_setattr__鍜屼粠2.2寮濮嬫湁鐨刾roperty鎰忓懗鐫灞炴ц繘鍏ュ彧鏄▼搴忓憳鎺у埗涓嬬殑灝佽寰楁洿濂界殑璇硶宸ュ叿銆傞氳繃璁㏄ython property瀵圭敤鎴風(fēng)洿鎺ュ彲鐢紝Boost.Python榪炴帴浜嗕簩鑰呯殑涓嶅悓鎯敤璇傚鏋渕sg鏄鏈夌殑錛屾垜浠粛鐒惰兘鎶婂畠鏆撮湶涓篜ython閲岀殑灞炴?

class_<World>("World"錛宨nit<std::string>())
    .add_property("msg"錛?amp;World::greet錛?amp;World::set)
    ...

涓婇潰鐨勪緥瀛愭槧灝勪簡浜轟滑鐔熸?zhèn)夌殑Python 2.2+閲岀殑property鐢ㄦ硶:

>>> class World(object):
...     __init__(self錛宮sg):
...         self.__msg = msg
...     def greet(self):
...         return self.__msg
...     def set(self錛宮sg):
...         self.__msg = msg
...     msg = property(greet錛宻et)

鎿嶄綔絎﹂噸杞?/a>

鑳界粰鐢ㄦ埛瀹氫箟綾誨瀷瀹氫箟綆楁湳鎿嶄綔絎︿竴鐩存槸涓ら棬璇█鐨勬暟鍊艱綆楀彇寰楁垚鍔熶竴涓噸瑕佸洜绱犮傚儚 Numpy 榪欐牱鐨勮蔣浠跺寘鐨勬垚鍔熻瘉鏄庝簡鍦ㄦ墿灞曟ā鍧椾腑鏆撮湶鎿嶄綔絎﹁兘浜х敓宸ㄥぇ鑳介噺銆侭oost.Python緇欏寘瑁呮搷浣滅閲嶈澆鎻愪緵浜嗙畝媧佺殑鏈哄埗銆備笅闈㈡槸鍖呰Boost鐨勬湁鐞嗘暟搴? rational number library)鐨勪唬鐮佺殑鐗囨柇:

class_<rational<int> >("rational_int")
  .def(init<int錛宨nt>()) // constructor錛宔.g. rational_int(3錛?)
  .def("numerator"錛?amp;rational<int>::numerator)
  .def("denominator"錛?amp;rational<int>::denominator)
  .def(-self)        // __neg__ (unary minus)
  .def(self + self)  // __add__ (homogeneous)
  .def(self * self)  // __mul__
  .def(self + int()) // __add__ (heterogenous)
  .def(int() + self) // __radd__

榪欑欖旀硶鏄氳繃綆鍗曠殑搴旂敤"琛ㄨ揪寮忔ā鏉?("expression templates") [VELD1995] 鏉ユ柦鍔犵殑錛?琛ㄨ揪寮忔ā鏉?鏄竴縐嶆渶鍒濅負浼樺寲楂樻ц兘鐭╅樀浠f暟琛ㄨ揪寮忚屽紑鍙戠殑鎶鏈傛湰璐ㄦ槸涓嶇珛鍗寵繘琛岃綆楋紝鑰岄噸杞芥搷浣滅鏉ユ瀯閫犳弿榪拌綆楃殑綾誨瀷銆傚湪鐭╅樀浠f暟閲岋紝褰撹冭檻鏁翠釜琛ㄨ揪寮忕殑緇撴瀯錛岃屼笉鏄?璐┆鐨?瀵規(guī)瘡姝ユ搷浣滄眰鍊兼椂錛岀粡甯稿彲浠ヨ幏寰楁垙鍓фх殑浼樺寲銆侭oost.Python鐢ㄥ悓鏍風(fēng)殑鎶鏈潵鏋勫緩鍩轟簬鍖呭惈 self 鐨勮〃杈懼紡鐨勯傚綋鐨凱ython 鎴愬憳鍑芥暟瀵硅薄(method object)銆?/p>

緇ф壙

瑕佸湪Boost.Python閲屾弿榪癈++緇ф壙鍏崇郴錛屽彲浠ュ儚涓嬮潰榪欐牱鎶婂彲閫夌殑bases<鈥?gt;鍙傛暟娣誨姞鍒癱lass_<鈥?gt;妯℃澘鍙傛暟琛ㄩ噷:

class_<Derived錛宐ases<Base1錛孊ase2> >("Derived")
     ...

榪欐牱鏈変袱涓晥鏋滐細

  1. 褰揷lass_<鈥?gt;琚垱寤烘椂錛屽湪Boost.Python鐨勬敞鍐岃〃閲屾煡鎵懼搴斾簬Base1鍜孊ase2鐨凱ython綾誨瀷瀵硅薄錛岀劧鍚庝綔涓烘柊鐨凱ython琛嶇敓綾?鍨嬪璞$殑鍩虹被銆傚洜鑰屾毚闇茬粰Base1鍜孊ase2鐨勬垚鍛樺嚱鏁拌嚜鍔ㄦ垚涓轟簡琛嶇敓綾誨瀷鐨勬垚鍛樸傚洜涓烘敞鍐岃〃鏄叏灞鐨勶紝鍗充嬌鏆撮湶琛嶇敓綾誨瀷鐨勬ā 鍧楀拰瀹冪殑浠諱竴鍩虹被鐨勬ā鍧椾笉鍚岋紝緇ф壙鍚屾牱鏈夋晥銆?
  2. 琛嶇敓綾誨埌鍩虹被鐨凜++杞崲琚坊鍔犲埌Boost.Python娉ㄥ唽琛ㄣ傚洜姝ゆ湡寰呬換涓鍩虹被瀵硅薄(鐨勬寚閽堟垨寮曠敤)鐨勮鍖呰C++鎴愬憳鍑芥暟鍙互琚寘瑁?浜嗕換涓鍩虹被鐨勮鐢熷疄渚嬬殑瀵硅薄璋冪敤銆傜被T鐨勮鍖呰鎴愬憳鍑芥暟琚涓哄叿鏈夐殣寮忕殑絎竴涓弬鏁癟&錛岄偅涔堜負浜嗚琛嶇敓瀵硅薄鑳借皟鐢ㄥ熀綾繪垚 鍛樺嚱鏁幫紝榪欎簺杞崲鏄繀闇鐨勩?

褰撶劧浠庤鍖呰鐨凜++綾誨疄渚嬭鐢熸柊鐨凱ython綾繪槸鍙兘鐨勩傝繖鏄洜涓築oost.Python浣跨敤浜唍ew-style class緋葷粺錛岃繖濂楃郴緇熷湪Python鍐呯疆綾誨瀷涓婂伐浣滆壇濂姐備絾鏈変竴涓噸瑕佺粏鑺備笉鍚岋細 Python鍐呯疆綾誨瀷涓鑸湪__new__鍑芥暟閲屽緩绔嬩笉鍙橀噺(invariants)錛屼粠鑰岃鐢熺被涓嶇敤鍦ㄨ皟鐢ㄥ畠鐨勬垚鍛樺嚱鏁板墠璋冪敤鍩虹被鐨刜_init__:

>>> class L(list):
...      def __init__(self):
...          pass
...
>>> L().reverse()
>>>

鍥犱負C++瀵硅薄鏋勯犳槸涓姝ユ搷浣?one-step operation)錛岀洿鍒板弬鏁板彲鐢–++瀹炰緥鏁版嵁鎵嶈兘琚瀯閫狅紝鍦╛_init__鍑芥暟閲?

>>> class D(SomeBoostPythonClass):
...      def __init__(self):
...          pass
...
>>> D().some_boost_python_method()
Traceback (most recent call last):
  File "<stdin>"錛宭ine 1錛宨n ?
TypeError: bad argument type for built-in operation

鍙戠敓閿欒鐨勫師鍥犳槸Boost.Python 鍦ㄥ疄渚婦閲屾壘涓嶅埌綾誨瀷SomeBoostPythonClass鐨勫疄渚嬫暟鎹紱D鐨刜_init__鍑芥暟閬洊浜嗗熀綾葷殑鏋勯犲嚱鏁般傚彲浠ラ氳繃鍒犻櫎D鐨刜_init__鍑芥暟鎴栨槸璁╁畠鏄懼紡鐨勮皟鐢⊿omeBoostPythonClass.__init__(鈥?鏉ョ籂姝i敊璇?/p>

铏氬嚱鏁?/a>

鍦≒ython閲屼粠鎵╁睍綾昏鐢熸柊鐨勭被鍨嬫病澶ぇ鎰忔濓紝闄ら潪瀹冧滑鍦–++閲岃兘琚鎬佺殑浣跨敤銆傛崲鍙ヨ瘽璇達紝褰撳湪C++閲岄氳繃鍩虹被鎸囬拡/寮曠敤璋冪敤Python鎴愬憳鍑芥暟鏃訛紝Python鎴愬憳鍑芥暟鐨勫疄鐜板簲璇ョ湅璧鋒潵鍍忔槸瑕嗙洊(override)浜咰++铏氬嚱鏁扮殑瀹炵幇銆傚洜涓鴻鏀瑰彉铏氬嚱鏁扮殑琛屼負鐨勫敮涓鏂規(guī)硶鏄湪琛嶇敓綾婚噷瑕嗙洊(override)瀹冿紝鐢ㄦ埛蹇呴』鏋勯犱竴涓壒孌婄殑琛嶇敓綾繪潵鍒嗘淳(dispatch)澶氭佺被鐨勮櫄鍑芥暟銆?

//
// 瑕佸寘瑁呯殑鎺ュ彛:
//
class Base
{
 public:
    virtual int f(std::string x) { return 42; }
    virtual ~Base();
};

int calls_f(Base const& b錛宻td::string x) { return b.f(x); }

//
// 鍖呰浠g爜
//

// 鍒嗘淳鑰呯被(Dispatcher class)
struct BaseWrap : Base
{
    // 鍌ㄥ瓨鎸囧悜Python瀵硅薄鐨勬寚閽?
    BaseWrap(PyObject* self_) : self(self_) {}
    PyObject* self;

    // 褰揻娌℃湁琚鐩?override)鏃剁殑緙虹渷瀹炵幇
    int f_default(std::string x) { return this->Base::f(x); }
    // 鍒嗘淳瀹炵幇
    int f(std::string x) { return call_method<int>(self錛?f"錛寈); }
};

...
    def("calls_f"錛宑alls_f);
    class_<Base錛孊aseWrap>("Base")
        .def("f"錛?amp;Base::f錛?amp;BaseWrap::f_default)
        ;

涓嬮潰鏄竴浜沺ython婕旂ず浠g爜:

>>> class Derived(Base):
...     def f(self錛宻):
...          return len(s)
...
>>> calls_f(Base()錛?foo')
42
>>> calls_f(Derived()錛?forty-two')
9

瀵瑰垎媧捐呯被(Dispatcher class)錛岃娉ㄦ剰:

鏇存繁灞傛鐨勫弽灝勫嵆灝嗗嚭鐜?Deeper Reflection on the Horizon)?

鏃犲彲鍚﹁錛岄噸澶嶈繖縐嶅叕寮忓寲鐨勬祦紼嬫槸鍐楅暱涔忓懗鐨勩傚挨鍏舵槸欏圭洰閲屾湁澶ч噺澶氭佺被鐨勬椂鍊欍傝繖鍙嶆槧浜咰++緙栬瘧鏃跺唴鐪佽兘鍔涚殑蹇呯劧闄愬埗:鏃犳硶鏋氫婦綾葷殑鎴愬憳鏉ュ垽鏂摢涓槸铏氬嚱鏁般備笉榪囷紝涓涓緢鏈夊笇鏈涚殑欏圭洰宸茬粡鍚姩錛岃嚧鍔涗簬鍐欎竴涓墠绔▼搴忔潵浠嶤++澶存枃浠惰嚜鍔ㄧ敓鎴愯繖浜涘垎媧捐呯被(浠ュ強鍏跺畠鍖呰浠g爜)銆?/p>

Pyste 鏄敱Bruno da Silva de Oliveira寮鍙戠殑錛屽熀浜?GCC_XML 鏋勫緩銆侴CC_XML鍙互鐢熸垚XML鐗堟湰鐨凣CC鍐呴儴紼嬪簭鎻忚堪銆侴CC鏄竴縐嶉珮搴︾鍚?璇戞敞錛欳++鏍囧噯)鐨勭紪璇戝櫒錛屼粠鑰岀‘淇濅簡瀵規(guī)渶澶嶆潅鐨勬ā鏉夸唬鐮佺殑姝g‘澶勭悊鍜屽搴曞眰綾誨瀷緋葷粺鐨勫畬鍏ㄨ闂傚拰Boost.Python鐨勫摬瀛︿竴鑷達紝Pyste鎺ュ彛鎻忚堪鏃笉渚靛叆琚寘瑁呯殑浠g爜錛屼篃涓嶇敤鏌愮涓嶇啛鎮(zhèn)夌殑璇█鏉ヨ〃杈撅紝鐩稿弽錛氬畠鏄?00%鐨勭函Python鑴氭湰銆傚鏋淧yste鎴愬姛鐨勮瘽錛屽皢鏍囧織鐫鎴戜滑鐨勫緢澶氱敤鎴蜂笉鐢ㄥ啀浠涔堥兘鐩存帴鐢–++鍖呰銆傚畠?yōu)畣鍏佽鎴戜滑閫夋嫨鎶婁竴浜涘厓紼嬪簭(metaprogram)浠g爜浠嶤++縐誨姩鍒癙ython銆傛垜浠湡寰呬笉涔呭悗涓嶄粎鐢ㄦ埛錛孊oost.Python寮鍙戣呰嚜宸變篃鑳戒互娣峰悎鐨勬濊礬鏉ヨ冭檻("thinking hybrid")浠栦滑鑷繁鐨勪唬鐮併?/p>

搴忓垪鍖?Serialization)

搴忓垪鍖栨槸鎶婂唴瀛樹腑鐨勫璞¤漿鎹㈡垚鍙互淇濆瓨鍒扮鐩樹笂鎴栭氳繃緗戠粶浼犻佺殑鏍煎紡鐨勮繃紼嬨傚簭鍒楀寲鍚庣殑瀵硅薄(鏈甯歌鐨勬槸綆鍗曞瓧絎︿覆)鍙互琚噸鏂板彇寰楀茍杞崲鍥炲師鏉ョ殑瀵硅薄銆傚ソ鐨勫簭鍒楀寲緋葷粺鑳藉鑷姩杞崲鏁翠釜瀵硅薄灞傛(object hierarchies)銆侾ython鐨勬爣鍑唒ickle妯″潡姝f槸榪欐牱鐨勭郴緇熴傚畠鍒╃敤璇█寮哄ぇ鐨勮繍琛屾椂鍐呯渷鏉ュ簭鍒楀寲鍑犱箮鏄換鎰忕殑鐢ㄦ埛瀹氫箟瀵硅薄銆傚姞涓婁竴浜涚畝鍗曠殑闈炰鏡鍏ラ檺瀹氾紝榪欑寮哄ぇ鐨勮鏂藉彲浠ヨ鎵╁睍鎴愬琚寘瑁呯殑C++瀵硅薄涔熸湁鏁堛備笅闈㈡槸涓涓緥瀛?

#include <string>

struct World
{
    World(std::string a_msg) : msg(a_msg) {}
    std::string greet() const { return msg; }
    std::string msg;
};

#include <boost/python.hpp>
using namespace boost::python;

struct World_picklers : pickle_suite
{
  static tuple
  getinitargs(World const& w) { return make_tuple(w.greet()); }
};

BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World"錛宨nit<std::string>())
        .def("greet"錛?amp;World::greet)
        .def_pickle(World_picklers())
    ;
}

鐜板湪璁╂垜浠垱寤轟竴涓猈orld瀵硅薄騫舵妸瀹冩斁鍒扮鐩樹笂:

>>> import hello
>>> import pickle
>>> a_world = hello.World("howdy")
>>> pickle.dump(a_world錛宱pen("my_world"錛?w"))

鍦ㄥ彲鑳戒笉鍚岀殑璁$畻鏈虹殑鍙兘涓嶅悓鐨勬搷浣滅郴緇熺殑鍙兘涓嶅悓鐨勮剼鏈腑:

>>> import pickle
>>> resurrected_world = pickle.load(open("my_world"錛?r"))
>>> resurrected_world.greet()
'howdy'

褰撶劧涔熷彲浠ョ敤cPickle鏉ヨ幏寰楁洿蹇殑澶勭悊閫熷害銆?/p>

Boost.Python鐨刾ickle_suite瀹屽叏鏀寔鏍囧噯Python鏂囨。瀹氫箟鐨刾ickle鍗忚銆傜被浼糚ython閲岀殑__getinitargs__鍑芥暟錛宲ickle_suite鐨刧etinitargs()璐熻矗鍒涘緩鍙傛暟tuple鏉ラ噸寤鴻pickle浜嗙殑瀵硅薄銆侾ython pickle鍗忚涓殑鍏朵粬鍏冪礌錛宊_getstate__ 鍜宊_setstate__鍙互閫氳繃C++ getstate鍜宻etstate鍑芥暟鏉ュ彲閫夌殑鎻愪緵銆侰++鐨勯潤鎬佺被鍨嬬郴緇熷厑璁稿簱鍦ㄧ紪璇戞椂紜繚娌℃湁鎰忎箟鐨勫嚱鏁扮粍鍚?渚嬪錛氭病鏈塻etstate 灝眊etstate)涓嶄細琚嬌鐢ㄣ?/p>

瑕佹兂搴忓垪鍖栨洿澶嶆潅鐨凜++瀵硅薄闇瑕佸仛姣斾笂闈㈢殑渚嬪瓙紼嶅井澶氱偣鐨勫伐浣溿傚垢榪愮殑鏄疧bject鎺ュ彛(鍙傝涓嬩竴鑺?鍦ㄤ繚鎸佷唬鐮佷究浜庣鐞嗕笂甯簡澶у繖銆?/p>

瀵硅薄鎺ュ彛(Object interface)

鏃犳墍涓嶅湪鐨凱yObject*錛屾墜鍔ㄥ紩鐢ㄨ鏁幫紝闇瑕佽浣忔槸鍝釜API璋冪敤榪斿洖浜?鏂扮殑"(鑷韓鎷ユ湁鐨?寮曠敤鎴栨槸"鍊熸潵鐨?(鍘熷鐨?寮曠敤錛岃繖浜涘彲鑳芥湁緇忛獙鐨凜璇█鎵╁睍妯″潡鐨勪綔鑰呴兘鐔熸?zhèn)夈傝繖浜涚害鏉熶笉浠呴夯鐑︼紝鏇存槸閿欒鐨勪富瑕佹潵婧愶紝灝ゅ叾鏄瓨鍦ㄥ紓甯哥殑鏃跺欍?/p>

Boost.Python鎻愪緵浜嗕竴涓猳bject綾伙紝瀹冭嚜鍔ㄥ寲浜嗗紩鐢ㄨ鏁板茍鎻愪緵浠繪剰綾誨瀷鐨凜++瀵硅薄鍒癙ython鐨勮漿鎹€傝繖鏋佸ぇ鐨勫噺杞諱簡鏈潵鐨勬墿灞曟ā鍧椾綔鑰呯殑瀛︿範璐熸媴銆?/p>

浠庝換涓綾誨瀷鍒涘緩object鏋佸害綆鍗?

object s("hello錛寃orld");   // s 綆$悊涓涓狿ython瀛楃涓?

object鍙互鍜屾墍鏈夊叾瀹冪被鍨嬭繘琛屾ā鏉垮寲鐨勪氦浜掞紝鑷姩鐨勮繘琛屽埌Python鐨勮漿鎹€傝繖涓鍒囪嚜鐒跺緱寰堝鏄撹蹇界暐涓嶈:

object ten_Os = 10 * s[4]; // -> "oooooooooo"

涓婇潰鐨勪緥瀛愪腑錛屽湪绱㈠紩鍜屼箻娉曟搷浣滆璋冪敤鍓嶏紝4鍜?0琚漿鎹㈡垚浜哖ython瀵硅薄銆?/p>

extract<T>綾繪ā鏉垮彲浠ョ敤鏉ユ妸Python瀵瑰璞¤漿鎹㈡垚C++綾誨瀷:

double x = extract<double>(o);

濡傛灉浠諱竴鏂瑰悜鐨勮漿鎹笉鑳芥墽琛岋紝灝嗗湪榪愯鏃舵姏鍑轟竴涓傚綋鐨勫紓甯搞?/p>

浼撮殢object綾誨瀷鐨勬槸涓濂楄鐢熺被鍨嬶紝灝藉彲鑳界殑鏄犲皠Python鐨勫唴緗被鍨?list錛宒ict錛宼uple絳?銆傝繖鏍峰氨鑳芥柟渚跨殑浠嶤++鎿嶄綔榪欎簺楂樼駭綾誨瀷浜?

dict d;
d["some"] = "thing";
d["lucky_number"] = 13;
list l = d.keys();

榪欑湅璧鋒潵鍜屽伐浣滆搗鏉ュ嚑涔庡氨鍍忔槸閫氬父鐨刾ython浠g爜錛屼絾瀹冨疄闄呬笂鏄函鐨凜++銆傚綋鐒舵垜浠兘鍖呰鎺ュ彈鎴栬繑鍥瀘bject瀹炰緥鐨勫嚱鏁般?/p>

浠庢販鍚堢殑鎬濊礬鎬濊?Thinking hybrid)

鍥犱負緇撳悎緙栫▼璇█鍏鋒湁瀹為檯鐨勫拰蹇冪悊鐨勫洶闅撅紝鍦ㄨ繘琛屼換浣曞疄闄呭紑鍙戝墠鍐沖畾浣跨敤鍗曚竴鐨勮璦鏄櫘閬嶇幇璞°傚寰堝搴旂敤鏉ヨ錛屾ц兘涓婄殑鑰冭檻鍐沖畾浜嗘牳蹇冪畻娉曡鐢ㄧ紪璇戣璦瀹炵幇銆備笉騫哥殑鏄紝鍥犱負闈欐佺被鍨嬬郴緇熺殑澶嶆潅鎬э紝鎴戜滑涓鴻繍琛屾椂鎬ц兘瑕佷粯鍑哄紑鍙戞椂闂村ぇ閲忓闀跨殑浠d環(huán)銆傜粡楠岃〃鏄庯紝鍜屽紑鍙戠浉搴旂殑Python浠g爜姣旇搗鏉ワ紝寮鍙戝彲緇存姢鐨凜++浠g爜閫氬父闇瑕佹洿闀跨殑鏃墮棿鍜岃壈闅懼緱澶氭墠鑳借幏寰楃殑宸ヤ綔緇忛獙銆傚嵆浣垮紑鍙戣呰寰楀彧鐢ㄤ竴闂ㄧ紪璇戣璦寮鍙戞尯濂斤紝涓轟簡鐢ㄦ埛錛屼粬浠篃緇忓父鐢ㄦ煇縐嶇被鍨嬬殑鐗瑰埆鐨勮剼鏈眰鏉ヨˉ鍏呯郴緇燂紝鍝曚粬浠案榪滀笉浼氬緱鍒板悓鏍風(fēng)殑濂藉銆?/p>

Boost.Python璁╂垜浠兘 think hybrid 銆侾ython鍙互鐢ㄦ潵蹇熸惌寤烘柊鐨勫簲鐢ㄧ殑鍘熷瀷錛涘湪寮鍙戣兘宸ヤ綔鐨勭郴緇熸椂錛屽畠鐨勬槗鐢ㄦу拰澶ч噺鐨勬爣鍑嗗簱浣挎垜浠浜庨鍏堛傞渶瑕佺殑璇濓紝鍙互鐢ㄨ兘宸ヤ綔鐨勪唬鐮佹潵鎵懼嚭闄愬埗閫熷害鐨勭儹鐐?rate-limiting hotspots)銆備負浜嗘渶澶у寲鎬ц兘錛岃繖浜涚儹鐐瑰彲浠ョ敤C++鏉ラ噸鏂板疄鐜幫紝鐒跺悗鐢˙oost.Python緇戝畾鏉ヨ繛榪涘凡鏈夌殑楂樼駭榪囩▼(璇戞敞錛氭寚Python紼嬪簭)銆?/p>

褰撶劧錛屽鏋滀竴寮濮嬪氨娓呮寰堝綆楁硶鏈鍚庝笉寰椾笉鐢–++鏉ュ疄鐜幫紝榪欑 鐢遍《鑷充笅(top-down) 鐨勬柟娉曞氨娌¢偅涔堝惛寮曚漢浜嗐傚垢榪愮殑鏄紝Boost.Python涔熷厑璁告垜浠嬌鐢?鐢卞簳鑷充笂(bottom-up) 鐨勬柟娉曘傛垜浠潪甯告垚鍔熺殑鎶婅繖縐嶆柟娉曠敤鍦ㄤ簡涓涓敤浜庣瀛﹀簲鐢ㄧ殑宸ュ叿綆辮蔣浠剁殑寮鍙戜笂銆傝繖涓伐鍏風(fēng)寮濮嬩富瑕佹槸涓涓甫Boost.Python緇戝畾鐨凜++綾誨簱錛屾帴涓嬫潵鏈変竴灝忔鏃墮棿澧為暱涓昏闆嗕腑鍦–++閮ㄥ垎錛岄殢鐫宸ュ叿綆卞彉寰楄秺鏉ヨ秺瀹屾暣錛岃秺鏉ヨ秺澶氭柊娣誨姞鐨勫姛鑳藉彲浠ョ敤Python鏉ュ疄鐜般?/p>

http://static.flickr.com/55/124987534_34375196e6.jpg?v=0

涓婂浘鏄疄鐜版柊鐨勭畻娉曟椂鏂版坊鍔犵殑C++浠g爜鍜孭ython浠g爜鐨勪及璁℃瘮鐜囬殢鏃墮棿鍙樺寲鐨勬儏鍐點傛垜浠璁¤繖涓瘮鐜囦細杈懼埌鎺ヨ繎70% (Python)銆傝兘澶熶富瑕佺敤Python鑰屼笉鏄洿鍥伴毦鐨勯潤鎬佺被鍨嬭璦鏉ヨВ鍐蟲柊闂錛岃繖鏄垜浠湪Boost.Python涓婄殑鎶曞叆鐨勫洖鎶ャ傛垜浠殑鎵鏈変唬鐮侀兘鑳戒粠Python璁塊棶錛岃繖浣垮緱鏇村箍娉涚殑寮鍙戣呭彲浠ョ敤瀹冩潵蹇熷紑鍙戞柊鐨勫簲鐢ㄣ?/p>

寮鍙戝巻鍙?/a>

Boost.Python鐨勭涓鐗堟槸鐢盌ave Abrahams鍦―ragon Systems寮鍙戠殑銆傚湪閭i噷浠栭潪甯歌崳騫哥殑璇峰埌Tim Peters浣滀負浠栫殑"Python涔嬬"( "The Zen of Python")瀵煎笀銆侱ave鐨勫伐浣滀箣涓鏄紑鍙戝熀浜嶱ython鐨勮嚜鐒惰璦澶勭悊緋葷粺銆傚洜涓烘渶緇堣琚敤浜庡祵鍏ュ紡紜歡錛岀郴緇熻綆楀瘑闆嗙殑鍐呮牳鎬繪槸琚亣璁炬垚瑕佺敤C++鏉ラ噸鍐欎互浼樺寲閫熷害鍜屽唴瀛橀渶姹傞噺(memory footprint) [1] 銆傝繖涓」鐩篃鎯崇敤Python嫻嬭瘯鑴氭湰 [2] 鏉ユ祴璇曟墍鏈夌殑C++浠g爜銆傚綋鏃舵垜浠煡閬撶殑緇戝畾C++鍜孭ython鐨勫敮涓宸ュ叿鏄?SWIG 錛屼絾閭f椂瀹冨鐞咰++鐨勮兘鍔涙瘮杈冨急銆傝璇村湪閭f椂灝卞Boost.Python鎵浣跨敤鏂規(guī)硶鐨勫彲鑳戒紭瓚婁箣澶勬湁浜嗕粈涔堟繁鍒繪礊瑙侊紝閭f槸楠椾漢鐨勩侱ave瀵硅姳淇忕殑C++妯℃澘鎶宸х殑鍏磋叮鍜屽ù鐔熷垰濂藉埌浜嗚兘鐪熸鍋氱偣浠涔堢殑鏃跺欙紝Boost.Python灝遍偅鏍峰嚭鐜頒簡錛屽洜涓哄畠婊¤凍浜嗛渶姹傦紝鍥犱負瀹冪湅璧鋒潵鎸洪叿錛屽煎緱涓璇曘?/p>

鏃╂湡鐨勭増鏈拡瀵圭殑璁稿鍩烘湰鐩爣鍜屽湪榪欑瘒璁烘枃涓弿榪扮殑鐩稿悓銆傛渶鏄捐憲鐨勫尯鍒湪浜庢棭鏈熺増鏈殑璇硶瑕佺◢寰夯鐑︿竴鐐癸紝緙轟箯瀵規(guī)搷浣滅閲嶈澆錛宲ickling錛屽熀浜庣粍浠剁殑寮鍙戠殑涓撻棬鏀寔銆傚悗闈笁涓壒鎬у緢蹇氨琚玌llrich Koethe鍜孯alf Grosse-Kunstleve [3] 鍔犱笂浜嗐傚叾浠栫儹蹇冪殑璐$尞鑰?contributors)涔熷嚭鏉ヨ礎(chǔ)鐚簡涓浜涙敼榪涳紝濡傚宓屽妯″潡鍜屾垚鍛樺嚱鏁扮殑鏀寔絳夈?/p>

鍒?001騫存棭鏈熸椂寮鍙戝凡緇忕ǔ瀹氫笅鏉ヤ簡錛屽緢灝戞湁鏂扮殑鐗規(guī)ф坊鍔狅紝鐒惰岃繖鏃朵竴涓儲浜虹殑闂鏆撮湶鍑烘潵浜嗭細Ralf宸茬粡寮濮嬪湪涓涓嬌鐢?EDG 鍓嶇鐨勭紪璇戝櫒鐨勯鍙戝竷鐗堜笂嫻嬭瘯Boost.Python錛岃繖鏃禕oost.Python鍐呮牳涓礋璐e鐞哖ython鍜孋++鐨勭被鍨嬭漿鎹㈢殑鏈哄埗(mechanism)緙栬瘧澶辮觸浜嗐傜粨鏋滆瘉鏄庢垜浠竴鐩村湪鍒╃敤涓涓猙ug錛岃繖涓猙ug鍦ㄦ墍鏈夋垜浠祴璇曡繃鐨凜++緙栬瘧鍣ㄥ疄鐜頒腑閮介潪甯告櫘閬嶃傛垜浠煡閬撻殢鐫C++緙栬瘧鍣ㄥ緢蹇彉寰楁洿鍔犳爣鍑嗗吋瀹癸紝搴撳皢寮濮嬪湪鏇村鐨勫鉤鍙頒笂澶辮觸銆傚緢涓嶅垢錛屽洜涓鴻繖濂楁満鍒舵槸搴撶殑鍔熻兘鐨勪腑鏋紝瑙e喅闂鐪嬭搗鏉ラ潪甯稿洶闅俱?/p>

騫歌繍鐨勬槸閭d竴騫寸殑鍚庢湡錛孡awrence Berkeley鍜屽悗鏉ョ殑Lawrence Livermore National labs鍜?Boost Consulting 絳捐浜嗘敮鎸丅oost.Python鐨勫紑鍙戠殑鍚堝悓銆傝繖鏍峰氨鏈変簡鏂扮殑鏈轟細鏉ュ鐞嗗簱鐨勫熀鏈棶棰橈紝浠庤岀‘淇濆皢鏉ョ殑鍙戝睍銆傞噸鏂拌璁″紑濮嬩簬浣庣駭綾誨瀷杞崲鏋舵瀯錛屽唴緗殑鏍囧噯鍏煎鍜屽鍩轟簬緇勪歡鐨勫紑鍙戠殑鏀寔(鍜屼笉寰椾笉鏄懼紡鐨勮法瓚婃ā鍧楄竟鐣屽鍏ユ垨瀵煎嚭杞崲鐨勭涓鐗堝艦鎴愬姣?銆傚Python鍜孋++瀵硅薄鐨勫叧緋昏繘琛屼簡鍒嗘瀽錛屼粠鑰岃兘鏇寸洿瑙傜殑澶勭悊C++ lvalues鍜宺values銆?/p>

Python 2.2閲屽嚭鐜扮殑寮哄ぇ鐨勬柊綾誨瀷緋葷粺浣垮緱閫夋嫨鏄惁緇存姢瀵筆ython 1.5.2鐨勫吋瀹規(guī)у彉寰楀鏄撲簡錛氳繖涓涪寮冨ぇ閲忕簿蹇冨埗浣滅殑浠呬粎鐢ㄦ潵妯℃嫙classic Python綾葷殑浠g爜鐨勬満浼氾紝濂界殑浠や漢鏃犳硶鎷掔粷銆傚彟澶栵紝Python iterators 鍜?descriptors鎻愪緵浜嗛噸瑕佷笖浼橀泤鐨勫伐鍏鋒潵鎻忚堪綾諱技鐨凜++緇撴瀯銆備竴鑸寲浜嗙殑瀵硅薄鎺ュ彛鐨勫紑鍙戝厑璁告垜浠繘涓姝ユ妸C++紼嬪簭鍛樺拰浣跨敤Python C API甯︽潵鐨勫嵄闄╂у拰璇硶璐熸媴闅旂寮銆傚ぇ閲忕殑鍏朵粬鐗規(guī)у湪榪欎釜闃舵琚姞浜嗚繘鏉ワ紝鍖呮嫭C++寮傚父緲昏瘧錛屾敼榪涚殑閲嶈澆鍑芥暟鏀寔錛岃繕鏈夋渶閲嶈鐨勭敤鏉ュ鐞嗘寚閽堝拰寮曠敤鐨凜allPolicies銆?/p>

浜?002騫村崄鏈堬紝絎簩鐗堢殑Boost.Python鍙戝竷浜嗐傞偅浠ュ悗鐨勫紑鍙戦泦涓湪鏀硅繘瀵笴++榪愯鏃跺鎬佸拰鏅鴻兘鎸囬拡鐨勬敮鎸佷笂銆傜壒鍒槸Peter Dimov鐨勫閥濡欑殑boost::shared_ptr璁捐浣挎垜浠兘緇欐販鍜岀郴緇熷紑鍙戣呮彁渚涗竴鑷寸殑鎺ュ彛錛岀敤浜庤法瓚婅璦钘╃鏉ュ洖縐誨姩瀵硅薄鑰屼笉涓㈠け淇℃伅銆?/p>

鍒氬紑濮嬶紝鎴戜滑鎷呭績Boost.Python v2鐨勫鏉傛т細闃葷璐$尞鑰咃紝浣?Pyste 鍜屽嚑涓叾浠栭噸瑕佺壒鎬х殑璐$尞(contribution)鐨勫嚭鐜頒嬌榪欎簺鎷呭績鏄懼緱澶氫綑浜嗐傛瘡澶╁嚭鐜板湪Python C++-sig涓婄殑闂鍜屽笇鏈涘緱鍒扮殑鏀硅繘鐨勭Н鍘?backlog)琛ㄦ槑浜嗗簱姝e湪琚嬌鐢ㄣ傚鎴戜滑鏉ヨ錛屾湭鏉ョ湅璧鋒潵寰堝厜鏄庛?/p>

緇撹

Boost.Python 瀹炵幇浜嗕袱縐嶅姛鑳戒赴瀵岀殑浼樼鐨勮璦鐜闂寸殑鏃犵紳鍗忎綔銆傚洜涓哄畠鍒╃敤妯℃澘鍏冪紪紼嬫妧鏈潵瀵圭被鍨嬪拰鍑芥暟榪涜鍐呯渷錛岀敤鎴鋒案榪滅敤涓嶇潃鍐嶅絎笁縐嶈璦:鎺ュ彛瀹氫箟鏄敤綆媧佽屽彲緇存姢鐨凜++鍐欑殑銆傚悓鏍鳳紝鍖呰緋葷粺涓嶇敤鍐嶈В鏋怌++澶存枃浠舵垨鏄弿榪扮被鍨嬬郴緇燂細緙栬瘧鍣ㄩ兘緇欐垜浠仛浜嗐?/p>

璁$畻瀵嗛泦鐨勪換鍔¢傚悎寮哄ぇ鐨凜++錛屽畠涓鑸笉鍙兘鐢ㄧ函Python鏉ュ疄鐜般傜劧鑰屽儚搴忓垪鍖栬繖鏍風(fēng)殑宸ヤ綔錛屽彲鑳界敤Python寰堢畝鍗曪紝鐢–++灝遍潪甯稿洶闅俱傚亣濡傛湁浠庡簳灞傚紑濮嬫瀯寤烘販鍚堢郴緇熺殑濂緢錛屾垜浠湁鏂扮殑淇″績鍜屽姩鍔涙潵榪涜璁捐銆?/p>



Squirrel 2006-05-15 15:44 鍙戣〃璇勮
]]>
Pythonwin VS Eclipse PyDevhttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7187.htmlSquirrelSquirrelMon, 15 May 2006 07:17:00 GMThttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7187.htmlhttp://www.shnenglu.com/Squirrel/comments/7187.htmlhttp://www.shnenglu.com/Squirrel/archive/2006/05/15/7187.html#Feedback0http://www.shnenglu.com/Squirrel/comments/commentRss/7187.htmlhttp://www.shnenglu.com/Squirrel/services/trackbacks/7187.html聽聽聽鍚屾牱浣滀負IDE錛孭ythonwin 姣?IDLE 鏈変笉灝戜護浜哄叴濂嬬殑鍦版柟錛屾垜寮濮嬩嬌鐢≒ythonwin涔熸鏄敱浜庡畠鐨凞EBUG鐜鍜屽埆浜虹殑鎺ㄨ崘銆傚彲褰撴垜璋冭瘯鏃訛紝姣斿錛屼竴涓▼搴忔寜涓ゆF5錛屽氨鍑虹幇鈥淧ythonwin.exe 閬囧埌闂闇瑕佸叧闂濓紝鎺ョ潃灝辨槸Runtime Error鍜屽唴瀛樹笉鑳戒負璇匯傜劧鍚庡繀欏婚噸鍚疨ythonwin鎵嶈兘鐢紒閬囧埌榪欐牱鐨勯棶棰橈紝鎭愭曞ぇ澶氱敤鎴風(fēng)殑蹇冪悊閮介毦浠ユ壙鍙椼?br />聽聽聽鎴戝悗鏉ユ兂璧蜂簡Eclipse+CDT錛岄偅涔堟湁Eclipse+PDT涔堬紵鏋滅劧錛岀湅鍒扮綉涓婃湁Eclipse+PyDev銆?br />聽聽聽鍦‥clipse涓夋嫨鑿滃崟錛?/font>Help鈥擲oftware Updates鈥擣ind And Install 錛岄夋嫨 Search for new features to intall錛岀偣 New Remote Site 鎸夐挳錛岃緭鍏?http://pydev.sf.net/updates錛?/font>涓嬭澆騫跺畨瑁呫?br />聽聽聽閰嶇疆鏃墮渶瑕佸埗瀹歅ython瑙i噴鍣紝閫夋嫨姝g‘鐨勮礬寰勫嵆鍙?br />聽聽聽鐒跺悗灝卞彲浠ュ湪Eclipse涓嬪紑鍙戣皟璇昉ython紼嬪簭浜嗐?br />pyDev.JPG
聽聽聽
聽聽聽鎴戜篃涓嬭繃BOA錛屼絾鎰熻鐜板湪瀹冭繕鏈変笉灝戠己闄鳳紝姣曠珶鎵嶆槸alpha鐗堛備及璁$瓑鍒?.0鍑烘潵灝卞緢媯掍簡銆?br />聽聽聽WingIDE 涓嶇煡閬撴庝箞鏍鳳紝涓嬫灝濊瘯鍚с?/font>


Squirrel 2006-05-15 15:17 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              夜夜夜久久久| 国产精品免费视频xxxx| 欧美mv日韩mv国产网站| 精品91在线| 欧美在线1区| 欧美亚洲三区| 亚洲国产综合在线看不卡| 欧美淫片网站| 欧美一区2区三区4区公司二百 | 欧美一区二区视频在线观看| 在线亚洲激情| 欧美国产亚洲精品久久久8v| 亚洲人成久久| 亚洲美女免费精品视频在线观看| 欧美日本不卡视频| 一本一道久久综合狠狠老精东影业 | 亚洲欧美资源在线| 国产色婷婷国产综合在线理论片a| 久久国产精彩视频| 久久久久久69| 在线观看不卡av| 亚洲电影一级黄| 欧美日韩一区二区三区在线看| 亚洲国产乱码最新视频| 亚洲人成网站精品片在线观看| 欧美午夜视频在线| 欧美专区中文字幕| 麻豆国产va免费精品高清在线| 亚洲精品一区二区网址| 一区二区三区蜜桃网| 欧美日韩精品免费 | 国产精品亚洲网站| 久久久久一区二区三区| 免费在线播放第一区高清av| 亚洲夜晚福利在线观看| 这里只有精品视频| 在线日韩视频| 亚洲午夜精品久久久久久app| 狠狠色狠色综合曰曰| 亚洲国产欧美一区二区三区久久 | 亚洲欧美另类在线| 亚洲精品久久久久久一区二区| 亚洲国产一区二区三区在线播| 国产精品久久久久影院亚瑟| 欧美aⅴ99久久黑人专区| 欧美日韩日日夜夜| 欧美在线在线| 欧美日本成人| 欧美www视频| 国产精品一区二区久久精品| 亚洲国产精品精华液网站| 国产精品一区免费观看| 亚洲经典在线看| 影音先锋日韩资源| 亚洲一区精品电影| 一区二区高清视频| 老司机精品导航| 亚洲小说春色综合另类电影| 韩国三级电影一区二区| 国产欧美精品| 国产精品丝袜久久久久久app| 亚洲欧洲日产国产网站| 久久精品综合一区| 午夜视频一区| 国产精品久久午夜| 亚洲精品一区二区三区婷婷月| 国产精品激情电影| 一本一本a久久| 亚洲免费成人av| 一本久道久久久| 亚洲欧美日本国产专区一区| 欧美精彩视频一区二区三区| 久久精品中文字幕免费mv| 国产偷国产偷精品高清尤物| 亚洲一区二区三区四区五区黄| 精品二区视频| 欧美+日本+国产+在线a∨观看| 久热国产精品视频| 国产欧美日韩一区二区三区在线观看 | 欧美激情一区二区三级高清视频 | 另类专区欧美制服同性| 国产偷国产偷亚洲高清97cao| 一区二区三区四区五区视频 | 久久免费午夜影院| 老鸭窝毛片一区二区三区| 国产一区观看| 久久精品国产精品| 蜜臀久久久99精品久久久久久 | 久久久久久亚洲精品不卡4k岛国| 久久精品夜色噜噜亚洲a∨| 欧美激情中文字幕乱码免费| 亚洲国产欧美精品| 一区二区高清在线观看| 欧美日韩在线精品一区二区三区| 欧美高潮视频| 一本色道久久综合亚洲精品小说| 欧美日韩亚洲免费| 一区二区三区国产| 欧美aaa级| 亚洲欧美日韩精品久久久久| 尤物精品在线| 国产精品久久久久久久app| 久久午夜电影网| 亚洲视频高清| 亚洲高清av在线| 欧美尤物一区| 亚洲天堂网站在线观看视频| 黄网动漫久久久| 国产精品yjizz| 免费日韩精品中文字幕视频在线| 亚洲一二三区视频在线观看| 欧美韩日一区| 久久蜜桃资源一区二区老牛 | 亚洲手机在线| 欧美体内she精视频| 亚洲国产福利在线| 欧美体内she精视频在线观看| 久久精品国产亚洲精品| 日韩一级视频免费观看在线| 麻豆精品在线视频| 久久久国产精品一区二区中文| 亚洲一区二区三区777| 亚洲精品中文字幕在线观看| 极品少妇一区二区三区| 国产欧美一区二区精品忘忧草| 欧美日韩一区自拍| 欧美巨乳波霸| 欧美激情视频免费观看| 免费不卡在线视频| 久久婷婷蜜乳一本欲蜜臀| 欧美在线免费观看视频| 亚洲综合大片69999| 亚洲精品日产精品乱码不卡| 亚洲国产日韩欧美| 亚洲福利专区| 亚洲国产精品一区| 亚洲高清免费| 亚洲国产色一区| 亚洲黄色影院| 91久久综合亚洲鲁鲁五月天| 亚洲国产裸拍裸体视频在线观看乱了| 久久综合一区二区| 男同欧美伦乱| 欧美激情第二页| 亚洲国产一区二区三区青草影视 | 亚洲高清视频在线观看| 在线电影国产精品| 最新成人av网站| 日韩视频永久免费| 一区二区国产在线观看| 亚洲一区二区三区免费视频| 亚洲夜晚福利在线观看| 性色av一区二区怡红| 欧美在线首页| 麻豆精品国产91久久久久久| 欧美成年人视频| 亚洲精品社区| 亚洲无吗在线| 久久九九免费视频| 模特精品裸拍一区| 欧美日韩亚洲一区二区三区四区| 欧美日韩直播| 国产一区二区三区高清播放| 伊人久久综合97精品| 亚洲片在线资源| 亚洲欧美日本日韩| 久久亚洲一区| 亚洲巨乳在线| 午夜老司机精品| 欧美粗暴jizz性欧美20| 国产精品普通话对白| 在线观看国产精品网站| 亚洲视频中文| 欧美成人官网二区| 在线中文字幕一区| 久久综合激情| 国产精品久久二区二区| 在线观看亚洲专区| 亚洲在线一区二区| 欧美成人在线免费视频| 亚洲天堂av电影| 美女网站久久| 国产乱码精品一区二区三| 亚洲欧洲在线播放| 久久av在线看| 日韩网站在线观看| 久久先锋影音| 国产精品一区二区视频 | 国产精品一区二区在线| 亚洲精品老司机| 欧美一区二区三区成人| 亚洲黄色在线| 久久免费偷拍视频| 国产欧美日韩三级| 欧美黄色视屏| 欧美在线电影| 国产伦精品一区二区三区免费| 亚洲美女91| 欧美a一区二区| 午夜精品福利电影|