Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
img
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Python

Build Status

еЯЇдЇОmitmдЄ≠йЧідЇЇзЪД嚥еЉ?иОЈе?ЦжЙАжЬЙеЕђдЉЧе?ЈеОЖе?≤жЦЗзЂ†пЉМиѓДиЃЇпЉМйШЕиѓїйЗ?

feature
1пЉМжФѓжМ?ж∞іеє≥жЙ©е±Х
2пЉМжФѓжМ?еҐЮйЗ?жЫіжЦ∞дЄОиЗ™еК®еМЦжКУе?ЦйШЕиѓїйЗ?пЉМиѓДиЃЇжХ∞ж?Ѓ
3пЉМжФѓжМ?жКУе?Це∞?з¶?е?ОзїІзї≠ж?Ґе§?жКУе?Ц
4пЉМжФѓжМ?е?ДйШґжЃµжЧґйЧійҐСзОЗжОІеИґ
5пЉМжФѓжМ?жМ?зї≠зЫСжОІжМЗеЃЪеЕђдЉЧе?Ј
дї£з†?жЪВдЄ?еЉАжЇ?пЉМе¶ВжЬЙйЧЃйҐШдЇ§жµ?е?ѓеЬ®иѓ•дїУеЇУж??issue,еѓєеЇФе§Дз?Жжµ?з®ЛеЫЊе¶ВдЄЛпЉЪ

nice_download.py е§ЪзЇњз®ЛжЦЗдїґдЄЛиљљеЩ®

з?ЖиЃЇеЬ®е§ІеЮЛжЦЗдїґдЄЛиљљпЉМеЄ¶еЃљеЕЕиґ≥зЪДжГЕеЖµдЄЛпЉМе?ѓеҐЮеК†жХ∞е??еА?дЄЛиљљйАЯеЇ¶
еОЯз?ЖжШѓе§ЪзЇњз®ЛеѓєзЫЃж†ЗжЦЗдїґеИЖе?ЧдЄЛиљљ
1,е?СйА?headиѓЈж±ВиОЈе?ЦзЫЃж†ЗжЦЗдїґжАїе§Іе∞?пЉМдї•е?КељУеЙ?жШѓе?¶жФѓжМ?еИЖе?ЧдЄЛиљљ(иѓ¶жГЕ:httpе??иЃЃheaderе§іrangeе?КresponseзЪДcontent-range)пЉМзО∞еЬ®еЯЇжЬђйГљжФѓжМ?
2,дЄЛиљљеЙ?еИЫеїЇдЄАдЄ™еТМи¶?дЄЛиљљжЦЗдїґдЄАж†Је§Іе∞?зЪДжЦЗдїґ
3,ж†єж?Ѓ1дЄ≠иОЈеЊЧзЪДжЦЗдїґе§Іе∞?еИЖе?Че§ЪзЇњз®Л,е?ДдЄ™зЇњз®ЛдЄЛиљљдЄ?е?МзЪДжХ∞ж?Ѓе?Ч
е∞?еЮЛжЦЗдїґе?ѓиГљзЬЛдЄ?еЗЇеК†йАЯжХИжЮЬпЉМеЬ®е§ІеЮЛжЦЗдїґдЄКе∞±дЉЪжЛЙе§ІеЈЃиЈ?
еЕ≥дЇОhttpзЪДrangeзЙєжАІпЉЪ
жЬЙдЇЫжЦЗдїґдЄЛиљљеЩ®еЬ®дЄЛиљљдЄ≠жЦ≠дєЛе?Ое?ѓдї•еЬ®дЄ≠жЦ≠дљ?зљЃзїІзї≠дЄЛиљљпЉМиАМдЄ?ењЕйЗ?жЦ∞еЉАеІЛзЪДеОЯеЫ†е∞±жШѓеИ©зФ®дЇЖжФѓжМ?rangeзЪДзЙєжАІ
иЃ∞ељХдЇЖдЄ≠жЦ≠жЧґзЪДжЦЗдїґе??зІїдљ?зљЃ,еЬ®еЃЮзО∞жЧґе?™и¶?еЬ®дЄ≠жЦ≠еЉВеЄЄзЪДжЧґеАЩиЃ∞ељХжЦЗдїґе??зІїдљ?зљЃеИ∞дЄіжЧґжЦЗдїґ
дЄЛжђ°зїІзї≠дЄЛиљљиѓїе?ЦдЄіжЧґжЦЗдїґдЄ≠зЪДе??зІїе?≥е?ѓжФѓжМ?жЦ≠зВєдЄЛиљљ,дЄЛиљљеЃМжИ?жЧґеИ†йЩ§иЃ∞ељХжЦЗдїґе??зІїзЪДдЄіжЧґжЦЗдїґе?≥е?ѓ
иѓіжШОпЉЪ
nice_download.pyжШѓе§ЪзЇњз®Лж®°еЉ?,жЙАдї•еОїйЩ§жЦ≠зВєдЄЛиљљеКЯиГљпЉМе?¶еИЩзїіжК§дЄіжЧґжЦЗдїґе??зІїдљ?зљЃжѓФзїіжК§е?ХдЄАињЫз®ЛзЪДдЄіжЧґжЦЗдїґе??зІїдљ?зљЃи¶?е§?ж?ВзЪДе§Ъ
жЯ•зЬЛеЄЃеК©пЉЪpython nice_download.py -h

еЯЇдЇОtensorflowзЪДй™Миѓ?з†?иѓЖеИЂ

дЊ?иµЦ:
pip install tensorflow
pip install numpy

0x01,cd tensorflow
0x02,ж®°еЮЛиЃ≠зїГпЉЪpython train.py
0x03,й™Миѓ?й™Миѓ?пЉЪpython cnn_test.py

еЈ≤жЬЙе§Іе§ЪзЫЄеЕ≥ж°ИдЊЛпЉМжµЛиѓХзЫЄеЕ≥жАїзїУдЄОжИ™еЫЊе¶ВдЄЛ:

иѓ¶зЫЄиѓіжШОзЫЄеЕ≥жИ™еЫЊ

жАїзїУжЦЗж°£пЉЪеЯЇдЇОжЬЇеЩ®е≠¶дє†(TensorFlow)зЪДе§?ж?Вй™Миѓ?з†?иѓЖеИЂ.pdf

redpackage.py && red_package_optimize.py дЄАзІ?зЇҐеМЕеИЖйЕ?жА?иЈѓ

red_package_optimize.pyдЄЇдЉШеМЦзЙИпЉМredpackage.pyзЪДrangeжЬЙзВєжµ™иієеЖЕе≠ШпЉМжѓФе¶ВеЬ®зЇҐеМЕдЄ™жХ∞зЙєеИЂе§ІзЪДжГЕеЖµдЄЛ

жМЗеЃЪзЇҐеМЕжАїйЗСйҐ?пЉМеЖ?жМЗеЃЪзЇҐеМЕзЪДдЄ™жХ∞пЉМиОЈеЊЧжѓ?дЄ™зЇҐеМЕеИЖйЕ?йЗСйҐ?иѓ¶жГЕ

дЊЛпЉМзЇҐеМЕжАїйЗСйҐ?дЄЇ10еЕГпЉМеИЖжИ?7дЄ™
вЮЬ  Py git:(master) вЬЧ py redpackage.py 10 7
[0.57, 2.37, 1.91, 0.32, 1.3, 2.24, 1.29]
зђђ 1 дЄ™зЇҐеМЕйЗСйҐ?:0.57еЕГ
зђђ 2 дЄ™зЇҐеМЕйЗСйҐ?:2.37еЕГ
зђђ 3 дЄ™зЇҐеМЕйЗСйҐ?:1.91еЕГ
зђђ 4 дЄ™зЇҐеМЕйЗСйҐ?:0.32еЕГ
зђђ 5 дЄ™зЇҐеМЕйЗСйҐ?:1.3еЕГ
зђђ 6 дЄ™зЇҐеМЕйЗСйҐ?:2.24еЕГ
зђђ 7 дЄ™зЇҐеМЕйЗСйҐ?:1.29еЕГ
й™Миѓ?:зЇҐеМЕжАїйЗСйҐ? is 10.0еЕГ, еИЖйЕ?е?О res sum is 10.0еЕГ

ac.py е≠Чзђ¶дЄ≤ж?Ь糥зЃЧж≥ХпЉИtireж†С+ACиЗ™еК®жЬЇ)

е≠¶дє†иЃ∞ељХ:
е¶ВжЮЬдљ†зЪДжЬђеЬ∞е?™жЬЙеЗ†дЄ™пЉМеЗ†е??дЄ™иѓ?пЉМйВ£дєИж≤°жЬЙењЕи¶?дљњзФ®пЉМзЫіжО•е≠ШйЕ?зљЃжЦЗдїґпЉМе≠ЧеЕЄжЯ•жЙЊе?≥е?ѓпЉМ
ињЩжѓФе?Сapiе?СиµЈhttpиѓЈж±Ви¶?ењЂзЪДе§ЪгАВдљЖе¶ВжЮЬиѓ?зЪДжХ∞зЫЃдЄ?жЦ≠еҐЮеК†пЉМйВ£дєИе?ОжЬЯе∞ЖдЄ?еИ©дЇОзїіжК§пЉМ
йЬАи¶?жЬ?еК°еМЦгАВ

ињЩдЄ™зЃЧж≥Хе≠ШеЬ®дЇОеЃЮйЩЕеЬЇжЩѓ,еИ§жЦ≠жЯ?дЄ™е?Хиѓ?жШѓе?¶жШѓжХ?жДЯиѓ?пЉМе∞±жґЙе?КеИ∞е≠Чзђ¶дЄ≤жЯ•жЙЊгАВ
жХ?жДЯиѓ?襀е∞?и£ЕжИ?дЇЖдЄАдЄ™apiжО•е?£,дљњзФ®иµЈж?•дєЯеЊИжЦєдЊњ,зЫіжО•е?Сapiж??дЇ§е?Хиѓ?,
зЬЛињФеЫЮзїУжЮЬе∞±зЯ•й?УжШѓе?¶еСљдЄ≠,еСљдЄ≠дЇЖеИЩе≠Чзђ¶дЄ≤е≠ШеЬ®,и°®жШОжЯ•жЙЊеИ∞дЇЖгАВ

йЬАи¶?жХ∞ж?ЃзїУжЮДдЄОзЃЧж≥ХзЯ•иѓЖпЉЪ
е?ВиАГжЦЗж°£1(жµЈйЗ?жХ∞ж?Ѓе§Дз?ЖдєЛTireж†СпЉИе≠ЧеЕЄж†С))пЉЪ
      http://blog.csdn.net/ts173383201/article/details/7858598
е?ВиАГжЦЗж°£2(ACиЗ™еК®жЬЇжАїзїУ)пЉЪ
      http://blog.csdn.net/mobius_strip/article/details/22549517

trieзЪДж†ЄењГжА?жГ≥жШѓз©ЇйЧіж?ҐжЧґйЧі,иЈЯељ©иЩєи°®зЪДжА?жГ≥дЄАиЗі,дљЖtrieж†СдЄ?жШѓељ©иЩєи°®,
зЃАиАМи®АдєЛ,trieж†СеИ©зФ®е≠Чзђ¶дЄ≤зЪДеЕђеЕ±еЙ?зЉАж?•йЩ?дљОжߕ胥жЧґйЧізЪДеЉАйФАдї•иЊЊеИ∞ж??йЂШжХИзОЗзЪДзЫЃзЪДгАВ

еЃГжЬЙ3дЄ™еЯЇжЬђжАІиі®пЉЪ
      ж†єиКВзВєдЄ?еМЕе?Ђе≠Чзђ¶пЉМйЩ§ж†єиКВзВєе§Цжѓ?дЄАдЄ™иКВзВєйГље?™еМЕе?ЂдЄАдЄ™е≠Чзђ¶гАВ
      дїОж†єиКВзВєеИ∞жЯ?дЄАиКВзВєпЉМиЈѓеЊДдЄКзї?ињЗзЪДе≠Чзђ¶ињЮжО•иµЈж?•пЉМдЄЇиѓ•иКВзВєеѓєеЇФзЪДе≠Чзђ¶дЄ≤гАВ
      жѓ?дЄ™иКВзВєзЪДжЙАжЬЙе≠?иКВзВєеМЕе?ЂзЪДе≠Чзђ¶йГљдЄ?зЫЄе?МгАВ

е§?еИґдЇЖеИЂдЇЇзФїзЪДеЫЊпЉМе§ІиЗіе∞±жШѓдЄАзІ?е¶ВдЄЛзЪДж†СзїУжЮД,йЬАи¶?зФ®иѓ≠и®АжЮДйА†ињЩж£µж†Се?≥е?ѓ:

fail жМЗйТИзЪДз?ЖиІ£еЫЊиІ£,дї•дЄЛеЖЕеЃєйЬАи¶?дїФзїЖиѓї
е?ВиАГпЉЪhttp://www.cnblogs.com/crazyacking/p/4659501.html

ж†СдЄКзЪДиѓ?еИЖеИЂжШѓпЉЪ
{ he , hers , his , she}
жМЙеЫЊжЙАз§ЇеИЖжИ?3е±ВгАВзЬЛеИ∞зђђдЄЙе±ВпЉМжШѓ"she"пЉМеЕґдЄ≠пЉЪ
вС†sжМЗе?Сroot
вС°hеЕИжЙЊеИ∞sзЪДfailжМЗйТИ
е?СзО∞жШѓ0е?ЈжМЗйТИпЉМдЄ?жШѓhпЉМзДґе?Оhе∞±дЄ?йЂШеЕідЇЖпЉМеЖ?йЧЃйЧЃsзЪДfailжМЗйТИrootпЉЪвАЬдљ†жЬЙж≤°жЬЙеДње≠?еТМжИСе?Ме??е?ЂhзЪДвА?
rootиѓіпЉЪвАЬжЬЙпЉМдљ†жМЗе?СдїЦе?ІвА?пЉМзДґе?Оhе∞±йЂШеЕізЪДжМЗе?СдЇЖзђђдЄАи°МзЪДh.
вСҐeеЉАеІЛжЙЊдЇЖпЉМй¶ЦеЕИйЧЃдїЦиА?зИЄhпЉЪвАЬдљ†зЪДfailжМЗйТИжМЗз?Аи∞?вА?
hиѓіпЉЪвАЬеЫЊдЄКзђђдЄАи°МйВ£дЄ™hеХКвА?
зДґе?Оeе∞±е±?饆е±?饆еЬ∞иЈСеОїйЧЃеЫЊдЄКзђђдЄАи°МйВ£дЄ™hпЉЪвАЬдљ†жЬЙж≤°жЬЙе??е≠ЧеТМжИСдЄАж†ЈзЪДеДње≠?еХКвА?
еЫЊдЄКзђђдЄАи°МйВ£дЄ™hиѓіпЉЪвАЬжЬЙпЉМдїЦеЬ∞е?АжШѓxxxвА?
жЬАе?ОeзЪДfailжМЗйТИе∞±жМЗе?СxxxеЬ∞е?АпЉМдєЯе∞±жШѓзђђдЄАи°МйВ£дЄ™eдЇЖ
е?СзО∞ињЩж†ЈпЉМе¶ВжЮЬдЄАдЄ™е≠Чзђ¶дЄ≤жЯ•еИ∞зђђдЄЙи°МзЪДeдї•е?ОзЪДе≠Чзђ¶жЙ?дЄ?еМєйЕ?пЉМйВ£иѓіжШОдїЦеЙ?й?ҐеЇФиѓ•жЬЙдЄ™вАШheвАЩ
еИЪе•љeзЪДе§±иі•жМЗйТИжМЗе?СзЪДжШѓзђђдЄАи°МзЪДвАШhe...вАЩзЪДйВ£дЄ™eпЉЫ
ињЩж†Је∞±дЄ?зФ®дїОhеЉАеІЛеЖ?жЙЊдЄАй??пЉМиАМжШѓжО•з?АзђђдЄАи°МзЪДeзїІзї≠еЊАе?ОжЙЊпЉМдїОиАМиКВзЬ?дЇЖжЧґйЧі.
вЮЬ  ~ du -h word.md && wc -l word.md
1.0M  word.md
57193 word.md

жЬђеЬ∞жµЛиѓХдЇЖдЄАдЄЛпЉМ57000ж?°иЃ∞ељХе§ІдЇОе?†1Mз°ђзЫШз©ЇйЧіпЉМйВ£дєИ6MзЪДз©ЇйЧіе§ІзЇ¶еМЕе?ЂиЃ∞ељХ34Wж?°иЃ∞ељХ,
жИСдЉ†еИ∞githubзЪДword.mdж≤°жЬЙеЗ†дЄ™е≠Чзђ¶,е?™е?ЪдЇЖжЉФз§Ї,иАМдЄФжѓ?дЄ™е?Хиѓ?ињШеК†дЇЖrankз≠ЙзЇІпЉМ\tеИґи°®зђ¶,еЃЮйЩЕе?†зФ®з©ЇйЧіеЇФиѓ•жЫіе∞?,
зФЯдЇІзОѓеҐГзФЪиЗ≥е?ѓдї•зЫіжО•е∞ЖињЩдЇЫжХ∞ж?ЃзЉУе≠ШеИ∞еЖЕе≠ШдЄ≠гАВ

жµЛиѓХж?Ь糥жМЗеЃЪе≠Чзђ¶дЄ≤пЉЪ

жЯ•жЙЊеИ∞дЇЖ
вЮЬ  ~ python ac.py lock
Good ! Find it, the item is:
[(0, 3, 'lock', 1, 2)]

жЯ•жЙЊеИ∞дЇЖ
вЮЬ  ~ python ac.py stop
Good ! Find it, the item is:
[(0, 3, 'stop', 2, 3)]

ж≤°жЬЙжЯ•жЙЊеИ∞
вЮЬ  ~ python ac.py test
Sorry, The item not in file dict

е¶ВжЮЬжЯ•жЙЊеИ∞дЇЖињФеЫЮдЄАдЄ™listпЉМlistдЄ≠itemз±їеЮЛдЄЇtuple, еєґдЄФеМЕе?ЂдЇЖеЬ®ж†СдЄ≠еМєйЕ?зЪДиµЈ,зїИзВєдљ?зљЃindex

calc24.py зЃЧ24жЄЄжИ?е∞?з®ЛеЇ?

жЄЄжИ?иІДеИЩпЉЪзїЩеЃЪ4дЄ™жХ∞пЉМе?ѓдї•жЙІи°МзЪДињ?зЃЧжЬЙ + - * / , ж±ВеЗЇзЃЧзЪДзїУжЮЬжШѓ24зЪДзЃЧж≥ХињЗз®Л

get helpпЉЪ
вЮЬ  Py git:(master) вЬЧ py calc24.py -h
Usage: usage -n 1,2,3,4

Options:
  -h, --help  show this help message and exit
  -n NUMS     specify num list
  
exp:
вЮЬ  Py git:(master) вЬЧ py calc24.py -n 10,8,9,4
[10, 8, 9, 4]
9 - 10 = -1
4 + -1 = 3
8 * 3 = 24
Success

or random test:
вЮЬ  Py git:(master) вЬЧ py calc24.py
[9, 10, 3, 6]
10 - 9 = 1
3 + 1 = 4
6 * 4 = 24
Success

~~~pythonиљЃе≠?еЊИеЉЇе§І~~~

rpn.py йАЖж≥ҐеЕ∞и°®иЊЊеЉ? python зЙИеЃЮзО∞

йАЖж≥ҐеЕ∞и°®иЊЊеЉ?襀府ж≥ЫеЇФзФ®дЇОзЉЦиѓСеОЯз?ЖдЄ≠пЉМжШѓдЄАзІ?жШѓзФ±ж≥ҐеЕ∞жХ∞е≠¶еЃґжЙђ¬Јж≠¶е?°и∞Ґзїіе•З1920еєіеЉХеЕ•зЪДжХ∞е≠¶и°®иЊЊеЉ?жЦєеЉ?пЉМеЬ®йАЖж≥ҐеЕ∞иЃ∞ж≥ХдЄ≠пЉМ
жЙАжЬЙжУ?дљЬзђ¶зљЃдЇОжУ?дљЬжХ∞зЪДе?Ой?ҐпЉМеЫ†ж≠§дєЯ襀зІ∞дЄЇе?ОзЉАи°®з§Їж≥ХгАВйАЖж≥ҐеЕ∞иЃ∞ж≥ХдЄ?йЬАи¶?жЛђе?Јж?•ж†ЗиѓЖжУ?дљЬзђ¶зЪДдЉШеЕИзЇІгАВ
дї•еИ©зФ®е†Жж†ИзїУжЮДеЗ?е∞СиЃ°зЃЧжЬЇеЖЕе≠ШиЃњйЧЃгАВ
вЮЬ  Py git:(master) вЬЧ python rpn.py
['11111111111111', '9999999999999', '*', '99', '12', '4', '/', '-', '10', '+', '+']
True 111111111111098888888888995 111111111111098888888888995
True 326 326

dispatch.py иљЃиљђйШЯеИЧ | е??з®ЛеЃЮзО∞

дљ†зЪДжЙЛе§ідЄКдЉЪжЬЙе§ЪдЄ™дїїеК°пЉМжѓ?дЄ™дїїеК°иАЧжЧґеЊИйХњпЉМиАМдљ†е?ИдЄ?жГ≥е?Мж≠•е§Дз?ЖпЉМиАМжШѓеЄМжЬЫиГљеГ?е§ЪзЇњз®ЛдЄАж†ЈдЇ§жЫњжЙІи°МгАВ
yield ж≤°жЬЙйАїиЊСжД?дєЙпЉМдїЕжШѓдљЬдЄЇжЪВе?ЬзЪДж†ЗењЧзВєгАВ
з®ЛеЇ?жµ?е?ѓдї•еЬ®ж≠§жЪВе?ЬпЉМдєЯе?ѓдї•еЬ®ж≠§ж?Ґе§?гАВиАМйАЪињЗеЃЮзО∞дЄАдЄ™и∞ГеЇ¶еЩ®пЉМеЃМжИ?е§ЪдЄ™дїїеК°зЪДеєґи°Ме§Дз?ЖгАВ
йАЪињЗиљЃиљђйШЯеИЧдЊ?жђ°еФ§иµЈдїїеК°пЉМеєґе∞ЖеЈ≤зї?еЃМжИ?зЪДдїїеК°жЄЕеЗЇйШЯеИЧпЉМж®°жЛЯдїїеК°и∞ГеЇ¶зЪДињЗз®ЛгАВ
ж†ЄењГдї£з†?пЉЪ
from collections import deque
class Runner(object):
    def __init__(self, tasks):
        self.tasks = deque(tasks)

    def next(self):
        return self.tasks.pop()

    def run(self):
        while len(self.tasks):
            task = self.next()
            try:
                next(task)
            except StopIteration:
                pass
            else:
                self.tasks.appendleft(task)

def task(name, times):
    for i in range(times):
        yield
        print(name, i)

Runner([
    task('hsfzxjy', 5),
    task('Jack', 4),
    task('Bob', 6)
]).run()

coroutine.py йАЪињЗgeventзђђдЄЙжЦєеЇУеЃЮзО∞е??з®Л

дЄКй?ҐзЪДdispatch.pyйАЪињЗyieldж??дЊЫдЇЖеѓєе??з®ЛзЪДжФѓжМ?,ж®°жЛЯдЇЖдїїеК°и∞ГеЇ¶гАВиАМдЄЛй?ҐзЪДињЩдЄ™geventзђђдЄЙжЦєеЇУе∞±жЫізЃАе?ХдЇЖгАВ

зђђдЄЙжЦєзЪДgeventдЄЇPythonж??дЊЫдЇЖжѓФиЊГеЃМеЦДзЪДе??з®ЛжФѓжМ?гАВйАЪињЗgreenletеЃЮзО∞е??з®ЛпЉМеЕґеЯЇжЬђжА?жГ≥жШѓпЉЪ
    ељУдЄАдЄ™greenletй?ЗеИ∞IOжУ?дљЬжЧґпЉМжѓФе¶ВиЃњйЧЃзљСзїЬпЉМе∞±иЗ™еК®еИЗж?ҐеИ∞еЕґдїЦзЪДgreenletпЉМз≠ЙеИ∞IOжУ?дљЬеЃМжИ?пЉМеЖ?еЬ®йАВељУзЪДжЧґеАЩеИЗж?ҐеЫЮж?•зїІзї≠жЙІи°МгАВ
    зФ±дЇОIOжУ?дљЬй?ЮеЄЄиАЧжЧґпЉМзї?еЄЄдљњз®ЛеЇ?е§ДдЇОз≠ЙеЊЕзКґжА?пЉМжЬЙдЇЖgeventдЄЇжИСдїђиЗ™еК®еИЗж?Ґе??з®ЛпЉМе∞±дњ?иѓ?жАїжЬЙgreenletеЬ®ињ?и°МпЉМиАМдЄ?жШѓз≠ЙеЊЕIOгАВ

зФ±дЇОеИЗж?ҐжШѓеЬ®IOжУ?дљЬжЧґиЗ™еК®еЃМжИ?пЉМжЙАдї•geventйЬАи¶?дњЃжФєPythonиЗ™еЄ¶зЪДдЄАдЇЫж†ЗеЗЖеЇУпЉМињЩдЄАињЗз®ЛеЬ®е?ѓеК®жЧґйАЪињЗmonkey patchеЃМжИ?пЉЪ

дЊ?иµЦпЉЪ
pip install gevent

жЙІи°МпЉЪ
вЮЬ  Py git:(master) вЬЧ python coroutine.py
GET: https://www.python.org/
GET: https://www.yahoo.com/
GET: https://github.com/
91430 bytes received from https://github.com/.
47391 bytes received from https://www.python.org/.
461975 bytes received from https://www.yahoo.com/.

base64_str.py base64зЉЦз†?еОЯз?Ж

base64зЉЦз†?еОЯз?ЖпЉМдљњзФ®PythonеЃЮзО∞base64зЉЦз†?пЉМе?ѓиГљжЬЙbugпЉМжЬ™еЃМеЕ®еЃМеЦДзЙИ
1,еЗЖе§ЗдЄАдЄ™еМЕе?Ђ64дЄ™е≠Чзђ¶зЪДжХ∞зїД
2,еѓєдЇМињЫеИґжХ∞ж?ЃињЫи°Ме§Дз?ЖпЉМжѓ?3дЄ™е≠ЧиКВдЄАзїДпЉМдЄАеЕ±жШѓ3x8=24bitпЉМеИТдЄЇ4зїДпЉМжѓ?зїДж≠£е•љ6дЄ™bit
3,еЊЧеИ∞4дЄ™жХ∞е≠ЧдљЬ䪯糥еЉХпЉМзДґе?ОжЯ•и°®пЉМиОЈеЊЧзЫЄеЇФзЪД4дЄ™е≠Чзђ¶пЉМе∞±жШѓзЉЦз†?е?ОзЪДе≠Чзђ¶дЄ≤
4,е¶ВжЮЬи¶?зЉЦз†?зЪДдЇМињЫеИґжХ∞ж?ЃдЄ?жШѓ3зЪДеА?жХ∞пЉМжЬАе?ОдЉЪеЙ©дЄЛ1дЄ™жИЦ2дЄ™е≠ЧиКВ,Base64зФ®\x00е≠ЧиКВеЬ®жЬЂе∞Њи°•иґ≥е?ОпЉМеЖ?еЬ®зЉЦз†?зЪДжЬЂе∞ЊеК†дЄК1дЄ™жИЦ2дЄ™=е?ЈпЉМ
и°®з§Їи°•дЇЖе§Ъе∞Се≠ЧиКВпЉМиІ£з†?зЪДжЧґеАЩпЉМдЉЪиЗ™еК®еОїжОЙгАВ

Base64зЉЦз†?дЉЪжКК3е≠ЧиКВзЪДдЇМињЫеИґжХ∞ж?ЃзЉЦз†?дЄЇ4е≠ЧиКВзЪДжЦЗжЬђжХ∞ж?ЃпЉМйХњеЇ¶еҐЮеК†33%

дЊЛпЉЪ
вЮЬ  Py git:(master) вЬЧ python base64_str.py lock
bG9jaw==
вЮЬ  Py git:(master) вЬЧ echo -n lock|base64
bG9jaw==

rsa.py RSAзЃЧж≥ХжЉФз§Ї

вЮЬ  py python rsa.py
дЄЛй?ҐжШѓдЄАдЄ™RSAеК†иІ£еѓЖзЃЧж≥ХзЪДзЃАе?ХжЉФз§Ї:

жК•жЦЗ    еК†еѓЖ       еК†еѓЖе?ОеѓЖжЦЗ

12      248832          17
15      759375          15
22      5153632         22
5       3125            10


---------------------------
----------жЙІи°МиІ£еѓЖ---------
---------------------------
еОЯеІЛжК•жЦЗ        еѓЖжЦЗ      еК†еѓЖ            иІ£еѓЖжК•жЦЗ

12              17      1419857         12
15              15      759375          15
22              22      5153632         22
5               10      100000          5

selenium.py иЗ™еК®еМЦжµЛиѓХdemo

е?С1пЉЪ
  жЙІи°М python selenium.py еІЛзїИжЧ†ж≥ХеФ§йЖТchromeгАВ
  жЬАзїИе?СзО∞chromedriverеЊИжЧ©дєЛеЙ?еЃЙи£ЕзЪДпЉМж≤°жЬЙињЫи°МпЉЪbrew upgrade chromedriverпЉМеѓЉиЗіжЙІи°МиДЪжЬђжЧґжК•йФЩ
  upgrade chromedriver дєЛе?ОиІ£еЖ≥йЧЃйҐШпЉМеЃШжЦєжЦЗж°£иѓіжШОдЇЖseleniumжФѓжМ?е•љеЗ†дЄ™Browser driverгАВ
  жЉФз§ЇжЧґзФ®зЪДжШѓChromeпЉМpythonзЪДunittestж®°е?ЧпЉМжЦЗж°£дЄКиѓідєЯе?ѓдї•зФ®pytest

е§ІиЗіжФѓжМ?ињЩдї•дЄЛеЗ†зІ?DOMжЯ•жЙЊ,дЄ?е?Миѓ≠и®АзЪДжО•е?£зХ•еЊЃзЪДе∞?еМЇеИЂ
  driver.findElement(By.id(<element ID>))
  driver.findElement(By.name(<element name>))
  driver.findElement(By.className(<element class>))
  driver.findElement(By.tagName(<htmltagname>))
  driver.findElement(By.linkText(<linktext>))
  driver.findElement(By.partialLinkText(<linktext>))
  driver.findElement(By.cssSelector(<css selector>))
  driver.findElement(By.xpath(<xpath>))

жФѓжМ?Using Selenium with remote WebDriver
  жФѓжМ?ињЬз®ЛWebDriverпЉМйїШиЃ§зЫСе?ђ4444зЂѓе?£
  е?ѓеК®пЉЪbrew services start selenium-server-standalone
  е?Ьж≠ҐпЉЪbrew services stop selenium-server-standalone
  иЃњйЧЃhttp://127.0.0.1:4444 зВєеЗїconsole,
  жЦ∞еїЇж≠£еЬ®жµЛиѓХжЙАдљњзФ®зЪДwebdriver,еѓєдЇОж≠£еЬ®ињ?и°МdriverзЪДжµЛиѓХз®ЛеЇ?пЉМе?ѓдї•жИ™еЫЊзЬЛељУеЙ?жµЛиѓХз®ЛеЇ?зЪДињ?и°Мдљ?зљЃ

Python ж≤ЩзЃ±йАГйАЄ

йЗ?жЄ©2012.hack.luзЪДжѓФиµЫйҐШзЫЃпЉМеЬ®ињЩжђ°жМСжИШдЄ≠пЉМйЬАи¶?иѓїе?Ц'./1.key'жЦЗдїґзЪДеЖЕеЃєгАВ
дїЦдїђй¶ЦеЕИйАЪињЗеИ†йЩ§еЉХзФ®ж?•йФАжѓ?жЙУеЉАжЦЗдїґзЪДеЖЕзљЃеЗљжХ∞гАВзДґе?ОеЃГдїђеЕ?иЃЄжВ®жЙІи°МзФ®жИЈиЊУеЕ•гАВзЬЛзЬЛдїЦдїђзЪДдї£з†?з®?еЊЃдњЃжФєзЪДзЙИжЬђпЉЪ

def make_secure():
    UNSAFE = ['open',
              'file',
              'execfile',
              'compile',
              'reload',
              '__import__',
              'eval',
              'input']
    for func in UNSAFE:
        del __builtins__.__dict__[func]
from re import findall
# Remove dangerous builtins
make_secure()
print 'Go Ahead, Expoit me >;D'
while True:
    try:
        # Read user input until the first whitespace character
        inp = findall('\S+', raw_input())[0]
        a = None
        # Set a to the result from executing the user input
        exec 'a=' + inp
        print 'Return Value:', a
    except Exception, e:
    	print 'Exception:', e
зФ±дЇОж≤°жЬЙеЬ®__builtins__дЄ≠еЉХзФ®fileеТМopenпЉМжЙАдї•еЄЄиІДзЪДзЉЦз†?жКАеЈІжШѓи°МдЄ?йАЪзЪДгАВдљЖе?ѓдї•еЬ®PythonиІ£йЗКеЩ®дЄ≠жМЦжОШеЗЇе?¶дЄАзІ?дї£жЫњfileжИЦopenеЉХзФ®зЪДжЦєж≥ХгАВ

е?¶з±їиѓїе?ЦжЦЗдїґзЪДжЦєеЉ?пЉЪ
().__class__.__bases__[0].__subclasses__()[40]('1.key').read()
ињЩдЄ™жЦєж≥ХдЊ?зДґе?ѓдї•иѓїе?ЦеИ∞1.keyзЪДеЖЕеЃєпЉМcoder,hack,geekе?ѓдї•жЈ±еЕ•дЇЖиІ£дЄЛпЉМжЬђдЇЇжµЛиѓХжЧґзЪДpythonзЙИжЬђдЄЇпЉЪPython 2.7.12

avl_tree.py еє≥и°°дЇМе?Йж?Ь糥ж†С

зЙєзВєпЉЪ
1гА?иЛ•еЃГзЪДеЈ¶е≠?ж†СдЄ?дЄЇз©ЇпЉМеИЩеЈ¶е≠?ж†СдЄКжЙАжЬЙзЪДиКВзВєеАЉйГље∞?дЇОеЃГзЪДж†єиКВзВєеАЉгАВ
2гА?иЛ•еЃГзЪДе?≥е≠?ж†СдЄ?дЄЇз©ЇпЉМеИЩе?≥е≠?ж†СдЄКжЙАжЬЙзЪДиКВзВєеАЉе?Зе§ІдЇОеЃГзЪДж†єиКВзВєеАЉгАВ
3гА?еЃГзЪДеЈ¶е?≥е≠?ж†СдєЯеИЖеИЂе?ѓдї•еЕЕељУдЄЇдЇМе?ЙжЯ•жЙЊж†СгАВ
4гА?жѓ?дЄ™иКВзВєзЪДеЈ¶е≠?ж†СеТМе?≥е≠?ж†СзЪДйЂШеЇ¶еЈЃиЗ≥е§Ъз≠ЙдЇО1гАВ

е¶ВжЮЬжЩЃйАЪдЇМе?Йж?Ь糥ж†СзЪДжЈ±еЇ¶еЊИйЂШдЄФе?ХдЄАеЈ¶иЊєиКВзВєеЊИе§ЪжИЦиАЕе?ХдЄАе?≥иЊєиКВзВєеЊИе§ЪпЉМйВ£дєИжЯ•жЙЊжАІиГљеЗ†дєОе∞±е?ШжИ?дЇЖзЇњжАІзЪД
иАМеє≥и°°дЇМе?Йж†СзЪДжѓ?дЄ™иКВзВєзЪДеЈ¶е≠?ж†СеТМе?≥е≠?ж†СзЪДйЂШеЇ¶еЈЃиЗ≥е§Ъз≠ЙдЇО1пЉМињЩзІ?ж†СзїУжЮДзЪДжЯ•жЙЊжАІиГљжЧґйЧіе§?ж?ВеЇ¶иґЛе?Сlgn

вЮЬ  Py git:(master) вЬЧ py avl_tree.py
8
9
1

rb_tree.py зЇҐйїСж†С

зЇҐйїСж†Се§ЪзФ®еЬ®еЖЕйГ®жОТеЇ?пЉМе?≥еЕ®жФЊеЬ®еЖЕе≠ШдЄ≠зЪДпЉМеЊЃиљѓSTLзЪДmapеТМsetзЪДеЖЕйГ®еЃЮзО∞е∞±жШѓзЇҐйїСж†СгАВ
Bж†Се§ЪзФ®еЬ®еЖЕе≠ШйЗМжФЊдЄ?дЄЛпЉМе§ІйГ®еИЖжХ∞ж?Ѓе≠ШеВ®еЬ®е§Це≠ШдЄКжЧґгАВеЫ†дЄЇBж†Се±ВжХ∞е∞СпЉМеЫ†ж≠§е?ѓдї•з°Ѓдњ?жѓ?жђ°жУ?дљЬпЉМиѓїе?Цз£?зЫШзЪДжђ°жХ∞е∞ље?ѓиГљзЪДе∞СгАВ
еЬ®жХ∞ж?ЃиЊГе∞?пЉМе?ѓдї•еЃМеЕ®жФЊеИ∞еЖЕе≠ШдЄ≠жЧґпЉМзЇҐйїСж†СзЪДжЧґйЧіе§?ж?ВеЇ¶жѓФBж†СдљОгАВ
е??дєЛпЉМжХ∞ж?ЃйЗ?иЊГе§ІпЉМе§Це≠ШдЄ≠е?†дЄїи¶?йГ®еИЖжЧґпЉМBж†СеЫ†еЕґиѓїз£?зЫШжђ°жХ∞е∞СпЉМиАМеЕЈжЬЙжЫіењЂзЪДйАЯеЇ¶гАВ

зЙєзВєпЉЪ
пЉИ1пЉЙжѓ?дЄ™иКВзВєжИЦиАЕжШѓйїСиЙ≤пЉМжИЦиАЕжШѓзЇҐиЙ≤гАВ
пЉИ2пЉЙж†єиКВзВєжШѓйїСиЙ≤гАВ
пЉИ3пЉЙжѓ?дЄ™е?ґе≠?иКВзВєпЉИNILпЉЙжШѓйїСиЙ≤гАВ [ж≥®жД?пЉЪињЩйЗМе?ґе≠?иКВзВєпЉМжШѓжМЗдЄЇз©Ї(NILжИЦNULL)зЪДе?ґе≠?иКВзВєпЉ?]
пЉИ4пЉЙе¶ВжЮЬдЄАдЄ™иКВзВєжШѓзЇҐиЙ≤зЪДпЉМеИЩеЃГзЪДе≠?иКВзВєењЕй°їжШѓйїСиЙ≤зЪДгАВ
пЉИ5пЉЙдїОдЄАдЄ™иКВзВєеИ∞иѓ•иКВзВєзЪДе≠?е≠ЩиКВзВєзЪДжЙАжЬЙиЈѓеЊДдЄКеМЕе?ЂзЫЄе?МжХ∞зЫЃзЪДйїСиКВзВєгАВ

revert_list.py е??иљђйУЊи°®

вЮЬ  Py git:(master) вЬЧ py revert_list.py
1
2
3
start revert list ...
3
2
1

palindrome.py pythonзЙИеЫЮжЦЗжХ∞,heapq_sort.pyеЯЇдЇОе†ЖжОТеЇ?

life is short , use python
-(1)жЧґйЧіе§?ж?ВеЇ¶пЉЪO(n)пЉМз©ЇйЧіе§?ж?ВеЇ¶пЉЪO(1)гАВдїОдЄ§е§іе?СдЄ≠йЧіжЙЂж??
-(2)жЧґйЧіе§?ж?ВеЇ¶пЉЪO(n)пЉМз©ЇйЧіе§?ж?ВеЇ¶пЉЪO(1)гАВеЕИдїОдЄ≠йЧіеЉАеІЛгА?зДґе?Ое?СдЄ§иЊєжЙ©е±Х

е†ЖжОТеЃЮзО∞пЉМpythonеѓєжЬЙеѓєеЇФе∞?и£Ее•љзЪДheapqж®°е?Ч
py heapq_sort.py

kmp.py kmpе≠Чзђ¶дЄ≤жЯ•жЙЊзЃЧж≥Х

вЮЬ  Py git:(master) вЬЧ python kmp.py
Found 'sase' start at string 'asfdehhaassdsdasasedwa' 15 index position, find use times: 23
Found 'sase' start at string '12s3sasexxx' 4 index position, find use times: 9

ж†ЄењГзЃЧж≥ХпЉЪ
def kmp(string, match):
    n = len(string)
    m = len(match)
    i = 0
    j = 0
    count_times_used = 0
    while i < n:
        count_times_used += 1
        if match[j] == string[i]:
            if j == m - 1:
                print "Found '%s' start at string '%s' %s index position, find use times: %s" % (match, string, i - m + 1, count_times_used,)
                return
            i += 1
            j += 1
        elif j > 0:
            j = j - 1
        else:
            i += 1

compress.py е≠Чзђ¶дЄ≤еОЛзЉ©

йТИеѓєињЮзї≠йЗ?е§?иЊГе§ЪзЪДе≠Чзђ¶еОЛзЉ©пЉМе?¶еИЩдЄ?иµЈеОЛзЉ©жХИжЮЬ
вЮЬ  Py git:(master) вЬЧ python compress.py
еОЯеІЛе≠Чзђ¶дЄ≤:xAAACCCBBDBB111
еОЛзЉ©е?О:x1A3C3B2D1B213
жЙІи°МиІ£еОЛ...
x
A
A
A
C
C
C
B
B
D
B
B
1
1
1
иІ£еОЛеЃМжѓХ
иІ£еОЛе?О:xAAACCCBBDBB111

hashtable.py hashи°®еЃЮзО∞

hash_table = HashTable(5); # еИЖйЕ?5е?Ч
hash_table.set(1,'x')
print hash_table.get(1)

ж†ЄењГдї£з†?пЉЪ
class Item(object):
    def __init__(self, key, value):
        self.key = key
        self.value = value


class HashTable(object):
    def __init__(self, size):
        self.size = size
        self.table = [[] for _ in xrange(self.size)]

    def hash_function(self, key):
        return key % self.size

    def set(self, key, value):
        hash_index = self.hash_function(key)
        for item in self.table[hash_index]:
            if item.key == key:
                item.value = value
                return
        self.table[hash_index].append(Item(key, value))

    def get(self, key):
        hash_index = self.hash_function(key)
        for item in self.table[hash_index]:
            if item.key == key:
                return item.value
        return None

    def remove(self, key):
        hash_index = self.hash_function(key)
        for i, item in enumerate(self.table[hash_index]):
            if item.key == key:
                del self.table[hash_index][i]

interpreter.py PythonиІ£йЗКеЩ®з?ЖиІ£

PythonдЉЪжЙІи°МеЕґдїЦ3дЄ™ж≠•й™§пЉЪиѓ?ж≥ХеИЖжЮ?пЉМиѓ≠ж≥ХиІ£жЮ?еТМзЉЦиѓСгАВ
ињЩдЄЙж≠•е?ИиµЈж?•жККжЇ?дї£з†?иљђж?ҐжИ?code object,еЃГеМЕе?Ђз?АиІ£йЗКеЩ®е?ѓдї•з?ЖиІ£зЪДжМЗдї§гАВиАМиІ£йЗКеЩ®зЪДеЈ•дљЬе∞±жШѓиІ£йЗКcode objectдЄ≠зЪДжМЗдї§гАВ
ж†ЄењГдї£з†?
class Interpreter:
    def __init__(self):
        self.stack = []

    def load_value(self, number):
        self.stack.append(number)

    def print_answer(self):
        answer = self.stack.pop()
        print(answer)

    def add_two_values(self):
        first_num = self.stack.pop()
        second_num = self.stack.pop()
        total = first_num + second_num
        self.stack.append(total)

    def run_code(self, what_to_execute):
            instructions = what_to_execute["instructions"]
            numbers = what_to_execute["numbers"]
            for each_step in instructions:
                instruction, argument = each_step
                if instruction == "load_value":
                    number = numbers[argument]
                    self.load_value(number)
                elif instruction == "add_two_values":
                    self.add_two_values()
                elif instruction == "print_answer":
                    self.print_answer()

linked_list.py ењЂйАЯжЯ•жЙЊе?ХйУЊи°®дЄ≠йЧіиКВзВє

вЮЬ  Py git:(master) py linked_list.py
жЩЃйАЪй??еОЖжЦєеЉ?,е?ХйУЊи°®дЄ≠йЧіиКВзВєдЄЇ:n3,糥еЉХдЄЇ:2пЉМй??еОЖдЄАжђ°йУЊи°®пЉМеЬ®дїО0й??еОЖеИ∞дЄ≠йЧідљ?зљЃ
ењЂжЕҐжМЗйТИжЦєеЉ?,е?ХйУЊи°®дЄ≠йЧіиКВзВєдЄЇ:n3,糥еЉХдЄЇ:2пЉМе?™й??еОЖдЄАжђ°йУЊи°®

ж†ЄењГдї£з†?пЉЪ
class Node(object):
  def __init__(self,data,next):
    self.data=data
    self.next=next

n1 = Node('n1',None)
n2 = Node('n2',n1)
n3 = Node('n3',n2)
n4 = Node('n4',n3)
n5 = Node('n5',n4)

head = n5   # йУЊи°®зЪДе§іиКВзВє

p1 = head   # дЄАжђ°ж≠•ињЫ1дЄ™node
p2 = head   # дЄАжђ°ж≠•ињЫ2дЄ™node

step = 0
while (p2.next is not None and p2.next.next is not None):
  p2 = p2.next.next
  p1 = p1.next
  step = step + 1
print 'ењЂжЕҐжМЗйТИжЦєеЉ?,е?ХйУЊи°®дЄ≠йЧіиКВзВєдЄЇ:%s,糥еЉХдЄЇ:%sпЉМе?™й??еОЖдЄАжђ°йУЊи°®' % (p1.data,step)

KжЬАињСйВїзЃЧж≥Х

ињЩдЄ™зЃЧж≥ХжѓФsvmзЃАе?ХеЊИе§Ъ
е?™йЬАдљњзФ®еИ?дЄ≠жЙАе≠¶зЪДдЄ§зВєиЈ?з¶їеЕђеЉ?пЉИжђІжЛЙиЈ?з¶їеЕђеЉ?пЉЙпЉМиЃ°зЃЧзЫЃж†ЗзВєеИ∞е?ДзїДзЪДиЈ?з¶їпЉМзЬЛзїњзВєеТМеУ™зїДжЫіжО•ињСгАВ
kдї£и°®е?ЦељУеЙ?и¶?еИЖз±їзЪДзВєжЬАињСзЪДkдЄ™зВєпЉМињЩkдЄ™зВєе¶ВжЮЬеЕґдЄ≠е±ЮдЇОзЇҐзВєдЄ™жХ∞е?†е§ЪжХ∞пЉМжИСдїђе∞±иЃ§дЄЇзїњзВєеЇФиѓ•еИТеИЖдЄЇзЇҐзїДпЉМе??дєЛпЉМеИЩеИТеИЖдЄЇйїСзїДгАВ
kеАЉдЄОеИЖз±їжХ∞жИ?ж≠£зЫЄеЕ≥пЉМзО∞еЬ®жШѓ2дЄ™еИЖзїДпЉМйВ£дєИkеАЉе?Ц3пЉМе?ЗиЃЊжШѓ3дЄ™еИЖзїДпЉМйВ£дєИkеАЉе∞±и¶?е?Ц5
е?ВиАГиѓіжШОпЉЪhttps://zh.wikipedia.org/wiki/жЬАињСйД∞е±Еж≥Х
дЊ?иµЦпЉЪ
pip install numpy
pip install matplotlib

дЄЛеЫЊдЄ≠ж†Зж≥®иЊГе§ІзЪДзЇҐзВєеЬ®иЃ°зЃЧдєЛе?О襀еИЖйЕ?еИ∞зЇҐзїД
жЙІи°МпЉЪpython knn.py

жФѓжМ?е?СйЗ?жЬЇ svm.py

ињЯжЧ©дЉЪењШиЃ∞зЪДsvm
е±ЮеИЖз±їзЃЧж≥ХпЉМзЫЃж†ЗжШѓеѓїжЙЊдЄАдЄ™жЬАдЉШиґЕеє≥й?ҐпЉМжѓФknnзЃЧж≥Хе§?ж?В
demoдЄЇзЇњжАІе?ѓеИЖз¶їжХ∞ж?Ѓ

е?ВиАГ1пЉЪhttps://zh.wikipedia.org/zh-hans/жФѓжМ?е?СйЗ?жЬЇ
е?ВиАГ2пЉЪhttp://blog.csdn.net/viewcode/article/details/12840405
е?ВиАГ3пЉЪhttp://blog.csdn.net/lisi1129/article/details/70209945?locationNum=8&fps=1

дЊ?иµЦпЉЪ
pip install numpy
pip install matplotlib

жЙІи°МпЉЪpython svm.py

(еЙ?еЇ?пЉМдЄ≠еЇ?пЉМе?ОеЇ?пЉМе±ВеЇ?) btree.py

вЮЬ  Py git:(master) вЬЧ python btree.py
еЙ?еЇ?й??еОЖпЉЪ root A C D F G B E
дЄ≠еЇ?й??еОЖпЉЪ C F D G A root B E
е?ОеЇ?й??еОЖпЉЪ F G D C A E B root
е±ВеЇ?й??еОЖпЉЪ root A B C E D F G
жЮДйА†ж†СзїУжЮДе¶ВдЄЛеЫЊ

Scrapy зИђиЩЂжµЛиѓХпЉИй°єзЫЃдї£з†?еЬ®дїУеЇУcrawl_360зЫЃељХдЄЛпЉЙ

еЃЙи£ЕдЊ?иµЦпЉЪ
pip install Scrapy 
pip install sqlalchemy 
pip install sqlacodegen
pip install mysql-connector

еИЫеїЇdbпЉЪCREATE DATABASE crawl DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci

еИЫеїЇи°®пЉЪcrawl_360/readme/sql.sql жЦЗдїґ

sqlacodegenеИЫеїЇmodelsпЉЪ
sqlacodegen --outfile=models.py mysql://root@localhost:3306/crawl --tables butian


жЙЊжµЛиѓХзЪДзЫЃж†ЗжКУе?Цй°µй?ҐпЉЪhttp://butian.360.cn/Loo й°µй?ҐиҐЂжКЂйЬ≤жЉ?жіЮзЪДдЉ?дЄЪеИЧи°®

еИЫеїЇй°єзЫЃ: scrapy startproject crawl_360

зЫЃељХзїУжЮД:
вЮЬ  crawl_360 tree
.
вФЬвФАвФА crawl_360
вФВ¬†¬† вФЬвФАвФА __init__.py
вФВ¬†¬† вФЬвФАвФА __init__.pyc
вФВ¬†¬† вФЬвФАвФА items.py
вФВ¬†¬† вФЬвФАвФА items.pyc
вФВ¬†¬† вФЬвФАвФА middlewares.py
вФВ¬†¬† вФЬвФАвФА models
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА __init__.py
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА __init__.pyc
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА db.py
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА db.pyc
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА models.py
вФВ¬†¬† вФВ¬†¬† вФФвФАвФА models.pyc
вФВ¬†¬† вФЬвФАвФА pipelines.py
вФВ¬†¬† вФЬвФАвФА pipelines.pyc
вФВ¬†¬† вФЬвФАвФА reademe
вФВ¬†¬† вФВ¬†¬† вФФвФАвФА sql.sql
вФВ¬†¬† вФЬвФАвФА settings.py
вФВ¬†¬† вФЬвФАвФА settings.pyc
вФВ¬†¬† вФФвФАвФА spiders
вФВ¬†¬†     вФЬвФАвФА __init__.py
вФВ¬†¬†     вФЬвФАвФА __init__.pyc
вФВ¬†¬†     вФЬвФАвФА butian.py
вФВ¬†¬†     вФФвФАвФА butian.pyc
вФФвФАвФА scrapy.cfg

зФЯжИ?дЄАдЄ™зИђиЩЂпЉЪ
cd crawl_360 && scrapy genspider butian butian.360.cn/Loo

зЉЦеЖЩзИђиЩЂдї£з†? (crawl_360зЫЃељХдЄЛпЉМxpathдї£з†?30и°Ме?≥е?ѓ)

зИђе?ЦпЉЪscrapy crawl butian

е?¶пЉЪseleniumдєЯжШѓдЄАжђЊй?ЮеЄЄдЄ?йФЩзЪДеЈ•еЕЈпЉМе?ѓжШѓдљњзФ®seleniumи∞ГзФ®Browser driverжЫіеК†йАЉзЬЯзЬЯеЃЮзФ®жИЈжУ?дљЬ

Celery еИЖеЄГеЉ?дїїеК°йШЯеИЧTest (дїУеЇУceleryжЦЗдїґе§єдЄЛ)

pip3 install celery
pip3 install redis
зЉЦеЖЩtasks.py
from celery import Celery

app = Celery('TASK', broker='redis://127.0.0.1', backend='redis://127.0.0.1')


@app.task
def add(x, y):
    print 'start ...'
    print 'get param :%s,%s' % (x, y,)
    return x + y
е?ѓеК®celery worker ж?•еЉАеІЛзЫСе?ђеєґжЙІи°МдїїеК°
celery -A tasks worker --loglevel=info
tasks дїїеК°жЦЗдїґе??пЉМworker дїїеК°иІТиЙ≤пЉМ--loglevel=info дїїеК°жЧ•ењЧзЇІеИЂ

127.0.0.1:6379> keys *
1) "_kombu.binding.celery"
2) "_kombu.binding.celeryev"
3) "_kombu.binding.celery.pidbox"
127.0.0.1:6379>

redis йЫЖе?ИзїУжЮД(set),жЯ•зЬЛvalue:
SMEMBERS _kombu.binding.celery

еЬ®tasks.pyжЦЗдїґзЫЃељХжЙУеЉАзїИзЂѓињЫеЕ•pyзЪДдЇ§дЇТеЉ?ж®°еЉ?
>>> from tasks import add
>>> add.delay(1,2)
<AsyncResult: edb1b071-ed94-46fc-8250-a13e3db0e1a4>
>>> t = add.delay(4,5)
>>> t.get()
9
>>> t.ready()
True

celeryеЄЄзФ®жО•е?£
tasks.add(4,6) ---> жЬђеЬ∞жЙІи°М
tasks.add.delay(3,4) --> workerжЙІи°М
t=tasks.add.delay(3,4)  --> t.get()  иОЈе?ЦзїУжЮЬпЉМжИЦе?°дљ?пЉМйШїе°Ю
t.ready()---> FalseпЉЪжЬ™жЙІи°МеЃМпЉМTrueпЉЪеЈ≤жЙІи°МеЃМ
t.get(propagate=False) жКЫеЗЇзЃАе?ХеЉВеЄЄпЉМдљЖз®ЛеЇ?дЄ?дЉЪе?Ьж≠Ґ
t.traceback ињљиЄ™еЃМжХіеЉВеЄЄ

иЃ°зЃЧзїУжЮЬдњ?е≠ШеЬ®redisдЄ≠,йїШиЃ§зїУжЮЬжЬЙжХИжЬЯдЄЇ1е§©
127.0.0.1:6379> ttl celery-task-meta-6eb3ee46-e86d-409a-9eb5-0c7d9b005035
(integer) 85917
127.0.0.1:6379> get celery-task-meta-6eb3ee46-e86d-409a-9eb5-0c7d9b005035
"{\"status\": \"SUCCESS\", \"traceback\": null, \"result\": 9, \"task_id\": \"6eb3ee46-e86d-409a-9eb5-0c7d9b005035\", \"children\": []}"
127.0.0.1:6379>

About

rsa,base64,ac,kmp,svm,knn,mitm,hash table... рЯЪА

Topics

Resources

Releases

No releases published

Packages

No packages published

Languages

You canвАЩt perform that action at this time.