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 21 kB

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

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