成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python中看似沒用的寫法,卻是老手都不一定會的

開發 前端
函數里面直接使用變量就好了,非要定義成函數參數嗎?今天我們研究一下這玩意到底解決什么問題以及它的原理。

一次無意間看到如下的代碼:

心想:咦?這不是脫褲子放屁嗎?函數里面直接使用變量就好了,非要定義成函數參數。

結果沒想到這是解決問題的關鍵。今天我們研究一下這玩意到底解決什么問題以及它的原理。

現在我們從最簡單的函數使用外部變量的情況開始:

為了在函數中使用外部的變量,這是最直觀的做法。這種在函數中直接使用外部定義的變量,還有一種叫法:'閉包'。

我相信就算不了解 python 查找變量規則的初學者,也能一下子理解函數執行后會輸出什么。因為 python 就是為了讓其符合直覺才把規則設計成這樣。

現在稍微修改一下代碼:

在函數執行之前,修改了外部的變量,大家認為函數執行后打印了什么?

看看結果:

不知道你猜對了沒有,不過我是覺得這個結果同樣符合直覺。

你也覺得結果符合直覺嗎?

這是因為函數里面使用外部變量,就是要表達:“執行 print 時,獲取變量此時此刻的值。

那么,現實中會不會出現一些場景,我們就是希望函數執行時,得到的是 創建函數的時候,外部變量的值,而非執行時刻的值 ?

沒錯,就是文章開篇的寫法:

真的存在這樣子的場景嗎?而且,這是什么原理?

我們可以歸納以上代碼的特點:

  • 定義了函數
  • 函數內部,希望使用外部定義的變量
  • 定義函數后,并沒有立刻執行,并且當函數執行的時候,使用的外部變量很可能已經被修改了

由于 python 寫交互的程序不多,一個函數的執行時機基本上都是我們使用代碼明確編寫。但是大概有2種例外情況:

  • 把函數交給別的調度器,在合適時機執行。比如多線程多進程
  • 在界面編程中,綁定各種事件。事件函數只會在用戶與界面交互時才被觸發執行

在這些場景中,最容易出現的情況是,在一個循環遍歷中,定義函數,綁定函數。下面是一個循環創建10個按鈕,點擊時界面出現提示信息:

上面的代碼創建了10個不同的函數對象,可惜的是,行7的變量 idx 是外部的變量 idx(行4),并且在循環執行過程中,idx 的值不斷增加,最終的值停留在 9。

因此,界面上不管點擊哪個按鈕,顯示信息都是 9

現在,我們使用之前學會的套路,定義函數參數默認值解決:

我特意讓參數名與外部變量不一致,這更容易理解原理。

到底為什么這樣子寫可以解決問題,我們不妨把循環給展開(只展開2次):

注意行15 與 行23 ,定義函數的時候,我們把此刻的 idx 值,付給了參數 num 作為默認值。相當于如下代碼:

此時,這個默認值不再隨 idx 修改而改變。所以每個按鈕綁定的函數,看似代碼邏輯是一模一樣,但是每個函數的參數 num 都是不一樣的值。

你學會了嗎?

責任編輯:趙寧寧 來源: 數據大宇宙
相關推薦

2010-11-17 11:11:44

跳槽

2020-08-30 14:31:40

Python編程語言開發

2021-02-26 09:04:22

數組ArrayListHashMap

2025-04-03 09:51:37

2018-01-18 05:20:59

2013-05-14 10:41:16

Palo AltoNGFWUTM

2021-01-29 09:17:00

深度學習AI人工智能

2020-05-20 09:37:45

人工智能

2009-11-25 09:20:31

Windows 7網絡掉線

2022-12-26 09:16:45

Guava架構模型

2016-11-28 11:19:48

術語神秘

2018-05-15 16:01:53

對象內存JVM

2018-02-08 09:11:25

Linux命令rm

2015-06-29 11:38:47

物聯網

2022-04-26 06:53:37

HBaseMD5RowKey

2018-03-09 10:34:48

顯卡參數超頻

2016-01-11 11:50:39

JavaScript閉包面試題

2021-06-18 10:29:17

物聯網安全互聯網IoT

2021-07-19 10:15:53

Java絕對值代碼

2023-12-18 13:10:00

finally死鎖JVM 崩潰
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区二区三区在线观看 | 久久国产区 | 国产日韩欧美在线 | av手机免费在线观看 | 在线亚州| 欧美综合一区二区三区 | 日韩一区二区三区视频 | 国产一区二区三区久久久久久久久 | 欧美午夜影院 | 天天弄 | 亚洲国产欧美国产综合一区 | 中文字幕不卡 | 国产精品久久av | 国产高清亚洲 | 国产一区二区三区免费视频 | 欧洲免费毛片 | 欧美一区2区三区4区公司二百 | 夜夜干夜夜操 | 大象视频一区二区 | 91精品国产综合久久久久蜜臀 | 91精品国产91久久久久游泳池 | 日韩精品在线一区 | 91国内精品久久 | 欧美一级黄带 | 99精品视频在线观看免费播放 | 亚洲成人av | 精品一区二区久久久久久久网站 | 中文字幕一区二区三区精彩视频 | 国产色网站 | 欧美日韩最新 | 亚洲欧美在线观看 | av黄色网| 亚洲人成网站777色婷婷 | 午夜性视频 | 国产成人精品一区二区三区视频 | 精品在线一区 | 国产一区在线免费观看 | 国产欧美一区二区三区免费 | 国产一级在线 | 国产综合精品一区二区三区 | 在线不卡 |