關鍵字引數,命名空間和作用域

2022-07-24 06:30:13 字數 3643 閱讀 6932

​ 在定義函式時,*後定義的引數,如下所示,稱之為命名關鍵字引數

​ 命名關鍵字實參必須按照key=value的形式為其傳值

def func(x,y,*,a,b): # 其中,a和b稱之為命名關鍵字引數

print(x,y)

print(a,b)

func(1,2,b=222,a=111)

示例def func(x,y,*,a=11111,b):

print(x,y)

print(a,b)

func(1,2,b=22222)

​ 位置新參,預設形參,*args,命名關鍵字形參,**kwargs

def func(x,y=111,*args,z,**kwargs):

print(x)

print(y)

print(args)

print(z)

print(kwargs)

def func(x,y,z,a,b,c):

print(x)

print(y)

print(z)

print(a)

print(b)

print(c)

func(111,y=222,*[333,444],**)

# 111,y=222,333,444,b=555,c=666,位置不對應

func(111,*[333,444],a=222,**)

# 111,333,444,a=222,b=555,c=666

func(111,*[333,444],**,a=222,)

# 111,3333,4444,b=555,c=666,a=222

​ 命名空間是對棧區的劃分,存放名字的地方.有了命名空間之後,就可以在棧區中存放相同的名字

存放的名字:

​ 存放的python直譯器內建的名字

存活週期:

​ python直譯器啟動則產生,python直譯器關閉則銷毀

>>> print

in function print>

>>> input

in function input>

存放的名字:

​ 只要不是函式內定義、也不是內建的,剩下的都是全域性命名空間的名字

存活週期:

​ python檔案執行則產生,python檔案執行完畢後銷毀

import os

x=10

if 13 > 3:

y=20

if 3 == 3:

z=30

# func=函式的記憶體位址

def func():

pass

class foo:

pass

存放的名字:

​ 在呼叫函式時,執行函式體**過程中產生的函式內的名字

存活週期:

​ 在呼叫函式時存活,函式呼叫完畢後則銷毀

def func(a,b):

pass

func(10,1)

func(11,12)

func(13,14)

func(15,16)#分別建立不同的區域性命名空間

內建命名空間》全域性命名空間》區域性命名空間

區域性命名空間》全域性名空間》內建命名空間

當前所在的位置向上一層一層查詢

如果當前在區域性命名空間:

區域性命名空間—>全域性命名空間->內建命名空間

input=333

def func():

# input=444

print(input)

func()

如果當前在全域性命名空間

全域性命名空間->內建命名空間

input=333

def func():

input=444

func()

print(input)

示範1:

def func():

print(x)

x=111

func()

示範2:命名空間的"巢狀"關係是以函式定義階段為準,與呼叫位置無關

x=1def func():

print(x)

def foo():

x=222

func()

foo()

示範3:函式巢狀定義

input=111

def f1():

def f2():

# input=333

print(input)

input=222

f2()

f1()

示範4:

x=111

def func():

print(x) #

x=222

func()

​ 內建命名空間、全域性命名空間

特點:

x=111

def foo():

print(x,id(x))

def bar():

print(x,id(x))

foo()

bar()

print(x,id(x))

​ 區域性命名空間的名字

特點:

def foo(x):

def f1():

def f2():

print(x)

# legb

# builtin

# global

def f1():

# enclosing

def f2():

# enclosing

def f3():

# local

pass

#示範1:

x=111

def func():

global x # 宣告x這個名字是全域性的名字,不要再造新的名字了

x=222

func()

print(x)

#示範2:對於不可變型別,不需要再次定義

l=[111,222]

def func():

func()

print(l)

x=0

def f1():

x=11

def f2():

nonlocal x

x=22

f2()

print('f1內的x:',x)

f1()

Python中關鍵字引數和命名關鍵字引數的區別

python中函式的引數有位置引數 預設引數 可變引數 命名關鍵字引數和關鍵字引數,這個順序也是定義函式時的必須順序。本文主要是講講命名關鍵字引數和關鍵字引數的區別 可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。而關鍵字引數允許你傳入0個或任意個含引數名的引數...

命名關鍵字引數

如果要限制關鍵字引數的名字,就可以用命名關鍵字引數,例如,只接收city和job作為關鍵字引數。這種方式定義的函式如下 def person name,age,city,job print name,age,city,job 和關鍵字引數 kw不同,命名關鍵字引數需要乙個特殊分隔符 後面的引數被視為...

預解釋 作用域和this關鍵字

在js 執行之前,首先會在當前作用域下將所有帶var和function關鍵字的進行提前宣告 declare 或者定義 defined 引用資料型別開闢的空間 作用域 叫做堆記憶體 預解釋的7步驟 注意 在私有作用域下,預解釋的變數和定義的形參變數都是私有變數,在函式體中,我們遇到乙個變數首先看一下是...