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

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