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

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