1、函式物件
在python中,函式是第一類物件、第一等公民
本質:函式可以當變數用,故引發下列操作:
1、可以被賦值
例:
def
func()
:print
('from func'
)f = func
print
(f)f(
)
2、可以當引數傳給另外乙個函式
def
foo(x)
: x(
)foo(func)
3、可以當做函式的返回值
def
foo(x)
:return x
res = foo(func)
print
(res)
4、可以當做容器型別的元素
l =
[func,]l[
0]() #呼叫函式
加括號會觸發一段**的執行,變數不行
2、函式的巢狀 #在函式裡在定義另乙個函式
例:
def
max2
(x,y)
:if x>y:
return x
else
:return y
defmax4
(a,b,c,d)
: res1 = max2(a,b)
#呼叫max2函式
res2 = max2(res1,c)
res3 = max2(res2,d)
return res3
定義:
def
f1(x)
:deff2(
):print
(x)print
(f2)
f1()
3、命名空間與作用域
namespace命名空間:存放名字地方
內建命名空間:
存放內建的名字
生命週期:python直譯器啟動則出現,關閉則銷毀
全域性命名空間:
存放頂級的名字(除了在函式裡的名字,檔案裡的名字)
生命週期:執行python檔案時產生,執行完畢則銷毀
區域性命名空間: 存放函式內的名字
生命週期:呼叫函式時產生,函式呼叫結束後銷毀
命名空間並不存在巢狀關係,名字找尋順序(名字訪問優先順序) 基於當前函式內->外層函式->全域性->內建命名空間 (legb)
定義函式名不能產生命名空間,只有呼叫的時候才會產生命名空間
例:
len=10
deffunc()
:len=20
print
(len
)func(
)print
(len
)
例2:
x =
111deff1(
):print
(x)deff2(
):x=
222 f1(
)f2(
)ps:此時x=
111,不要看f2的區域性命名空間
例3:
x=
111deff1(
):print
(x) x=
222f1(
)此時會報錯,優先呼叫f1的x,但應該遵循先定義後呼叫的原則
由此可見命名空間與作用域的關係 是在函式定義階段(掃瞄語法的時候)確定的,與呼叫位置無關(**)
作用域:
全域性作用域:
內建命名空間 + 全域性命名空間
特點:全域性存活,全域性有效
區域性作用域:
區域性命名空間
特點:臨時存活,區域性有效
global
x =111
deffunc()
:global x #宣告變數名是來自於全域性的
x =222func(
)print
(x)#當全域性變數為不可變型別時,若不加global x 就無法改掉全域性變數,同時要注意不要在區域性作用域裡更改全域性作用域的變數,
否則多個函式一起更改時,無法確定全域性變數
x =
111def
func()
:nonlocal x #宣告變數名是來自於外層函式的,不是全域性,它永遠不會去全域性找,只會在外層函式打轉
x =222func(
)print
(x)
4、閉包函式=函式物件+函式巢狀+命名空間與作用域
閉:指的是該函式是定義在函式內的函式
包:指的是該函式引用了乙個外層函式作用域的名字 #閉包函式就是一種為函式體傳參的方案
def
outter
(x):
def():
print
(x)f1 = outter(
111)
f1()
引公升內容:
裝飾器:
什麼是裝飾器?
裝飾器就是乙個用來為被裝飾物件新增新功能的工具
2、為何要用裝飾器
開放封閉原則:一旦軟體上線執行之後,應該對修改源**封閉,對擴充套件功能開放
原則:1、不修改函式內的源**
2、不修改函式的呼叫方式
裝飾器就是在遵循原則1和原則2的前提下,為被裝飾物件新增上新功能
下面就是裝飾器的乙個應用,用於檢測程式執行時間的乙個裝飾器
import time
deftimer
(func)
:def()
: start=time.time(
) res=func(
) stop = time.time(
)print
("程式執行了%s秒"
%(stop-start)
)return res
index=timer(index)
index(
)
隨堂筆記(二) 記憶體分配函式
malloc 函式就是在記憶體中找一片指定大小的空間,然後將這個空間的首位址範圍給乙個指標變數,這裡的指標變數可以是乙個單獨的指標,也可以是乙個陣列的首位址,這要看malloc 函式中引數size的具體內容。void cdecl malloc in size t size 函式原型 int p in...
上課隨堂筆記
運算子有一元 二元和三元運算子。分類 一元二元和三元 乙個數兩個數三個數 按優先順序 運算方向分 a b c 從左向右 從右向左 賦值運算子為 方向 從右向左 優先順序 最低 let a b c d 5 先算右 注意 左側只能有乙個常量或變數 求餘 自加自減!不能用於常量只能用於變數 1 var a...
18 7 19隨堂筆記
配置vimrc vim etc vimrc 1.set autoindent 的意思是自動縮排 2.set tabstop 4 的意思是插入模式下按下 tab 後游標則向後退4格。3.set number 的意思是設定行號。也可低行模式下 set nu set nonu 設定 取消設定 4.synt...