<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
函數的巢狀:在函數裡面還有函數。分為外函數和內函數。
巢狀函數是為函數內部服務的,比如減少程式碼的重複,想要呼叫函數,要使用函數名,內函數也一樣。如果不用函數名呼叫內函數,內函數就永遠不會執行。
內函數的呼叫
怎麼在函數外部呼叫內函數呢?首先,不能直接呼叫內函數 ,需要先執行外函數的程式碼塊。
def func1(): print("這是外部函數") def func2(): print("這是內部函數") func2()
沒有執行外函數內部的程式碼塊,python找不到內函數,所以報name ‘func2’ is not defined,函數func2()沒有定義
有幾種方式可以實現對內函數的呼叫。
1.在外函數內部呼叫內函數,即用函數名呼叫
def func1(): print("這是外部函數") def func2(): print("這是內部函數") func2() #函數名呼叫內函數 func1()
這樣呼叫外函數也會執行內函數的程式碼塊了
2.可以用return呼叫內函數
在使用return之前,需要說明一點:我們都是使用"函數名()“呼叫函數的方法,單獨使用"函數名”,我們會得到函數的記憶體地址;(函數名後面加括號才會告訴python,引數是否對得上,然後執行函數的程式碼塊。)
def func1(): print("這是外部函數") def func2(): print("這是內部函數") return func2() func1()
函數沒有返回值,即返回值為None,"return func2()"和"func2()"的效果是一樣的
def func1(): print("這是外部函數") def func2(): print("這是內部函數") return func2() m = func1() #呼叫函數func1(),呼叫函數func2的方法 print(m) #m為None
def func1(): print("這是外部函數") def func2(): print("這是內部函數") return func2 m = func1() print(m) # #執行結果為 這是外部函數 <function func1.<locals>.func2 at 0x0000000002EB6620>
上面可以看到,使用函數名得到的是函數的地址,我們可以用一個變數指向這個地址,相當於建立一個變數,這個變數指向的是函數的地址。因為只有函數名是不能呼叫函數的方法的,所以呼叫外函數時要用到雙括號。
def func1(): print("這是外部函數") def func2(): print("這是內部函數") return func2 func1()() ##執行func1()會返回func2然後再func2() # m = func1() # m()
我們可以用func1()返回一個函數func2,再加一個括號呼叫內函數的方法。
小結:想要呼叫內函數,首先要呼叫外函數,即執行外函數的程式碼塊,才有內函數呼叫的環境。在外函數內部,可以用函數名呼叫內函數。也可以用return呼叫內函數,如果return是函數本身的地址,呼叫外函數時會用到雙括號,先呼叫func1()得到func2然後再func2()。如果return func2(),那麼和func2()是一樣的,都是告訴python呼叫內函數。
變數的作用範圍
外函數裡面的變數和內函數裡面的變數是有區別的,作用範圍不一樣。內函數也可以使用外函數的變數,但是如果想要在內部函數修改外部函數變數的值,就要使用關鍵字nonlocal
def func1(): b = 2 def func2(): nonlocal b b = b - 1 func2() print(b)
在一個函數裡面呼叫別的函數
def print1(): print("這是第一個函數") def print2(): print("這是定義的第二個函數") print1() #在print2()中呼叫print1() print2()
def paint(): print("paint") def paintA(): print("paintA") paintA() paint() //輸出如下: //paint //paintA
在函數外部呼叫函數的結果如下
paintA //試圖在函數外部呼叫paintA()
//以下是報錯資訊
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-15-1a59d6e3eeb5> in <module>()
5 paintA()
6 paint()
----> 7 paintANameError: name 'paintA' is not defined
但是不可以對其進行修改
a=6 def FuncX(x): def FuncY(y): return a*y // return x*y,這裡也可以寫這條語句進行測試,因為對於FuncY()來說,x也算外部變數,我這裡主要是為了突出外部變數這個概念 return FuncY FuncX(5)(6)//把5賦給x,6賦給y //輸出結果如下: 36
a=6 def FuncX(x): def FuncY(y): #global a 加上這條語句即可修改a的值 a=a*y return a #試圖修改 a 的值 #return a=a*y Python不允許返回賦值表示式,並不是因為修改a的原因,這裡更新一下 #更新時間 2019.1.4 return FuncY FuncX(5)(6) //報錯資訊 UnboundLocalError: local variable 'a' referenced before assignment
對於全域性變數的修改,如果全域性變數是int或者str,那麼如果想要在函數中對函數變數進行修改,則需要先在函數內,宣告其為global或nonlocal,在進行修改, 如果是list或者dict則可以直接修改
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45