You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

6_Function.ipynb 22 kB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
3 years ago
6 years ago
6 years ago
6 years ago
3 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
3 years ago
3 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "markdown",
  5. "metadata": {},
  6. "source": [
  7. "# 函数"
  8. ]
  9. },
  10. {
  11. "cell_type": "markdown",
  12. "metadata": {},
  13. "source": [
  14. "在大部分时候,在一个算法中,需要重复执行一组语句,如果每次都重复写出来,不仅乏味而且编程效率比较低,降低程序的可读性。为了将重复的执行抽象出来,可使用函数将一组操作封装成一个整体,给一个名称和参数列表作为可变量的输入。Python中函数的定义为:"
  15. ]
  16. },
  17. {
  18. "cell_type": "markdown",
  19. "metadata": {},
  20. "source": [
  21. "```\n",
  22. "def funcname(arg1, arg2,... argN):\n",
  23. " \n",
  24. " ''' Document String'''\n",
  25. "\n",
  26. " statements\n",
  27. "\n",
  28. "\n",
  29. " return <value>\n",
  30. "```"
  31. ]
  32. },
  33. {
  34. "cell_type": "markdown",
  35. "metadata": {},
  36. "source": [
  37. "将上面的语法理解为,定义了一个名为`funcname`的函数,它接受`arg1,arg2,…argN`的参数。函数在执行语句后返回一个`<value>`。"
  38. ]
  39. },
  40. {
  41. "cell_type": "code",
  42. "execution_count": 1,
  43. "metadata": {},
  44. "outputs": [
  45. {
  46. "name": "stdout",
  47. "output_type": "stream",
  48. "text": [
  49. "Hey Jack!\n",
  50. "Jack, How do you do?\n"
  51. ]
  52. }
  53. ],
  54. "source": [
  55. "print(\"Hey Jack!\")\n",
  56. "print(\"Jack, How do you do?\")"
  57. ]
  58. },
  59. {
  60. "cell_type": "markdown",
  61. "metadata": {},
  62. "source": [
  63. "不需要每次都写上面的两个语句,可以通过定义一个函数来替换它,这个函数只需一行就能完成任务。\n",
  64. "\n",
  65. "定义一个函数 `first_func()`."
  66. ]
  67. },
  68. {
  69. "cell_type": "code",
  70. "execution_count": 2,
  71. "metadata": {
  72. "collapsed": true
  73. },
  74. "outputs": [],
  75. "source": [
  76. "def first_func():\n",
  77. " print(\"Hey Jack!\")\n",
  78. " print(\"Jack, How do you do?\")"
  79. ]
  80. },
  81. {
  82. "cell_type": "code",
  83. "execution_count": 3,
  84. "metadata": {},
  85. "outputs": [
  86. {
  87. "name": "stdout",
  88. "output_type": "stream",
  89. "text": [
  90. "Hey Jack!\n",
  91. "Jack, How do you do?\n",
  92. "Hey Jack!\n",
  93. "Jack, How do you do?\n"
  94. ]
  95. }
  96. ],
  97. "source": [
  98. "first_func()\n",
  99. "funca=first_func\n",
  100. "funca()"
  101. ]
  102. },
  103. {
  104. "cell_type": "markdown",
  105. "metadata": {},
  106. "source": [
  107. "**first_func()** 每一次只打印一个人的消息。我们可以让我们的函数 **first_func()** 接受参数,该参数将存储名称然后打印相应地接受字符串。为了这样做我们需要像所示的那样在函数内添加一个参数。"
  108. ]
  109. },
  110. {
  111. "cell_type": "code",
  112. "execution_count": 4,
  113. "metadata": {
  114. "collapsed": true
  115. },
  116. "outputs": [],
  117. "source": [
  118. "def first_func(username):\n",
  119. " print(\"Hey\", username + '!')\n",
  120. " print(username + ',' ,\"How do you do?\")"
  121. ]
  122. },
  123. {
  124. "cell_type": "code",
  125. "execution_count": 5,
  126. "metadata": {},
  127. "outputs": [
  128. {
  129. "name": "stdout",
  130. "output_type": "stream",
  131. "text": [
  132. "Please enter your name : Python\n"
  133. ]
  134. }
  135. ],
  136. "source": [
  137. "name1 = input('Please enter your name : ')"
  138. ]
  139. },
  140. {
  141. "cell_type": "markdown",
  142. "metadata": {},
  143. "source": [
  144. "名称“Willam”实际上存储在name1中。我们将这个变量传递给函数**firstfunc()** 作为变量username,因为它是为这个函数定义的变量。即name1作为用户名传递。"
  145. ]
  146. },
  147. {
  148. "cell_type": "code",
  149. "execution_count": 6,
  150. "metadata": {},
  151. "outputs": [
  152. {
  153. "name": "stdout",
  154. "output_type": "stream",
  155. "text": [
  156. "Hey Python!\n",
  157. "Python, How do you do?\n"
  158. ]
  159. }
  160. ],
  161. "source": [
  162. "first_func(name1)"
  163. ]
  164. },
  165. {
  166. "cell_type": "markdown",
  167. "metadata": {},
  168. "source": [
  169. "让我们通过定义另一个函数**second_func()** 来进一步简化它,该函数接受名称并将其存储在一个变量中,然后从函数本身内部调用**first_func()**。"
  170. ]
  171. },
  172. {
  173. "cell_type": "code",
  174. "execution_count": 7,
  175. "metadata": {
  176. "collapsed": true
  177. },
  178. "outputs": [],
  179. "source": [
  180. "def first_func(username):\n",
  181. " print(\"Hey\", username + '!')\n",
  182. " print(username + ',' ,\"How do you do?\")\n",
  183. "def second_func():\n",
  184. " name = input(\"Please enter your name : \")\n",
  185. " first_func(name)"
  186. ]
  187. },
  188. {
  189. "cell_type": "code",
  190. "execution_count": 8,
  191. "metadata": {},
  192. "outputs": [
  193. {
  194. "name": "stdout",
  195. "output_type": "stream",
  196. "text": [
  197. "Please enter your name : Tom\n",
  198. "Hey Tom!\n",
  199. "Tom, How do you do?\n"
  200. ]
  201. }
  202. ],
  203. "source": [
  204. "second_func()"
  205. ]
  206. },
  207. {
  208. "cell_type": "markdown",
  209. "metadata": {},
  210. "source": [
  211. "## 1. 返回语句"
  212. ]
  213. },
  214. {
  215. "cell_type": "markdown",
  216. "metadata": {},
  217. "source": [
  218. "当函数产生某个值,并且该值必须存储在一个变量中,或者需要返回或返回给主算法进行进一步操作时,使用return语句。"
  219. ]
  220. },
  221. {
  222. "cell_type": "code",
  223. "execution_count": 9,
  224. "metadata": {
  225. "collapsed": true
  226. },
  227. "outputs": [],
  228. "source": [
  229. "def times(x,y):\n",
  230. " z = x*y\n",
  231. " return z"
  232. ]
  233. },
  234. {
  235. "cell_type": "markdown",
  236. "metadata": {},
  237. "source": [
  238. "上面定义的**times()** 函数接受两个参数并返回变量z,该变量包含两个参数的乘积结果。"
  239. ]
  240. },
  241. {
  242. "cell_type": "code",
  243. "execution_count": 10,
  244. "metadata": {},
  245. "outputs": [
  246. {
  247. "name": "stdout",
  248. "output_type": "stream",
  249. "text": [
  250. "20\n"
  251. ]
  252. }
  253. ],
  254. "source": [
  255. "c = times(4,5)\n",
  256. "print(c)"
  257. ]
  258. },
  259. {
  260. "cell_type": "markdown",
  261. "metadata": {},
  262. "source": [
  263. "z值存储在变量c中,可以用于进一步的操作。"
  264. ]
  265. },
  266. {
  267. "cell_type": "markdown",
  268. "metadata": {},
  269. "source": [
  270. "可以在return语句中使用整个语句本身,而不是声明另一个变量,如下所示。"
  271. ]
  272. },
  273. {
  274. "cell_type": "code",
  275. "execution_count": 11,
  276. "metadata": {
  277. "collapsed": true
  278. },
  279. "outputs": [],
  280. "source": [
  281. "def times(x,y):\n",
  282. " '''This multiplies the two input arguments'''\n",
  283. " return x*y"
  284. ]
  285. },
  286. {
  287. "cell_type": "code",
  288. "execution_count": 12,
  289. "metadata": {},
  290. "outputs": [
  291. {
  292. "name": "stdout",
  293. "output_type": "stream",
  294. "text": [
  295. "20\n"
  296. ]
  297. }
  298. ],
  299. "source": [
  300. "c = times(4,5)\n",
  301. "print(c)"
  302. ]
  303. },
  304. {
  305. "cell_type": "markdown",
  306. "metadata": {},
  307. "source": [
  308. "由于现在定义了**times()**,我们可以如上所示记录它。在**help()** 函数下调用**times()** 函数时返回该文档。"
  309. ]
  310. },
  311. {
  312. "cell_type": "code",
  313. "execution_count": 13,
  314. "metadata": {},
  315. "outputs": [
  316. {
  317. "name": "stdout",
  318. "output_type": "stream",
  319. "text": [
  320. "Help on function times in module __main__:\n",
  321. "\n",
  322. "times(x, y)\n",
  323. " This multiplies the two input arguments\n",
  324. "\n"
  325. ]
  326. }
  327. ],
  328. "source": [
  329. "help(times)"
  330. ]
  331. },
  332. {
  333. "cell_type": "code",
  334. "execution_count": 14,
  335. "metadata": {
  336. "collapsed": true
  337. },
  338. "outputs": [],
  339. "source": [
  340. "times?"
  341. ]
  342. },
  343. {
  344. "cell_type": "markdown",
  345. "metadata": {},
  346. "source": [
  347. "也可以返回多个变量,但请记住顺序。"
  348. ]
  349. },
  350. {
  351. "cell_type": "code",
  352. "execution_count": 15,
  353. "metadata": {
  354. "collapsed": true
  355. },
  356. "outputs": [],
  357. "source": [
  358. "eglist = [10,50,30,12,6,8,100]"
  359. ]
  360. },
  361. {
  362. "cell_type": "code",
  363. "execution_count": 16,
  364. "metadata": {
  365. "collapsed": true
  366. },
  367. "outputs": [],
  368. "source": [
  369. "def egfunc(eglist):\n",
  370. " highest = max(eglist)\n",
  371. " lowest = min(eglist)\n",
  372. " first = eglist[0]\n",
  373. " last = eglist[-1]\n",
  374. " return highest,lowest,first,last"
  375. ]
  376. },
  377. {
  378. "cell_type": "markdown",
  379. "metadata": {},
  380. "source": [
  381. "如果调用函数时没有为其分配任何变量,则结果将在一个元组中返回。但是如果变量被提到了,那么结果会以特定的顺序分配给变量,这个顺序在return语句中声明。"
  382. ]
  383. },
  384. {
  385. "cell_type": "code",
  386. "execution_count": 17,
  387. "metadata": {},
  388. "outputs": [
  389. {
  390. "name": "stdout",
  391. "output_type": "stream",
  392. "text": [
  393. "(100, 6, 10, 100)\n"
  394. ]
  395. }
  396. ],
  397. "source": [
  398. "a = egfunc(eglist)\n",
  399. "print(a)"
  400. ]
  401. },
  402. {
  403. "cell_type": "code",
  404. "execution_count": 18,
  405. "metadata": {},
  406. "outputs": [
  407. {
  408. "name": "stdout",
  409. "output_type": "stream",
  410. "text": [
  411. " a = 100 \n",
  412. " b = 6 \n",
  413. " c = 10 \n",
  414. " d = 100\n"
  415. ]
  416. }
  417. ],
  418. "source": [
  419. "a,b,c,d = egfunc(eglist)\n",
  420. "print(' a =',a,'\\n b =',b,'\\n c =',c,'\\n d =',d)"
  421. ]
  422. },
  423. {
  424. "cell_type": "markdown",
  425. "metadata": {},
  426. "source": [
  427. "## 2. 隐式参数"
  428. ]
  429. },
  430. {
  431. "cell_type": "markdown",
  432. "metadata": {},
  433. "source": [
  434. "当一个函数的参数在大多数情况下是常见的或者它是`隐式的`时,使用这个概念。"
  435. ]
  436. },
  437. {
  438. "cell_type": "code",
  439. "execution_count": 20,
  440. "metadata": {
  441. "collapsed": true
  442. },
  443. "outputs": [],
  444. "source": [
  445. "def implicit_add(x, addnumber=3):\n",
  446. " return x+addnumber"
  447. ]
  448. },
  449. {
  450. "cell_type": "markdown",
  451. "metadata": {},
  452. "source": [
  453. "**implicit_add( )** 是一个函数接受两个参数,但大多数时候第一个参数只需要加3。因此,第二个参数被赋值为3。这里第二个参数是隐式的。"
  454. ]
  455. },
  456. {
  457. "cell_type": "markdown",
  458. "metadata": {},
  459. "source": [
  460. "现在,如果在调用**implicit_add()** 函数时没有定义第二个参数,则将其视为3。"
  461. ]
  462. },
  463. {
  464. "cell_type": "code",
  465. "execution_count": 21,
  466. "metadata": {},
  467. "outputs": [
  468. {
  469. "data": {
  470. "text/plain": [
  471. "7"
  472. ]
  473. },
  474. "execution_count": 21,
  475. "metadata": {},
  476. "output_type": "execute_result"
  477. }
  478. ],
  479. "source": [
  480. "implicit_add(4)"
  481. ]
  482. },
  483. {
  484. "cell_type": "markdown",
  485. "metadata": {},
  486. "source": [
  487. "但如果指定了第二个参数,则此值将覆盖分配给该参数的隐式值"
  488. ]
  489. },
  490. {
  491. "cell_type": "code",
  492. "execution_count": 22,
  493. "metadata": {},
  494. "outputs": [
  495. {
  496. "data": {
  497. "text/plain": [
  498. "8"
  499. ]
  500. },
  501. "execution_count": 22,
  502. "metadata": {},
  503. "output_type": "execute_result"
  504. }
  505. ],
  506. "source": [
  507. "implicit_add(4,4)"
  508. ]
  509. },
  510. {
  511. "cell_type": "code",
  512. "execution_count": 23,
  513. "metadata": {},
  514. "outputs": [
  515. {
  516. "data": {
  517. "text/plain": [
  518. "11"
  519. ]
  520. },
  521. "execution_count": 23,
  522. "metadata": {},
  523. "output_type": "execute_result"
  524. }
  525. ],
  526. "source": [
  527. "implicit_add(5, addnumber=6)"
  528. ]
  529. },
  530. {
  531. "cell_type": "markdown",
  532. "metadata": {},
  533. "source": [
  534. "## 3. 任意数量的参数"
  535. ]
  536. },
  537. {
  538. "cell_type": "markdown",
  539. "metadata": {},
  540. "source": [
  541. "如果函数要接受的参数数量未知,则在参数前使用星号。"
  542. ]
  543. },
  544. {
  545. "cell_type": "code",
  546. "execution_count": 24,
  547. "metadata": {
  548. "collapsed": true
  549. },
  550. "outputs": [],
  551. "source": [
  552. "def add_n(*args):\n",
  553. " res = 0\n",
  554. " reslist = []\n",
  555. " for i in args:\n",
  556. " reslist.append(i)\n",
  557. " print(reslist)\n",
  558. " return sum(reslist)"
  559. ]
  560. },
  561. {
  562. "cell_type": "markdown",
  563. "metadata": {},
  564. "source": [
  565. "上面的函数接受任意数量的参数,定义一个列表,并将所有参数附加到该列表中,并返回所有参数的总和。"
  566. ]
  567. },
  568. {
  569. "cell_type": "code",
  570. "execution_count": 25,
  571. "metadata": {},
  572. "outputs": [
  573. {
  574. "name": "stdout",
  575. "output_type": "stream",
  576. "text": [
  577. "[1, 2, 3, 4, 5]\n"
  578. ]
  579. },
  580. {
  581. "data": {
  582. "text/plain": [
  583. "15"
  584. ]
  585. },
  586. "execution_count": 25,
  587. "metadata": {},
  588. "output_type": "execute_result"
  589. }
  590. ],
  591. "source": [
  592. "add_n(1,2,3,4,5)"
  593. ]
  594. },
  595. {
  596. "cell_type": "code",
  597. "execution_count": 26,
  598. "metadata": {},
  599. "outputs": [
  600. {
  601. "name": "stdout",
  602. "output_type": "stream",
  603. "text": [
  604. "[1, 2, 3]\n"
  605. ]
  606. },
  607. {
  608. "data": {
  609. "text/plain": [
  610. "6"
  611. ]
  612. },
  613. "execution_count": 26,
  614. "metadata": {},
  615. "output_type": "execute_result"
  616. }
  617. ],
  618. "source": [
  619. "add_n(1,2,3)"
  620. ]
  621. },
  622. {
  623. "cell_type": "markdown",
  624. "metadata": {},
  625. "source": [
  626. "参数列表也可以通过 \"param_name = value\" 的形式传入到函数"
  627. ]
  628. },
  629. {
  630. "cell_type": "code",
  631. "execution_count": 27,
  632. "metadata": {},
  633. "outputs": [
  634. {
  635. "name": "stdout",
  636. "output_type": "stream",
  637. "text": [
  638. "[30, 10, 20]\n"
  639. ]
  640. },
  641. {
  642. "data": {
  643. "text/plain": [
  644. "60"
  645. ]
  646. },
  647. "execution_count": 27,
  648. "metadata": {},
  649. "output_type": "execute_result"
  650. }
  651. ],
  652. "source": [
  653. "def add_nd(**kwargs):\n",
  654. " res = 0\n",
  655. " reslist = []\n",
  656. " for (k,v) in kwargs.items():\n",
  657. " reslist.append(v)\n",
  658. " print(reslist)\n",
  659. " return sum(reslist)\n",
  660. "\n",
  661. "add_nd(x=10, y=20, c=30)"
  662. ]
  663. },
  664. {
  665. "cell_type": "markdown",
  666. "metadata": {},
  667. "source": [
  668. "## 4. 全局和局部变量"
  669. ]
  670. },
  671. {
  672. "cell_type": "markdown",
  673. "metadata": {},
  674. "source": [
  675. "在函数内部声明的变量是局部变量,生命周期限于函数执行期间;在函数外部声明的是全局变量。"
  676. ]
  677. },
  678. {
  679. "cell_type": "code",
  680. "execution_count": 28,
  681. "metadata": {
  682. "collapsed": true
  683. },
  684. "outputs": [],
  685. "source": [
  686. "eg1 = [1,2,3,4,5]"
  687. ]
  688. },
  689. {
  690. "cell_type": "markdown",
  691. "metadata": {},
  692. "source": [
  693. "在下面的函数中,我们将在函数内部声明的列表中追加一个元素。函数内部声明的eg2变量是一个局部变量。"
  694. ]
  695. },
  696. {
  697. "cell_type": "code",
  698. "execution_count": 29,
  699. "metadata": {
  700. "collapsed": true
  701. },
  702. "outputs": [],
  703. "source": [
  704. "def egfunc1():\n",
  705. " eg1 = [1, 2, 3, 4, 5, 7]\n",
  706. " print(\"egfunc1>> eg1: \", eg1)\n",
  707. "\n",
  708. "def egfunc2():\n",
  709. " eg1.append(8)\n",
  710. " print(\"egfunc2>> eg1: \", eg1)\n",
  711. "\n",
  712. "def egfunc3():\n",
  713. " global eg1\n",
  714. " eg1 = [5, 4, 3, 2, 1]\n",
  715. " print(\"egfunc3>> eg1: \", eg1)"
  716. ]
  717. },
  718. {
  719. "cell_type": "code",
  720. "execution_count": 30,
  721. "metadata": {},
  722. "outputs": [
  723. {
  724. "name": "stdout",
  725. "output_type": "stream",
  726. "text": [
  727. "egfunc1>> eg1: [1, 2, 3, 4, 5, 7]\n",
  728. "eg1: [1, 2, 3, 4, 5] \n",
  729. "\n",
  730. "egfunc2>> eg1: [1, 2, 3, 4, 5, 8]\n",
  731. "eg1: [1, 2, 3, 4, 5, 8] \n",
  732. "\n",
  733. "egfunc3>> eg1: [5, 4, 3, 2, 1]\n",
  734. "eg1: [5, 4, 3, 2, 1] \n",
  735. "\n"
  736. ]
  737. }
  738. ],
  739. "source": [
  740. "egfunc1()\n",
  741. "print(\"eg1: \", eg1, \"\\n\")\n",
  742. "\n",
  743. "egfunc2()\n",
  744. "print(\"eg1: \", eg1, \"\\n\")\n",
  745. "\n",
  746. "egfunc3()\n",
  747. "print(\"eg1: \", eg1, \"\\n\")\n"
  748. ]
  749. },
  750. {
  751. "cell_type": "markdown",
  752. "metadata": {},
  753. "source": [
  754. "## 5. Lambda 函数"
  755. ]
  756. },
  757. {
  758. "cell_type": "markdown",
  759. "metadata": {},
  760. "source": [
  761. "程序中有时需要临时使用一个简单的函数,单独定义出来比较费事,为了提高编程效率,Python等很多语言引入了`Lambda`函数,这些Lambda函数没有使用任何名称定义,只携带一个表达式,返回的是函数本身(类似函数指针或者函数对象)。Lambda函数在操作列表时非常方便。这些函数由关键字**lambda**定义,后面跟着变量、冒号和相应的表达式。"
  762. ]
  763. },
  764. {
  765. "cell_type": "code",
  766. "execution_count": 31,
  767. "metadata": {
  768. "collapsed": true
  769. },
  770. "outputs": [],
  771. "source": [
  772. "z = lambda x: x * x"
  773. ]
  774. },
  775. {
  776. "cell_type": "code",
  777. "execution_count": 32,
  778. "metadata": {},
  779. "outputs": [
  780. {
  781. "data": {
  782. "text/plain": [
  783. "64"
  784. ]
  785. },
  786. "execution_count": 32,
  787. "metadata": {},
  788. "output_type": "execute_result"
  789. }
  790. ],
  791. "source": [
  792. "z(8)"
  793. ]
  794. },
  795. {
  796. "cell_type": "code",
  797. "execution_count": 33,
  798. "metadata": {},
  799. "outputs": [
  800. {
  801. "data": {
  802. "text/plain": [
  803. "(6, 8)"
  804. ]
  805. },
  806. "execution_count": 33,
  807. "metadata": {},
  808. "output_type": "execute_result"
  809. }
  810. ],
  811. "source": [
  812. "zz = lambda x, y: (x*y, x**y)\n",
  813. "zz(2, 3)"
  814. ]
  815. },
  816. {
  817. "cell_type": "code",
  818. "execution_count": 34,
  819. "metadata": {},
  820. "outputs": [
  821. {
  822. "data": {
  823. "text/plain": [
  824. "function"
  825. ]
  826. },
  827. "execution_count": 34,
  828. "metadata": {},
  829. "output_type": "execute_result"
  830. }
  831. ],
  832. "source": [
  833. "type(z)"
  834. ]
  835. },
  836. {
  837. "cell_type": "code",
  838. "execution_count": 35,
  839. "metadata": {},
  840. "outputs": [
  841. {
  842. "data": {
  843. "text/plain": [
  844. "function"
  845. ]
  846. },
  847. "execution_count": 35,
  848. "metadata": {},
  849. "output_type": "execute_result"
  850. }
  851. ],
  852. "source": [
  853. "def sqr(x):\n",
  854. " return x*x\n",
  855. "\n",
  856. "type(sqr)"
  857. ]
  858. },
  859. {
  860. "cell_type": "markdown",
  861. "metadata": {},
  862. "source": [
  863. "### 5.1 map"
  864. ]
  865. },
  866. {
  867. "cell_type": "markdown",
  868. "metadata": {},
  869. "source": [
  870. "**map( )** 函数主要执行分别为列表的每个元素定义的函数。"
  871. ]
  872. },
  873. {
  874. "cell_type": "code",
  875. "execution_count": 36,
  876. "metadata": {
  877. "collapsed": true
  878. },
  879. "outputs": [],
  880. "source": [
  881. "list1 = [1,2,3,4,5,6,7,8,9]"
  882. ]
  883. },
  884. {
  885. "cell_type": "code",
  886. "execution_count": 37,
  887. "metadata": {},
  888. "outputs": [
  889. {
  890. "name": "stdout",
  891. "output_type": "stream",
  892. "text": [
  893. "[3, 4, 5, 6, 7, 8, 9, 10, 11]\n"
  894. ]
  895. }
  896. ],
  897. "source": [
  898. "eg = map(lambda x:x+2, list1)\n",
  899. "print(list(eg))"
  900. ]
  901. },
  902. {
  903. "cell_type": "code",
  904. "execution_count": 38,
  905. "metadata": {},
  906. "outputs": [
  907. {
  908. "name": "stdout",
  909. "output_type": "stream",
  910. "text": [
  911. "[1, 4, 9, 16, 25, 36, 49, 64, 81]\n"
  912. ]
  913. }
  914. ],
  915. "source": [
  916. "eg = map(sqr, list1)\n",
  917. "print(list(eg))"
  918. ]
  919. },
  920. {
  921. "cell_type": "markdown",
  922. "metadata": {},
  923. "source": [
  924. "你也可以添加两个列表。"
  925. ]
  926. },
  927. {
  928. "cell_type": "code",
  929. "execution_count": 39,
  930. "metadata": {
  931. "collapsed": true
  932. },
  933. "outputs": [],
  934. "source": [
  935. "list2 = [9,8,7,6,5,4,3,2,1]"
  936. ]
  937. },
  938. {
  939. "cell_type": "code",
  940. "execution_count": 40,
  941. "metadata": {},
  942. "outputs": [
  943. {
  944. "name": "stdout",
  945. "output_type": "stream",
  946. "text": [
  947. "[10, 10, 10, 10, 10, 10, 10, 10, 10]\n"
  948. ]
  949. }
  950. ],
  951. "source": [
  952. "eg2 = map(lambda x,y:x+y, list1,list2)\n",
  953. "print(list(eg2))"
  954. ]
  955. },
  956. {
  957. "cell_type": "markdown",
  958. "metadata": {},
  959. "source": [
  960. "不仅可以使用lambda函数,还可以使用其他内建函数。"
  961. ]
  962. },
  963. {
  964. "cell_type": "code",
  965. "execution_count": 41,
  966. "metadata": {},
  967. "outputs": [
  968. {
  969. "name": "stdout",
  970. "output_type": "stream",
  971. "text": [
  972. "<map object at 0x7fba384fd320>\n"
  973. ]
  974. }
  975. ],
  976. "source": [
  977. "eg3 = map(str,eg2)\n",
  978. "print(eg3)"
  979. ]
  980. },
  981. {
  982. "cell_type": "markdown",
  983. "metadata": {},
  984. "source": [
  985. "### 5.2 filter"
  986. ]
  987. },
  988. {
  989. "cell_type": "markdown",
  990. "metadata": {},
  991. "source": [
  992. "**filter( )** 函数用于过滤列表中的值。 注意 **filter()** 函数返回一个新列表中的结果。"
  993. ]
  994. },
  995. {
  996. "cell_type": "code",
  997. "execution_count": 42,
  998. "metadata": {
  999. "collapsed": true
  1000. },
  1001. "outputs": [],
  1002. "source": [
  1003. "list1 = [1,2,3,4,5,6,7,8,9]"
  1004. ]
  1005. },
  1006. {
  1007. "cell_type": "markdown",
  1008. "metadata": {},
  1009. "source": [
  1010. "为了得到小于5的元素。"
  1011. ]
  1012. },
  1013. {
  1014. "cell_type": "code",
  1015. "execution_count": 43,
  1016. "metadata": {},
  1017. "outputs": [
  1018. {
  1019. "name": "stdout",
  1020. "output_type": "stream",
  1021. "text": [
  1022. "[1, 2, 3, 4]\n"
  1023. ]
  1024. }
  1025. ],
  1026. "source": [
  1027. "res = filter(lambda x:x<5,list1)\n",
  1028. "print(list(res))"
  1029. ]
  1030. },
  1031. {
  1032. "cell_type": "markdown",
  1033. "metadata": {},
  1034. "source": [
  1035. "注意当使用**map()** 时会发生什么"
  1036. ]
  1037. },
  1038. {
  1039. "cell_type": "code",
  1040. "execution_count": 44,
  1041. "metadata": {},
  1042. "outputs": [
  1043. {
  1044. "data": {
  1045. "text/plain": [
  1046. "<map at 0x7fba384fd550>"
  1047. ]
  1048. },
  1049. "execution_count": 44,
  1050. "metadata": {},
  1051. "output_type": "execute_result"
  1052. }
  1053. ],
  1054. "source": [
  1055. "map(lambda x:x<5, list1)"
  1056. ]
  1057. },
  1058. {
  1059. "cell_type": "markdown",
  1060. "metadata": {},
  1061. "source": [
  1062. "我们可以得出这样的结论,在**map()** 函数中返回的值为真,在使用**filter()** 函数时将返回特定的元素。"
  1063. ]
  1064. },
  1065. {
  1066. "cell_type": "code",
  1067. "execution_count": 45,
  1068. "metadata": {},
  1069. "outputs": [
  1070. {
  1071. "data": {
  1072. "text/plain": [
  1073. "<filter at 0x7fba384fd240>"
  1074. ]
  1075. },
  1076. "execution_count": 45,
  1077. "metadata": {},
  1078. "output_type": "execute_result"
  1079. }
  1080. ],
  1081. "source": [
  1082. "filter(lambda x:x%4==0,list1)"
  1083. ]
  1084. }
  1085. ],
  1086. "metadata": {
  1087. "kernelspec": {
  1088. "display_name": "Python 3",
  1089. "language": "python",
  1090. "name": "python3"
  1091. },
  1092. "language_info": {
  1093. "codemirror_mode": {
  1094. "name": "ipython",
  1095. "version": 3
  1096. },
  1097. "file_extension": ".py",
  1098. "mimetype": "text/x-python",
  1099. "name": "python",
  1100. "nbconvert_exporter": "python",
  1101. "pygments_lexer": "ipython3",
  1102. "version": "3.5.4"
  1103. }
  1104. },
  1105. "nbformat": 4,
  1106. "nbformat_minor": 1
  1107. }

机器学习越来越多应用到飞行器、机器人等领域,其目的是利用计算机实现类似人类的智能,从而实现装备的智能化与无人化。本课程旨在引导学生掌握机器学习的基本知识、典型方法与技术,通过具体的应用案例激发学生对该学科的兴趣,鼓励学生能够从人工智能的角度来分析、解决飞行器、机器人所面临的问题和挑战。本课程主要内容包括Python编程基础,机器学习模型,无监督学习、监督学习、深度学习基础知识与实现,并学习如何利用机器学习解决实际问题,从而全面提升自我的《综合能力》。