作用域、區域性和全域性變數
前向引用:
deftest(name,age=
18,*args,**kwargs):
(name)
(age,args,kwargs)
school("test")
#程式執行從上到下的,這裡的school還沒定義,所以執行報錯。
test('alex',
age=20,
flag
="f",
water
=1.5
)defschool(source):
(source)
執行結果:
報錯
nameerror: name 'school' is not defined
正確寫法:
deftest(name,age=
18,*args,**kwargs):
(name)
(age,args,kwargs)
school("test")
defschool(source):
(source)
test('alex',
age=20,
flag
="f",
water
=1.5
)執行結果:
alex
20 ()
test
區域性變數(只在函式裡生效,這個函式就是這個變數的作用域)
deflogers(name):
('before change:',name)
name='alex'
('after change:',name)
age=23
name='alex'
logers(name)
(name)
print(age) #這裡報錯,nameerror: name 'age' is not defined,,age屬於區域性變數,只能在區域性生效。
執行結果:
before change: alex
after change: alex
alex
全域性變數(在頂層,第一級定義的變數都是全域性變數)
school='oldboy'#頂層定義全域性變數
deflogers(name):
school="mage"#區域性變數
('before change:',name,school)
name='alex'
('after change:',name)
age=
23name='alex'
logers(name)
(name)
#print(age)
(school)
執行結果:
before change: alex mage #區域性變數優先,雖然內部變了,但是全域性變數還是沒變。
after change: alex
alex
oldboy #全域性變數
改全域性變數
不要這麼用1:
school='oldboy'
deflogers(name):
globalschool
#我要把函式的全域性變數改了
school="mage"
('before change:',name,school)
name='alex'
('after change:',name)
age=
23name='alex'
logers(name)
(name)
#print(age)
(school)
執行結果:
before change: alex mage
after change: alex
alex
mage
總結:
區域性變數的作用域只在子程式(函式)中有效
2、全域性變數的作用域在整個程式
3、全域性變數配置在程式最頂層
4、需要把全域性變數改為區域性變數那就用
global
變數名(不要那麼用)
不要這麼用2:(作死)
defstudent():
globalname
#這個作用是把 name定義為全域性變數
name='alex'
student()
(name)
為啥:容易混亂程式(找bug找死你)
遞迴:(在函式內部可以呼叫自己)
1.必須要有明確的結束條件
2.每次進入更深一層的時候,問題規模應該比上一層要小
3.遞迴效率不高,遞迴層次過多會導致棧溢位。(在計算機中,函式呼叫是通過棧(
stack
)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減少一層棧幀。由於棧的大小不是無限的,所以遞迴次數過多會導致棧溢位。)
defcalc(n):
#程式開始,取calc實參
(n)#列印判斷結果
ifint
(n/2
) >0 :
returncalc(
int(n/2))
#遞迴print
('>>>',n)
calc(10)
執行結果:
10 5
2 1>>> 1
函式式程式設計介紹:
函式式程式設計是一種抽象程度很高的程式設計正規化,純粹的函式式程式語言的編寫沒有變數。因此,任意乙個函式,只要輸入確定的,輸出就是確定的,這種純函式我們稱之為沒有***。而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到不同的輸出,因此這種函式是有***的。
函式式程式設計的乙個特點就是,允許把函式本身作為引數傳入另乙個函式,還允許返回乙個函式。
python對函式式程式設計提供部分支援,由於
python
允許使用變數,因此,
python
不是純函式式程式語言。
想學函式式程式設計可以學lisp、
hashshell
、erlang
高階函式:
變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就叫做高階函式。
defadd(a,b,f):
returnf(a)+f(b)
res=add(3,-
6,abs)
#abs 絕對值的意思
(res)
結果:9
12 python基礎 函式
12.1 函式簡介一段具有特定功能的 可重用的語句組 函式規則 1.def 2.return 表示式 結束函式,不帶表示式的return相當於返回 none 作用 降低程式設計難度和 復用def 函式名 引數 引數是佔位符 函式體return 返回值 引數是輸入 函式體是處理 結果是輸出 ipo 函...
12 Python內建函式
help 下面兩行分別為sys模組和str類的具體說明。help sys help str help 1,2,3 會詳細說明list的用法 help 1,2,3 dict class dict object dict new empty dictionary dict key,value pairs...
12 Python 檔案處理
資料夾 得到當前工作目錄,即當前python指令碼工作的目錄路徑 os.getcwd 返回指定目錄下的所有檔案和目錄名 os.listdir 函式用來刪除乙個檔案 os.remove 刪除多個目錄 os.removedirs r c python 檢驗給出的路徑是否是乙個檔案 os.path.isf...