函式物件 命名空間 作用域

2022-06-08 04:09:08 字數 2906 閱讀 2808

定義函式的三種方式

1.空函式:可以快速構建專案框架,使專案架構清晰明了

def func():

pass

2.無參函式

def func():

print(

'from func

')

3.有參函式

def func(x,y,*args,**kwargs):

pass

命名關鍵字引數:在函式定義階段 寫在*與**可變長引數之間的形參,  在給命名關鍵字傳值的時候,只能用關鍵字為其傳值

def func(x,y = 1,*args,z = 3,m,**kwargs):

print

(x,y,args,z,m,kwargs) # 1 2 (3, 4) 5 6

func(1,2,3,4,z = 5,m = 6,n = 7,l = 9)

函式是第一類物件:函式名指向的值可以被當作引數傳遞

函式名可以被當作引數傳遞給其他函式

deffunc():

print('

from func

') #

from func

defindex(args):

args()

print('

from index

') #

from index

index(func)

函式名可以被當作被當作函式的返回值

defindex():

print('

index

') # index

deffunc():

print('

func

') # func

return

index

res =func()

res()

函式名可以被當作容器型別的引數

deffunc():

print('

func

') #

func func

print(func()) #

none

l = [1,2,func,func()]

print(l) #[1, 2, , none]

在函式內部呼叫其他函式,可以將複雜的邏輯簡單化

defindex():

func()

print('

index

') #

index

deffunc():

print('

func

') #

func

index()

def

outer():

print('

outer')

definner():

print('

inner')

return

inner

res =outer()

res()

函式內定義的應用場景

'''寫乙個函式

該函式使用者可以通過傳參的不同控制函式執行不同的功能

'''

函式的巢狀呼叫

函式內部呼叫其他自己定義好的函式,函式通過引數不同返回不同的內容。

命名空間的分類

1.內建命名空間:python直譯器已經定義好的名字  len,max

2.全域性命名空間:檔案級別**    if,for,while無論巢狀多少層,它們內部所建立的名字都是全域性命名空間

3.區域性命名空間:函式體內置立的名字都屬於區域性命名空間

生命週期:

內建命名空間:只要python直譯器啟動就會建立,關閉python直譯器的時候內建名稱就會自動銷毀

全域性命名空間:只要執行py檔案就會自動建立,py檔案程式執行結束自動銷毀

區域性命名空間:函式呼叫的時候自動建立,函式呼叫結束立刻銷毀

名字的查詢

1.需要先確定你當前在哪

站在全域性:全域性 >>> 內建

站在區域性:區域性 >>> 全域性 >>> 內建

def

func():

x = 1

defindex():

print(x) #

1return

index

res =func()

x = 999res()

函式在定義階段查詢名字的順序就已經固定了,不會因為函式的呼叫位置變化而變化

作用域全域性作用域   全域性有效:內建命名空間    全域性命名空間

區域性作用域   區域性有效:區域性命名空間

global nonlocal  在區域性修改全域性的變數

global 在區域性修改全域性的不可變資料型別

x = 1 #

不可變型別

username = '

jason

'def

func():

global x,username #

修改全域性變數 而不是建立區域性命名空間

x = 999username = '

egon

'func()

print(x,username) # 999 egon

區域性修改區域性

deffunc():

x = 1

defindex():

nonlocal x

x = 2index()

print(x) #

2func()

global:區域性修改全域性,如果想修改多個,逗號隔開

nonlocal:區域性修改區域性,如果修改多個,逗號隔開

命名空間作用域

作用域 命名空間所能夠作用的範圍 內建命名空間 程式在任何階段任何位置均可以使用 全域性有效 全域性命名空間 程式在任何階段任何位置均可以使用 全域性有效 區域性命名空間 一般情況下只在各自的區域性命名空間有效 global 在區域性命名空間內更改全域性命名空間變數,使用關鍵字生命。在變數是不可變型...

函式物件,函式巢狀,命名空間,作用域,閉包函式

一 函式物件 函式是第一類物件 值的記憶體位址可以像變數一樣去使用 def foo foo 函式的記憶體位址,可以當做一種變數值去使用 1 函式可以被引用 def foo print hello f foo print f f 2 可以當作引數傳遞 def foo print hello def b...

作業,3 19命名空間作用域

1 如下全域性變數記錄了當前登入使用者,編寫登入功能,一旦使用者登入成功,則將全域性變數賦值為當前登入的使用者名稱 login user none login user none def users file,user into,pas with open file,mode rt encoding...