锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 涓ょ瀵煎叆錛坕mport錛夋柟娉曪細 Python涓湁涓ょ瀵煎叆妯″潡鐨勬柟娉曪細 import xx / from xx import yy 浜屻侀潰鍚戝璞?/font>
閫氬父鏈変袱縐嶄嬌鐢ㄤ嬌鐢ㄦā寮忥細
聽聽 聽Lock-modify-Unlock聽聽 聽鐙崰寮忥紝浠h〃VSS
聽聽 聽Copy-modify-Merge聽聽 聽騫惰寮忥紝CVS/SVN
鏂瑰紡1綆鍗曟槗琛?錛屼絾鏄笉鑳芥敮鎸佸浜哄崗鍚屽伐浣滐紝鍏跺畠浜哄湪鏂囦歡琚鍑哄悗蹇呴』瑕佺瓑
寰呭畠琚彁浜ょ‘璁ゅ悗鎵嶈兘榪涜鏇存敼銆?br />鏂瑰紡2鏁堢巼鏇撮珮涓浜涳紝浣嗘槸澶氫漢鍚屾椂榪涜淇敼鎿嶄綔鏃舵湁鍙兘浼氬紩鍙戝啿紿併?br />
SVN甯哥敤鐨勫懡浠わ細
聽聽 聽checkout, authentication, update, add, delete, commit, rename, import, export...
鍏充簬鍛戒護鐨勪竴鐐硅鏄庯細
commit: 涓嶈鎶婂瀮鍦炬枃浠舵彁鍒板埌鏈嶅姟鍣紝鍨冨溇鏂囦歡鍖呮嫭涓棿鏂囦歡錛屼笌鍏蜂綋鏈哄櫒鐜鐩稿叧鐨勬枃浠訛紝鍙互鐢卞叾瀹冩枃浠剁敓鎴愮殑鏂囦歡絳夈?br />rename: Windows緋葷粺瀵逛簬鏂囦歡鍚嶄笉鍖哄埆澶у皬鍐欒孲VN鍖哄垎錛屾墍浠ュ湪鏀瑰悕鏃惰娉ㄦ剰銆係VN鐨剅ename鍔熻兘瀹為檯鏄痙elete鍐峚dd銆?br />import: 鐢ㄤ簬灝嗘湰鍦版枃浠跺鍏VN錛屽鍏ュ唴瀹逛笉鍖呭惈褰撳墠鐩綍銆?br />export: 鐢ㄤ簬瀵煎嚭SVN鐩綍緇撴瀯錛屽鍑虹殑緇撴灉涓嶄細甯︽湁闅愯棌鐨?svn鐩綍銆?br />resloved: 鐢ㄤ簬瑙e喅瀹屽啿紿佷箣鍚庣‘璁ゆ柊鐨勬枃浠躲傚綋涓や釜浜哄厛鍚庝慨鏀逛簡鍚屼竴閮ㄥ垎鐨勫唴瀹瑰悗錛屽啀鎻愪氦灝變細浜х敓conflicts錛屽皬妯″瀷鐨勫啿紿佸彲浠ユ墜鍔ㄤ嬌鐢╠iffer宸ュ叿淇敼鍐峳esloved紜錛屽ぇ瑙勬ā鐨勫啿紿佸氨闇瑕佹斁寮冧慨鏀圭粨鏋滈噸鏂扮紪杈戜簡銆?br />
Log Message錛?br />姣忔鎻愪氦鐨勬椂鍊欓兘搴旇鍐欎笂log錛屾潵璇存槑鎵鍋氱殑鏀瑰姩錛屽彲鑷繁瀹氫箟鏌愮log鏍煎紡銆?br />
灞炴э細
SVN涓彲緇欑洰褰曞鍔爌roperty錛屾瘮杈冮噸瑕佺殑灞炴ф槸external錛岃繖鐢ㄦ潵琛ㄧず涓涓閮ㄥ紩鐢紝浣跨敤鏂規硶涓猴細FloderName聽聽 聽URL錛岀粨鏋滄槸鍦ㄧ洰褰曚笅鍒涘緩涓涓互URL鍦板潃涓哄唴瀹圭殑鏂囦歡澶廣俥xternal link濮嬬粓淇濇寔鏈鏂幫紝鍙淇敼鍘熷鍐呭錛屾墍鏈夌殑寮曠敤閮戒細鏇存柊銆傝繖寰堥傚悎鏉ョ鐞嗙郴緇熺殑鍏叡閮ㄥ垎鐨勫唴瀹廣?br />
tag錛氫竴涓潪甯告湁鐢ㄧ殑鍛戒護錛岀敤鏉ュ垱寤轟竴涓郴緇熺殑蹇収錛屾妸鎵鏈夌殑鏂囦歡閿佸畾鍒版煇涓涓寚瀹氱殑鐗堟湰鍙楓傞渶瑕佹敞鎰忕殑鏄湪tagging鐨勬椂鍊檈xternal link浠嶇劧浼氫繚鎸佸埌鏈鏂扮殑鐗堟湰錛屾墍浠ュ湪tagging涔嬪墠闇瑕?b>鎵嬪姩鎸囧畾涓涓猠xternal鐨勭増鏈彿錛屽湪URL鍓嶉潰鍔犱笂-r xxx鏉ユ寚瀹氭槸鍝釜鐗堟湰鐨別xternal銆傚茍鍦╰agging瀹屾垚涔嬪悗榪樺師榪欎簺external錛屽惁鍒欏畠浠氨涓嶅緇堜繚鎸佸埌鏈鏂扮殑鐗堟湰銆?img src ="http://www.shnenglu.com/sunshinealike/aggbug/121695.html" width = "1" height = "1" />
link /dll DLLImplement.obj
灝卞彲浠ュ緱鍒頒竴涓狣LLImplement.dll欏轟究涔熶細瀵煎嚭涓涓?/span>DLLImplement.lib榪欎釜璺熼潤鎬侀摼鎺ュ簱寰堝儚鐨勪笢瑗匡紝瀹為檯涓婂畠鐨勪綔鐢ㄥ彧鏄鍑洪偅浜涙柟娉曞拰鍙橀噺鐨勫悕瀛椼?br />
2聽{
3聽聽聽聽聽__declspec(dllexport)聽void聽Set(int聽i);
4聽聽聽聽聽__declspec(dllexport)聽int聽Get();
5聽聽聽聽聽__declspec(dllexport)聽void聽SayHello();
6聽
7聽聽聽聽聽int聽value;
8聽}
聽2聽#include聽<objbase.h>
聽3聽#include聽"DLLHeader.h"
聽4聽
聽5聽
聽6聽void聽Set(int聽i)
聽7聽{
聽8聽聽聽聽聽value聽=聽i;
聽9聽}
10聽int聽Get()
11聽{
12聽聽聽聽聽return聽value;
13聽}
14聽void聽SayHello()
15聽{
16聽聽聽聽聽std::cout<<"Hello,聽I'm聽DLL,聽value聽is聽"<<value<<std::endl;
17聽}
18聽
19聽
20聽BOOL聽APIENTRY聽DllMain(HANDLE聽hModule,聽DWORD聽dwReason,聽void*聽lpReserved)
21聽{
22聽聽聽聽聽HANDLE聽g_hModule;
23聽
24聽聽聽聽聽switch(dwReason)
25聽聽聽聽聽{
26聽聽聽聽聽case聽DLL_PROCESS_ATTACH:
27聽聽聽聽聽聽聽聽std::cout<<"DLL聽is聽attached!"<<std::endl;
28聽聽聽聽聽聽聽聽g_hModule聽=聽(HINSTANCE)hModule;
29聽聽聽聽聽聽聽聽break;
30聽
31聽聽聽聽聽case聽DLL_PROCESS_DETACH:
32聽聽聽聽聽聽聽聽std::cout<<"DLL聽is聽detached!"<<std::endl;
33聽聽聽聽聽聽聽聽g_hModule=NULL;
34聽聽聽聽聽聽聽聽break;
35聽聽聽聽聽}
36聽
37聽聽聽聽聽return聽TRUE;
38聽}
39聽
浣跨敤DLL鐨勬柟娉曪紝鏈?縐嶏細浣跨敤def鏂囦歡/浣跨敤LoadLibrary鍜孏etProcAddress鏂規硶/浣跨敤瀵煎嚭鐨刲ib閰嶅悎澶存枃浠躲?br />絎竴縐嶅お楹葷儲榪欓噷涓嶄粙緇嶏紝鍙鏄庝竴涓嬪悗涓ょ鐨勪嬌鐢ㄦ柟娉曘?br />
聽2聽#include聽<windows.h>
聽3聽
聽4聽typedef聽void聽(*SET)(int);
聽5聽typedef聽int聽(*GET)(void);
聽6聽typedef聽void聽(*SAYHELLO)(void);
聽7聽
聽8聽int聽main(int聽argc,聽char聽**argv)
聽9聽{
10聽聽聽聽聽SET聽pSet聽=聽0;
11聽聽聽聽聽GET聽pGet聽=聽0;
12聽聽聽聽聽SAYHELLO聽pSayHello聽=聽0;
13聽
14聽聽聽聽聽HINSTANCE聽hinst=::LoadLibrary("DLLImplement.dll");
15聽聽聽聽聽if聽(0聽==聽hinst)
16聽聽聽聽聽{
17聽聽聽聽聽聽聽聽聽std::cout<<"load聽dll聽failed!"<<std::endl;
18聽聽聽聽聽聽聽聽聽return聽-1;
19聽聽聽聽聽}
20聽
21聽聽聽聽聽pSet聽=聽(SET)GetProcAddress(hinst,聽"Set");
22聽聽聽聽聽pGet聽=聽(GET)GetProcAddress(hinst,聽"Get");
23聽聽聽聽聽pSayHello聽=聽(SAYHELLO)GetProcAddress(hinst,聽"SayHello");
24聽
25聽聽聽聽聽if聽(0聽==聽pSet聽||聽0聽==聽pGet聽||聽0聽==聽pSayHello)
26聽聽聽聽聽{
27聽聽聽聽聽聽聽聽聽std::cout<<"get聽function聽failed!"<<std::endl;
28聽聽聽聽聽聽聽聽聽return聽-1;
29聽聽聽聽聽}
30聽
31聽聽聽聽聽//ready聽to聽call聽the聽function
32聽聽聽聽聽(*pSet)(10);
33聽聽聽聽聽int聽i聽=聽(*pGet)();
34聽聽聽聽聽std::cout<<"Get聽value聽from聽dll,聽value聽is聽"<<i<<std::endl;
35聽聽聽聽聽(*pSayHello)();
36聽
37聽聽聽聽聽return聽0;
38聽}
聽2聽#include聽"DLLHeader.h"
聽3聽
聽4聽using聽namespace聽std;
聽5聽
聽6聽
聽7聽int聽main聽(int聽argc,聽char聽**argv)
聽8聽{
聽9聽聽聽聽聽Set(100);
10聽聽聽聽聽cout<<"Set聽value聽in聽DLL"<<endl;
11聽聽聽聽聽int聽i聽=聽Get();
12聽聽聽聽聽cout<<"Get聽value聽in聽DLL,聽value聽is聽"<<i<<endl;
13聽
14聽聽聽聽聽SayHello();
15聽聽聽聽聽return聽0;
16聽}
鎶辨ㄤ竴鍙ワ紝鏈榪戞湁鐐規噿浜嗭紝鎯寵鍐欑殑鏃ュ織閮芥病鍐欍?br />鎵懼疄涔犱篃楹葷儲錛屽啓浠g爜鑲╄唨鑴栧瓙閰哥棝銆?br />IT姘戝伐鐨勫懡鍜嬪氨榪欎箞鑻﹀摡銆?br />
絎竴嬈′換鍔$畝浠嬶細
瀹炵幇涓涓鐞嗛泧鍛樿柂姘寸殑宸ュ叿錛屽彲浠ユ墦鍗板嚭鍛樺伐鐨勮柂姘翠俊鎭?br />闆囧憳鍒嗕負鏅氬拰緇忕悊錛屽悇鑷湁涓嶅悓鐨勮柂姘磋綆楁柟娉曘?br />
Ok錛孡et's go錛?br />棣栧厛澶嶄範涓涓婸ython閲岀殑闈㈠悜瀵硅薄鐩稿叧鐭ヨ瘑錛屽畾涔変竴涓泧鍛樼殑鍩虹被EmployeeBase
騫朵笖鍦╛_init__鏂規硶閲屽畾涔変簡涓変釜鎴愬憳name, base_salary鍜宱vertime_days
闇瑕佹敞鎰忕殑灝辨槸鎵鏈夌殑綾繪垚鍛樻柟娉曞湪澹版槑鐨勬椂鍊欓兘闇瑕佹湁涓涓粯璁ょ殑鍙傛暟self錛岃繖涓浉褰撲簬this鎸囬拡鐨勪笢瑗垮繀欏昏鍐欎笂錛岃屼笖璁塊棶綾繪垚鍛樻垨鑰呮柟娉曚篃閮借鍔犱笂榪欎釜鍓嶇紑錛屼笉鐒朵細鍑洪敊銆?br />
2聽聽聽聽聽"""Base聽class聽of聽all聽staffs"""
3聽聽聽聽聽def聽__init__(self,聽name聽=聽"",聽basesalary聽=聽0,聽overtime聽=聽0):
4聽聽聽聽聽聽聽聽聽self.name聽=聽name
5聽聽聽聽聽聽聽聽聽self.base_salary聽=聽basesalary
6聽聽聽聽聽聽聽聽聽self.overtime_days聽=聽overtime
7聽聽聽聽聽def聽GetName(self):
8聽聽聽聽聽聽聽聽聽return聽self.name
鎺ヤ笅鏉ュ氨鏄櫘閫氶泧鍛樼被Employee錛岀戶鎵跨殑璇硶錛?span style="color: rgb(0, 0, 0);">Employee(EmployeeBase)
浠ュ強綾葷殑__doc__錛屽吇鎴愬啓娉ㄩ噴鐨勪範鎯?br /> Line 6錛?br />__init__騫朵笉鏄瀯閫犲嚱鏁幫紝騫朵笖Python閲屼篃娌℃湁鏋勯犲嚱鏁拌繖涓蹇點傛墍浠ヨ鎵嬪姩鐨勮皟鐢ㄥ熀綾葷殑__init__鏂規硶
GetSalary涓綆楄柂姘達紝鏅氶泧鍛樼殑鍔犵彮宸ヨ祫鏄弻鍊嶈綆楃殑銆?br />
聽2聽聽聽聽聽"""Common聽employee聽class聽derived聽from聽EmployeeBase.
聽3聽聽聽聽聽A聽employee聽can聽has聽overtime聽salary,聽every聽overtime聽work's聽salary聽will聽be聽doubled
聽4聽聽聽聽聽"""
聽5聽聽聽聽聽def聽__init__(self,聽name="",聽basesalary=0,聽overtime=0):
聽6聽聽聽聽聽聽聽聽 EmployeeBase.__init__(self,name,basesalary,overtime)
聽7聽聽聽聽聽def聽GetStaffType(self):
聽8聽聽聽聽聽聽聽聽聽return聽"Employee"
聽9聽聽聽聽聽def聽GetSalary(self):
10聽聽聽聽聽聽聽聽聽return聽self.base_salary聽+聽self.base_salary/30*2*self.overtime_days
11聽聽聽聽聽def聽GetSalaryInfo(self):
12聽聽聽聽聽聽聽聽聽return聽self.name聽+聽"聽:聽"聽+聽self.GetStaffType()+聽"聽:聽"聽+聽str(self.GetSalary())
鍒拌繖閲岋紝闆囧憳綾誨凡緇忓畬鎴愶紝涓嬮潰灝辨槸鈥斺?b>鍗曞厓嫻嬭瘯銆備竴鑸垜浠ュ墠鍐欑▼搴忛兘寰堝皯鍐欏崟鍏冩祴璇曠殑錛屽洜涓哄緢璐規椂錛岃鍐欏緢澶氭祴璇曠殑浠g爜銆?br />浣嗘槸榪欓噷鎴戞兂鐗瑰埆灝濊瘯涓涓嬶紝浠ュ睍鐜癙ython閲岀殑鍚勭鐗規у拰宸ュ叿銆?br />鏂扮増鏈殑Python閲屾湁涓涓笓闂ㄧ敤浜庢祴璇曠殑unittest妯″潡錛屽鍏ュ氨鍙互浣跨敤浜嗭紝涓嬮潰鏂板緩涓涓猅estsalary.py榪涜鍗曞厓嫻嬭瘯銆?br />棣栧厛unittest妯″潡閲屾湁涓涓祴璇曠敤渚嬬殑鍩虹被TestCase錛屾垜浠彧瑕佸湪TestCase鐨勬淳鐢熺被閲屽畾涔夎嚜宸辯殑嫻嬭瘯鐢ㄤ緥鏂規硶灝卞彲浠ヤ嬌鐢ㄤ簡錛岃繖浜涙祴璇曠敤鍛芥柟娉曠敋鑷抽兘涓嶉渶瑕佽嚜宸辮皟鐢紝鍙鏂規硶鍚嶅瓧浠est寮澶?/b>錛孴estCase灝變細鑷姩鐨勮皟鐢ㄥ畠浠?br />鍦ㄤ笅闈㈢殑嫻嬭瘯浠g爜涓紝鎴戝畾涔変簡testNoneEmployee絳夊嚑涓祴璇曟柟娉曪紝涓昏鏄嬌鐢ㄤ簡TestCase閲岀殑assertEqual鏂規硶銆?br />
import聽unittest
from salary importEmployee
class聽TestEmployee(unittest.TestCase):
聽聽聽聽"""Unit聽test聽for聽clas聽Employee"""
聽聽聽聽def聽testNoneEmployee(self):
聽聽聽聽聽聽聽聽e聽=聽Employee()
聽聽聽聽聽聽聽聽self.assertEqual("",e.GetName())
聽聽聽聽聽聽聽聽self.assertEqual(0,e.GetSalary())
聽聽聽聽聽聽聽聽self.assertEqual("Employee",e.GetStaffType())
聽聽聽聽def聽testBaseSalary(self):
聽聽聽聽聽聽聽聽e聽=聽Employee("emp",聽300)
聽聽聽聽聽聽聽聽self.assertEqual("emp",e.GetName())
聽聽聽聽聽聽聽聽self.assertEqual(300,e.GetSalary())
聽聽聽聽聽聽聽聽self.assertEqual("Employee",e.GetStaffType())
聽聽聽聽def聽testNoOvertime(self):
聽聽聽聽聽聽聽聽e聽=聽Employee("emp",聽300,聽0)
聽聽聽聽聽聽聽聽self.assertEqual(300,e.GetSalary())
聽聽聽聽聽聽聽聽self.assertEqual("emp聽:聽Employee聽:聽300",聽e.GetSalaryInfo())
聽聽聽聽def聽testOvertime1(self):
聽聽聽聽聽聽聽聽e聽=聽Employee("emp",聽300,聽1)
聽聽聽聽聽聽聽聽self.assertEqual(320,e.GetSalary())
聽聽聽聽聽聽聽聽self.assertEqual("emp聽:聽Employee聽:聽320",聽e.GetSalaryInfo())
聽聽聽聽def聽testOvertime2(self):
聽聽聽聽聽聽聽聽e聽=聽Employee("emp",聽300,聽5)
聽聽聽聽聽聽聽聽self.assertEqual(400,e.GetSalary())
聽聽聽聽聽聽聽聽self.assertEqual("emp聽:聽Employee聽:聽400",聽e.GetSalaryInfo())
聽聽聽聽聽聽聽聽
if聽__name__聽==聽"__main__":
聽聽聽聽unittest.main()
Ran 5 tests聽in聽0.007s
OK
聽聽聽聽聽聽聽聽self.assertRaises(InvalidName,聽Employee,聽"name聽too聽long")
聽聽聽聽def聽testInvalidInput1(self):
聽聽聽聽聽聽聽聽self.assertRaises(InvalidInput,聽Employee,聽"emp",聽-300)
聽聽聽聽def聽testInvalidInput2(self):
聽聽聽聽聽聽聽聽self.assertRaises(InvalidInput,聽Employee,聽"emp",聽300,聽-5)
class聽InvalidName(Exception):pass
class聽InvalidInput(Exception):pass
#錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞
聽聽聽聽def聽__init__(self,聽name="",聽basesalary=0,聽overtime=0):
聽聽聽聽聽聽聽聽#raise聽exceptions聽if聽input聽is聽invalidate
聽聽聽聽聽聽聽聽if聽len(name)聽>聽8:
聽聽聽聽聽聽聽聽聽聽聽聽raise聽InvalidName,聽"Error:聽Name聽too聽long!"
聽聽聽聽聽聽聽聽if聽basesalary聽<聽0聽or聽basesalary聽>聽300000:
聽聽聽聽聽聽聽聽聽聽聽聽raise聽InvalidInput,聽"Error:聽Base聽salary聽should聽between聽0~300000!"
聽聽聽聽聽聽聽聽#use聽int(overtime)聽!=聽overtime聽to聽check聽if聽the聽input聽is聽int
聽聽聽聽聽聽聽聽if聽overtime聽<聽0聽or聽overtime聽聽>聽31聽or聽int(overtime)聽!=聽overtime:
聽聽聽聽聽聽聽聽聽聽聽聽raise聽InvalidInput,聽"Error:聽Overtime聽should聽between聽0~31!"
聽聽聽聽聽聽聽聽EmployeeBase.__init__(self,name,basesalary,overtime)
OK錛岀涓姝ラ『鍒╁畬鎴愶紝涓嬮潰灝辨槸緇忕悊綾匯傜粡鐞嗙殑宸ヨ祫鐢卞姞鐝伐璧勫拰緇╂晥緇勬垚錛屽姞鐝伐璧勫彧璺熺粡鐞嗙殑絳夌駭鏈夊叧錛屽畠涓庣嘩鏁堝伐璧勯兘鏄竴涓浐瀹氬鹼紝鍩烘湰涓婃病鏈変粈涔堥毦搴︺?br />
涓嬮潰綆鍗曞啓涓涓婾ML鐨勫熀鏈煡璇嗭細
1.璇嗗埆鍙備笌鑰?br />2.鎶藉彇鐢ㄤ緥
鐢ㄤ緥涓湁涓ょ偣闇瑕佽鏄庝竴涓嬶細鎵╁睍(extension)/鍖呭惈(include)
鎵╁睍錛氬畠浠箣闂翠簰涓嶅紩鐢紝浠呬粎鎻掑叆鍒拌鎵╁睍鐢ㄤ緥涓?br />鍖呭惈錛氬寘鍚敤渚嬩細寮曠敤琚寘鍚殑鐢ㄤ緥
鍩烘湰鐢ㄤ緥瀹屾垚涔嬪悗錛屽彲浠ユ牴鎹弬涓庤呭皢鍏跺垎綾葷粍緇囪搗鏉ワ紝褰㈡垚緋葷粺鐨勮竟鐣屽浘鏉ユ眹鎬繪樉紺恒?br />
3.棰嗗煙妯″紡(domain)
榪欐槸涓縐嶇被浼間簬UML綾誨浘,浣嗘槸瀹冧滑涔嬮棿鏈夊緢澶х殑宸埆錛屽畠騫朵笉浼氬搴斾簬緙栫爜涓殑綾?class)銆?br />4.綾諱箣闂寸殑鍏崇郴
鍏寵仈錛氫互涓鏉$嚎榪炴帴涓や釜綾昏〃紺猴紝琛ㄧず瀹冧滑涔嬮棿鐩鎬簰鍖呭惈銆傛洿甯歌鐨勬槸涓縐嶅甫綆ご鍗曞悜鍏寵仈鍏崇郴銆?br />鑱氬悎錛氫互涓涓櫧鑹茶彵褰㈢澶磋〃紺虹被涔嬮棿鐨勨滄暣浣?灞閮ㄢ濆叧緋伙紝鍚屾牱鑱氬悎鍏崇郴鐨勪竴涓彉浣撯滅粍鍚堚濓紝浠ヤ竴涓粦鑹茶彵褰㈢澶磋〃紺猴紝榪欎篃鏄竴縐嶁滄暣浣?灞閮ㄢ濆叧緋伙紝浣嗘槸鈥滈儴鍒嗏濅笉鑳借劚紱燴滄暣浣撯濊屽瓨鍦紝鈥滄暣浣撯濅篃蹇呴』璐熻矗綆$悊鈥滈儴鍒嗏濈殑鐢熷瓨鏈熴?br />涓句緥錛氬搴拰浜烘槸鑱氬悎鍏崇郴錛岃岀數鑴戜笌CPU鏄粍鍚堝叧緋?br />
聽 聽鍏朵簩錛屸滄湁浜鴻鐑у6寮姘達紝絳夌敓濂界伀鍙戠幇鏌翠笉澶燂紝浠栬鎬庝箞鍔?鈥濇湁鐨勮璧跺揩鍘繪壘錛屾湁鐨勮鍘誨熴佸幓涔般傝佸笀璇達細鈥滀負浠涔堜笉鎶婂6閲岀殑姘村掓帀涓浜?鈥濆ぇ瀹朵竴鍚紝琛ㄧず浣╂湇銆?
聽
聽 聽鍏朵笁錛屸滃彜浠f湁涓浜猴紝鎯沖绔嬭韓鐨勬湰棰嗐傜粡榪囧弽澶嶆瘮杈冿紝鍐沖績鍘誨灞犻緳涔嬫妧銆備粬鎷滃悕甯堬紝鏃ュ鑻︾粌錛岀粓鏈夋墍鎴愩備粬浼氭庝箞鏍峰憿?鈥滃悓瀛︿滑鍏磋嚧鍕冨媰錛岃浠栬兘鎴愪負鑻遍泟銆佹槑鏄燂紝鍙椾笘浜哄磭鎷溿傝佸笀鎽囧ご錛氣滆繖涓漢涓瀹氫細娼﹀掍竴鐢燂紝鍥犱負涓栦笂鏍規湰灝辨病鏈夐緳銆傗?
聽
聽聽 浣犱滑搴旇瑕佸浼氣滃浣曞仛浜恒佸仛浜嬨佸仛瀛﹂棶鈥濓細
聽聽 鍋氫漢瑕佸姏姹傚嚭鑹詫紝鍕囦簤絎竴錛岃繖鏍峰埆浜烘墠鑳藉彂鐜頒綘銆佽浣忎綘錛?br />聽聽 鍋氫簨瑕佹暍浜庡垱鏂幫紝鏂規硶鐏墊椿錛屽崈涓囦笉鍙ⅷ瀹堟垚瑙勶紱
聽聽 鍋氬闂瀛︿互鑷寸敤錛岃鎳傚緱灝嗙煡璇嗚漿鍖栦負鏁堢泭錛岄棴闂ㄩ犺濺娌℃湁璺?/b>
浠ュ墠涓鐩磋寰楃埗姣嶈窡鑷繁鍜屼笉鏉ワ紝浣嗘槸鐜板湪紿佺劧鍙戠幇錛屾槸鑷繁澶浐鎵т簡銆備互鍓嶆昏寰椾粬浠殑澶勪簨鏂瑰紡涓嶉『鐪鹼紝鐜板湪鑷繁緇忓巻榪囦竴浜涗簨鎯呬箣鍚庯紝鎵嶇煡閬撳師鏉ュ墠浜轟滑鐣欎笅鐨勭粡楠屼笉鍙兘閮芥槸鍚冮ケ浜嗘拺鐨勬病浜嬪共鎷嶆媿鑴戦棬鍑┖鎯沖嚭鏉ョ殑錛屼粖鍚庤繕闇澶氬悜浠栦滑璇鋒暀涓轟漢澶勪簨鐨勭粡楠屻?br />
鍐嶅氨鏄繎鏉ユ劅瑙夊父蹇樹簨錛屾湰鏉ヨ嚜鍒跺姏灝變笉澶熴備竴鐤忓拷灝辨氮璐逛笉灝戞椂闂達紝浠ヨ嚧浜庡厛鍓嶇浉濂界殑璁″垝甯稿父瀹屾垚涓嶄簡銆備笉搴旇鍟婁笉搴旇錛屼互鍚庡簲璇ュ鍐欒鍒掞紝鍐欎笅鏉ワ紒鎶婁換鍔″垎綾誨埆銆佺鐞嗗ソ鑷繁鐨勬椂闂淬傜姣曚笟涓嶈繙浜嗭紝鎶婃彙褰撲笅錛侊紒
ActiveObject妯″紡鏄嬌鐢–ommand妯″紡鐨勫簲鐢ㄤ箣涓錛岃繖鏄疄鐜?strong>澶氱嚎紼嬫帶鍒?/strong>鐨勪竴縐嶆妧鏈?br />
涓嬮潰鏄竴涓畝鍗曠殑瀹炰緥錛?br />1. 涓涓狢ommand鎺ュ彛錛屽畾涔変簡Execute鏂規硶銆?br />2. 涓や釜綾籗leepingCommand鍜孭rinterCommand瀹炵幇浜咰ommand涓殑Execute鏂規硶銆?br />聽聽聽鍦≒rinterCommand涓皟鐢‥xecute鏃舵墦鍗頒竴涓瓧絎﹀茍鍒涘緩涓涓柊鐨凱rinterCommand鍦ㄦ寚瀹氱殑寤舵椂鍚庢墽琛屻?br />聽聽 SleepingCommand琛ㄧず涓涓潯鐪犱腑鐨凜ommand錛屼粬鍦ㄦ墽琛屾椂鍙槸綆鍗曠殑灝嗚嚜宸辨斁鍒伴摼琛ㄦ湯灝劇洿鍒扮瓑寰呯殑浜嬩歡錛堣瀹氱殑寤舵椂鍒版潵錛夊彂鐢熷畠鎵嶄細灝嗚嚜宸卞敜閱掔瓑寰呬笅涓姝ユ墽琛屻?br />3. 涓涓猄topCommand綾伙紝瀹炵幇浜嗙敤浜庣粓姝ommand閾懼驚鐜殑Execute鏂規硶銆?br />4. 涓涓狝ctiveObjectManager瀵硅薄錛岀淮鎶や簡涓涓狢ommand瀵硅薄閾捐〃錛岀敤鎴峰彲浠ュ儚Manager涓瑼ddCommand瀵硅薄鎴栬呬究鍒╅摼琛ㄥ茍渚濇璋冪敤Command瀵硅薄鐨凟xecute鏂規硶鎵ц浠誨姟銆?/p>
涓嬮潰璐翠竴鐐瑰涔犵殑絎旇錛?br />
涓銆佸熀鏈煡璇?/font>
Python鍚屾椂鍗蟲槸鑴氭湰瑙i噴鍣紝鍙堟槸涓涓彲浠ヨ繍琛屽懡浠よ鐨剆hell銆傚湪shell閲屽彲浠ヨ綆椾換鍔ython琛ㄨ揪寮忥紝鐢氳嚦鍖呮嫭鍙橀噺璧嬪鹼紝榪欎簺鍙橀噺鍦╯hell鎵撳紑鏃朵竴鐩存湁鏁堬紝鍏抽棴鏃朵涪澶辨暟鎹?br />
鍑芥暟澹版槑錛屼互def寮濮嬶紝鍑芥暟鍚嶏紝鍙傛暟錛屽啋鍙峰悗闈㈣窡鍑芥暟浣撱傞渶瑕佹敞鎰忕殑鏄疨ython閲岀殑鏍煎紡閮戒互緙╄繘鐨勫艦寮忔潵琛ㄨ揪錛屾病鏈夌被C/C++涓殑澶ф嫭鍙楓傚彟澶栧嚱鏁?
涓嶉渶瑕佹寚瀹氳繑鍥炲肩被鍨嬶紝瀹為檯涓婏紝濡傛灉鍑芥暟鏈塺eturn璇彞錛屽畠灝嗚繑鍥炴寚瀹氱被鍨嬪鹼紝鍚﹀垯榪斿洖None錛圥ython鐨勭┖鍊鹼級銆?br />
Python鍗蟲槸鍔ㄦ佽璦錛屽畠涓嶉渶瑕佹樉紺烘暟鎹被鍨嬪0鏄?/b>錛岃祴鍊肩殑鍚屾椂鍗沖畬鎴愬彉閲忓0鏄庛傚張鏄己綾誨瀷璇█錛屼竴涓彉閲忎竴鏃﹁幏寰椾竴涓暟鎹被鍨嬶紝瀹冨疄闄呬笂灝變竴鐩存槸榪欎釜綾誨瀷鐨勪簡銆?br />
Python閲岀殑鈥滃璞♀濇蹇碉紝榪欓噷鐨勨滃璞♀濅笉鍚屼簬浠ュ墠鎺ヨЕ鍒扮殑OO閲岀殑瀵硅薄錛孭ython閲岀殑瀵硅薄瀹氫箟鏇翠負騫挎硾銆備竴涓▼搴忓潡錛屼竴涓彉閲忥紝鐢氳嚦涓涓瓧絎︿覆閮藉彲浠ユ槸涓涓璞°傚叾鍏蜂綋鍚箟榪橀渶瑕佹牴鎹笂涓嬫枃鏉ュ垽鏂?br />
涓夌閲嶈鐨勫唴緗暟鎹被鍨嬶細Dictionary錛孡ist錛孴uple錛?/b>
Dictionary瀵瑰簲浜嶤++涓殑map鍜孞ava涓殑hashtable錛屼篃灝辨槸涓涓敭鍊煎闆嗗悎銆?br />List瀵瑰簲浜嶤++涓殑vector鍜宩ava涓殑ArrayList錛屼竴涓彲浠ュ姩鎬佽嚜鍔ㄦ墿灞曠殑鏁扮粍銆?br />Tuple鏄竴涓笉鍙彉鐨刲ist錛屼竴鏃﹀垱寤哄氨涓嶈兘浠ユ柟寮忔敼鍙樺畠錛屼絾鏄ソ鍦≒ython鎻愪緵浜嗗湪Tuple鍜孡ist涔嬮棿鐩鎬簰杞崲鐨勫嚱鏁般?br />闇瑕佹敞鎰忕殑鏄疞ist鍜孴uple鏄彲浠ュ瓨鍌ㄦ販鍚堢被鍨嬬殑鏁扮粍鐨勶紝騫朵笖閮藉彲浠ラ氳繃绱㈠紩鍙栧鹼紙鍖呮嫭璐熺殑绱㈠紩鍊鹼紝鍏惰〃紺轟粠閫嗗簭鍙栧鹼級
For璇彞錛?/b>
Python閲岀殑for璇彞涓嶅悓浜嶤/C++涓殑for錛屾洿綾諱技浜嶤#涓殑foreach
寰幆鎴栬呮槸Java涓殑for (int i : IntArray)
銆侾ython鐨刦or璇彞闇瑕侀厤鍚堜竴涓猺ange鍑芥暟浣跨敤錛屽畠鏈変笁涓弬鏁幫紝騫惰繑鍥炰竴涓猅upe鏁扮粍鐢ㄤ簬琛ㄧず绱㈠紩錛屼笁涓弬鏁版槸start,stop,step錛屼緥濡俽ange錛?錛?錛?錛夊垯榪斿洖[0錛?錛?錛?錛?]錛況ange錛?錛?錛岋紞1錛夊垯榪斿洖[5錛?錛?錛?錛?]銆?br />
瀛楃涓叉牸寮忓寲錛?/b>
涓嶤涓被浼?d錛?f錛?s絳夌瓑錛岄氳繃瀛楃涓茬殑join鍑芥暟鍙互鏂逛究鐨勫皢list鐨勫唴瀹瑰悎騫舵垚瀛楃涓層?br />
and/or錛?/b>
and鍜宱r璐熻矗鎵ц甯冨皵閫昏緫榪愮畻錛屼絾鏄畠浠笉榪斿洖甯冨皵鍊艱屾槸榪斿洖瀹冧滑瀹為檯榪涜姣旇緝鐨勫間箣涓銆傞潪絀虹殑瀵硅薄琚涓烘槸鐪燂紝絀哄璞″垯琚涓烘槸鍋囥?b>and榪愮畻浼氳繑鍥炵涓涓亣鍊鹼紝鑰宱r榪愮畻榪斿洖絎竴涓湡鍊鹼紝鍏跺畠閮ㄥ垎閮戒笉浼氳璁$畻鍒?/b>銆?br />
lambda鍑芥暟錛?/b>
涓縐嶅揩閫熷畾涔夌殑鍗曡鏈灝忓嚱鏁幫紝鍙湁涓琛岋紝綾諱技浜庡唴鑱旂殑鎰熻銆備緥濡備竴涓緥瀛愶細
ld = lambda i : i*i
ld(10) # == 100
鐞嗚涓妉ambda鍑芥暟鍙互鏈夊涓弬鏁幫紙鍖呮嫭鍙夊弬鏁幫級騫朵笖闅愬惈鐨勮繑鍥炲崟涓〃杈懼紡鐨勫箋?br />
寮傚父澶勭悊錛?/b>
Python涓嬌鐢?b>try...except鏉ュ鐞嗗紓甯革紝浣跨敤raise鏉ュ紩鍙戝紓甯搞傚茍涓旓紝涓涓猠xcept鍚庨潰鍙互璺熶竴涓猠lse鍧楁潵琛ㄧず娌℃湁鎹曡幏棰勬湡寮傚父鏃剁殑琛屼負銆備竴涓猼ry鍧楀悗闈篃鍙互璺熶竴涓?b>finally鍧楁潵淇濊瘉涓浜涗唬鐮佹繪槸琚墽琛屽埌錛屾瘮濡傛墦寮鏂囦歡鍚庣殑鍏抽棴鎿嶄綔銆?br />
娉ㄩ噴錛?br />Python閲屼嬌鐢?b>#鏉ヤ綔涓哄崟閫夋敞閲婂紑濮嬬錛屼嬌鐢ㄤ笁涓啋鍙蜂綔涓哄琛屾敞閲?""content"""錛?br />闇瑕佹敞鎰忕殑鏄悗涓縐嶅艦寮忕殑娉ㄦ剰緇忓父琚敤鏉ヤ綔涓哄嚱鏁版垨鑰呯被鐨?璇存槑",鍐欏湪榪欓噷鐨勫唴瀹瑰彲浠ヨ鍏朵嬌鐢ㄨ呭綋浣滃弬鑰冩墜鍐屾潵浣跨敤錛孭tyhon閲屾墍鏈夊璞¢兘鍏鋒湁涓涓唴緗殑__doc__灞炴?/b>錛岄氳繃瀹冨彲浠ユ煡鐪嬪悇涓璞$殑璇存槑錛屽簲璇ュ吇鎴愬啓__doc__鐨勪範鎯備竴鑸叾鏍煎紡涓?b>棣栬浠ュぇ鍐欏瓧姣嶅紑濮嬶紝鍙ュ彿緇撳熬銆傜浜岃鏄┖琛岋紝浠庣涓夎寮濮嬫槸璇︾粏鐨勬弿榪?/b>銆?br />
寮曞彿錛?br />Python閲屾湁鍗曞紩鍙鳳紝鍙屽紩鍙峰拰涓夊紩鍙楓傚叾涓?b>鍗曞紩鍙峰拰鍙屽紩鍙烽兘鍙互鐢ㄦ潵琛ㄧず瀛楃涓?/b>錛屼緥濡?br />print 'string' == "string" 灝嗕細鎵撳嵃鍑篢rue
璁劇疆榪欎袱縐嶅瓧絎︿覆寮曞彿鐨勭洰鐨勬槸涓轟簡綆鍖栧紩鍙風殑琛ㄧず錛屼緥濡傚鏋滃瓧絎︿覆閲屽惈鏈夊紩鍙鋒湰韜氨闇瑕?b>浣跨敤\鏉ヨ繘琛屾爣璇?/b>錛屼緥濡傦細'let\'s go!'錛屸渉e said:\"get out!\"鈥濄?br />濡傛灉瀛楃涓查噷鍚湁澶ч噺榪欑鎯呭喌浼氭樉寰楅潪甯擱夯鐑︼紝鍙互浜ゆ浛浣跨敤鍗曞紩鍙峰拰鍙屽紩鍙鋒潵閬垮厤榪欑鎯呭喌銆備笂闈㈢殑渚嬪瓙鍙互鏀逛負錛?let's go!"錛?he said:"get out!"'銆?br />鑰屼笁寮曞彿灝辨槸鐢ㄦ潵琛ㄧず涓涓琛屽瓧絎︿覆銆傚畠浠粡甯歌鐢ㄦ潵瀹氫箟鏂囨。瀛楃涓?/b>錛屽畠鐨勯琛屼互澶у啓瀛楁瘝寮濮嬶紝鍙ュ彿緇撳熬銆傜浜岃鏄┖琛岋紝浠庣涓夎寮濮嬫槸璇︾粏鐨勬弿榪般傚緩璁粠涓寮濮嬪氨閬靛畧榪欎釜鎯緥銆?br />
浠lass寮澶達紝pass琛ㄧず緇撴潫錛堝疄闄呬笂娌℃湁鐗瑰畾鐨剈錛夛紝渚嬪涓涓畝鍗曠殑綾誨畾涔変負
class Person:
聽聽聽 pass
濡傛灉瑕佽〃紺虹戶鎵垮叧緋誨彧闇瑕佸皢鍩虹被鐢ㄦ嫭鍙峰洖鍒扮被鍚嶅悗闈㈠嵆鍙紝Python鏀寔澶氶噸緇х畫錛屾瘡涓熀綾諱腑闂翠互閫楀彿闅斿紑銆?br />class Student錛圥erson錛夛細
聽 pass
榪欓噷鐨刾ass璇彞浠呰〃紺哄崰浣嶄箣鐢紝娌℃湁鐗瑰埆鐨勫惈涔夈?br />
綾繪垚鍛樺畾涔夛細
__init__鏂規硶錛岃繖涓嚱鏁扮殑鍔熻兘寰堢被浼間簬Java鎴栬匔++涓殑鏋勯犲嚱鏁幫紝浣嗘槸浠嶅瓨鍦ㄤ竴鐐圭粏灝忕殑宸埆錛宊_init__鍑芥暟鐨勭涓涓弬鏁頒竴瀹氭槸self錛岀被浼間簬C++涓殑this鎸囬拡銆?br />__init__鏂規硶鐨勫畾涔夊茍涓嶆槸蹇呴』鐨?/b>錛屼絾鏄竴鏃︿綘瀹氫箟浜嗗畠錛屽氨蹇呴』鏄劇ず鐨?/b>璋冪敤鐖剁被鐨刜_init__鏂規硶銆?br />闇瑕佹敞鎰忕殑鏄紝鎵鏈夌殑綾繪垚鍛樻柟娉曢兘蹇呴』瀹氫箟涓涓?b>鍙傛暟錛坰elf錛?/b>錛?b>浣嗗畠鐨勫悕瀛椾笉鏄竴瀹氱殑錛屽叾浣滅敤綾諱技浜嶤++涓殑this鎸囬拡銆?br />__del__鏂規硶錛岀被浼間簬鏋愭瀯鍑芥暟錛屽湪浣跨敤del璇彞鐨勬椂鍊欒璋冪敤銆?br />
閲嶈澆錛?/b>
Python鐨勭被娌℃湁浠諱綍褰㈠紡鐨勫嚱鏁伴噸杞?/b>錛屽嵆涓涓柟娉曞悕縐板彧鑳藉搴斾竴涓柟娉曪紝濡傛灉瀛愮被涓畾涔夌殑涓庡熀綾諱腑鍚屽悕鐨勬柟娉曪紝鍒欎細灝嗗叾瑕嗙洊鎺夈?br />
鎴愬憳灞炴э細
Python涓湁涓ょ綾誨瀷鐨勬垚鍛樻柟娉曪細鏅氱被鏂規硶鍜屼笓鐢ㄧ被鏂規硶銆?br />鎴愬憳涔熸湁涓ょ璁塊棶綰у埆錛?b>鍏紑鐨勫拰縐佹湁鐨?/b>銆?br />鍏朵腑鍏紑鍜岀鏈夋垚鍛樼殑琛ㄧず娌℃湁鐗瑰埆鐨勫叧閿瓧錛屽彧鏄綋鐜扮殑鏂規硶鍚嶇О涓婏紝縐佹湁鎴愬憳鐨勫悕縐頒互涓や釜鐭皬鐨勪笅鍒掔嚎浣滀負寮濮嬩緥濡傦細
class A:
聽 __privatevalue
聽 publicvalue
聽 def __set(self, v):
聽聽聽 __privatevalue = v
聽 def get(self):
聽聽聽 return publicvalue
聽 pass
騫朵笖錛屼竴涓垚鍛樻槸灞炰簬綾葷殑榪樻槸灞炰簬瀵硅薄鐨勶紝鏄氳繃瀹氫箟榪欎釜鍙橀噺鐨勫煙鏉ョ‘瀹氱殑錛屽畾涔夊湪綾諱綋鍐呯殑鍙橀噺鐢辨墍鏈夋垚鍛樺叡浜紝閫氳繃self瀹氫箟鐨勫彉閲忓垯涓烘垚鍛樺彉閲忋?br />姝ゅ錛岀被鐨勬垚鍛樻柟娉曡繕鍒嗕負錛?b>鏅氱被鏂規硶鍜屼笓鐢ㄧ被鏂規硶銆傛櫘閫氭柟娉曠殑瀹氫箟涓庢櫘閫氬嚱鏁板畾涔夌被浼鹼紝瀹冩槸鍏紑鐨勶紝鍦ㄧ被澶栭儴鍙互琚皟鐢ㄣ傝岀被鐨?b>涓撶敤鏂規硶錛屾病鏈夌壒孌婄殑鍏抽敭瀛楁潵琛ㄧず錛屽彧鏄湪鏂規硶鐨勫悕縐板墠鍚庡悇鍔犱笂涓や釜鐭殑涓嬪垝綰匡紝渚嬪def __getitem__銆傝繖縐嶄笓鐢ㄦ柟娉曟槸鐢辯敤鎴鋒樉寮忚皟鐢ㄧ殑錛屽畠鏈夌偣鎿嶄綔絎﹂噸杞?/b>鐨勬剰鎬濆湪閲岄潰錛屼絾鏄姛鑳芥瘮鎿嶄綔絎﹂噸杞借寮哄ぇ涓浜涖侾ython鍏佽鎴戜滑鑷繁瀹氫箟闇瑕佺殑綾諱笓鐢ㄦ柟娉曪紝渚嬪浠諱綍瀹氫箟浜哶_cmp__鏂規硶鐨勭被灝卞彲浠ョ敤錛濓紳榪涜姣旇緝錛屼換浣曞畾涔変簡__len__鏂規硶鐨勭被灝卞彲浠ョ敤len(instance)榪涜鍙栭暱搴︺?br />
涓夈佹爣鍑嗗簱
1.鏂囦歡鎿嶄綔
Python涓湁涓涓唴緗嚱鏁皁pen鍙互鐢ㄦ潵鎵撳紑鏂囦歡
file = open("pictures/dog.bmp","rb")
open鍑芥暟鍙互鎺ュ彈涓変釜鍙傛暟錛?b>鏂囦歡鍚嶏紝妯″紡鍜岀紦鍐插尯鍙傛暟錛屼絾鏄彧鏈夋瘡涓涓弬鏁版槸蹇呴』鐨勶紝鏂囦歡浼氶粯璁や互鏂囨湰鏂瑰紡鎵撳紑銆?br />鏂囦歡鐨勮鍙栧拰C涓被浼鹼紝tell()榪斿洖褰撳墠鏂囦歡浣嶇疆錛宻eek鏉ョЩ鍔ㄦ枃浠舵搷浣滅殑浣嶇疆銆傚叿浣撶殑鍑芥暟浣跨敤鏂規硶鍙互浣跨敤print seek.__doc__鏉ユ煡鐪?br />
澶勭悊I/O閿欒錛?br />try:
聽 file = open(filename, "rb", 0)
聽 try:
聽聽聽 file.seek(-128,2)
聽聽聽 data = file.read(128)
聽聽聽 file.seek(0,2)
聽聽聽 file.write("succeeded")
聽聽聽 finally:
聽聽聽聽聽 file.close()
聽 expect IOError:
聽聽聽 pass
Python鎻愪緵浜嗕竴涓猳s.path妯″潡鏉ヨ繘琛岀洰褰曟搷浣滐紝鍏蜂綋浣跨敤鏂規硶灝變笉璇︾粏鍐欏嚭鏉ヤ簡錛岀敤榪囧嚑嬈″氨璁頒綇浜嗐?br />
2.搴忓垪鍖?/font>
鏍囧噯搴撻噷鏈変袱涓ā鍧楅兘鎻愪緵榪欎釜鍔熻兘錛?b>pickle鍜?b>cPickle錛岀敤浜庡皢瀵硅薄瀛樺偍鍒版枃浠朵腑鑰屽悗鍐嶈鍙栧嚭鏉ャ?br />浣嗘槸鍚庤呮槸浣跨敤C璇█鍐欑殑錛岄熷害瑕佹瘮鍓嶉潰鐨勫揩寰堝錛屼絾鏄姛鑳介兘鏄竴鏍風殑銆?br />浣跨敤涔熷緢綆渚夸富瑕佸氨鏄嬌鐢╠ump鍜宭oad鍑芥暟
錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞寰呯畫錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞
錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛嶏紞錛?br />鍋氭父鎴忕湡鏄緵鑻︼紝闇瑕佸鐨勪笢瑗垮お澶氫簡錛屾壘涓嶅埌鏂瑰悜
鐜板湪鐪熸槸鏈夌偣鐞嗚В閭e彞璇濓細鈥滃綋浣犳妸涓涓叴瓚o紝鍙樻垚浜嗚亴涓氫箣鍚庯紝鎮插墽灝卞紑濮嬩簡錛佲?br />涓轟簡褰撳勾蹇冮噷鐨勫叴瓚o紝杞簡鏂瑰悜鏉ユ悶娓告垙錛屾垜鎯崇幇鍦ㄦ槸閬囧埌鐡墮浜嗭紝鍔ㄥ姏涓嶈凍銆傘傘傘?br />
1.g++緙栬瘧闂
#include聽<iostream>
using聽namespace聽std;
//headers
void聽show();
int聽main()
{
聽聽聽聽cout<<"library test function show():聽";
聽聽聽聽show();
聽聽聽聽return聽0;
}
#include聽<iostream>
using聽namespace聽std;
void聽show()
{
聽聽聽聽cout<<"hello聽library聽test!"<<endl;
}
闈欐佸簱錛?br />棣栧厛緙栬瘧libtest.cpp鐢熸垚涓棿鏂囦歡 libtest.o
g++ -c libtest.cpp
鐒跺悗灝嗗叾鎵撳寘鎴愰潤鎬佸簱 staticlib.a
ar -rc staticlib.a libtest.o
鏈鍚庝嬌鐢ㄩ潤鎬佸簱涓巑ain.cpp榪涜緙栬瘧寰楀埌鎵ц鏂囦歡staticlib
g++ -o staticlib main.cpp staticlib.a
榪愯./staticlib 鎴愬姛錛侊紒
鍔ㄦ佸簱錛?br />棣栧厛鍚屾牱闇瑕佺紪璇戠敓鎴愪腑闂存枃浠?b>libteset.o錛屼絾涓鑸姞涓?fPIC閫夐」銆?br />鍏舵剰鎬濇槸浣嶇疆鐙珛浠g爜 錛屾寚紺虹紪璇戠▼搴忕敓鎴愮殑浠g爜瑕侀傚悎鍏變韓搴撶殑鍐呭榪欐牱鐨勪唬鐮佽兘澶熸牴鎹澆鍏ュ唴瀛樼殑浣嶇疆璁$畻鍐呴儴鍦板潃
g++ -c -fPIC libtest.cpp
鐒跺悗鎵撳寘 鐢熸垚鍔ㄦ佸簱dynamiclib.so
g++ -shared libtest.o -o dynamiclib.so
鏈鍚庣敓鎴愬彲鎵ц鏂囦歡dynamiclib
g++ -o dynamic main.cpp dynamiclib.so
榪愯./dynamiclib 緇撴灉鍑洪敊浜嗭紝鎻愮ず鎵句笉鍒板姩鎬佸簱銆?/b>
鍘熷洜鏄痩inux涓嬪姩鎬佸簱涓嶅儚windows閲岄偅鏍蜂細鑷姩瀵繪壘褰撳墠鐩綍涓嬬殑dll錛岃繖闇瑕佹妸緙栬瘧鍑烘潵鐨勫姩鎬佸簱鏀懼埌緋葷粺鐨?/usr/lib 鎴?/lib涓嬫墠鑳借繍琛岀▼搴忋?br />鎴栬呰繕鍙互鍦ㄧ紪璇戠殑鏃跺欏氨鎸囧畾璺緞涔熷彲浠ワ紝渚嬪鍦ㄦ渶鍚庝竴姝ョ殑鏃跺欙細
g++ -o dynamic main.cpp ./dynamiclib.so
鍐嶆榪愯./dynamiclib 鎴愬姛錛侊紒