2020 12 29隨堂筆記函式,命名空間與作用域

2021-10-13 09:49:22 字數 3150 閱讀 8206

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...