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

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