日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vuex的命名空间有哪些_Python3 命名空间和作用域

發布時間:2024/7/23 vue 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vuex的命名空间有哪些_Python3 命名空间和作用域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

命名空間

先看看官方文檔的一段話:

A namespace is a mapping from names to objects.Most namespaces are currently implemented as Python dictionaries。

命名空間(Namespace)是從名稱到對象的映射,大部分的命名空間都是通過 Python 字典來實現的。

命名空間提供了在項目中避免名字沖突的一種方法。各個命名空間是獨立的,沒有任何關系的,所以一個命名空間中不能有重名,但不同的命名空間是可以重名而沒有任何影響。

我們舉一個計算機系統中的例子,一個文件夾(目錄)中可以包含多個文件夾,每個文件夾中不能有相同的文件名,但不同文件夾中的文件可以重名。

一般有三種命名空間:

  • 內置名稱(built-in names), Python 語言內置的名稱,比如函數名 abs、char 和異常名稱 BaseException、Exception 等等。
  • 全局名稱(global names),模塊中定義的名稱,記錄了模塊的變量,包括函數、類、其它導入的模塊、模塊級的變量和常量。
  • 局部名稱(local names),函數中定義的名稱,記錄了函數的變量,包括函數的參數和局部定義的變量。(類中定義的也是)

命名空間查找順序:

假設我們要使用變量 runoob,則 Python 的查找順序為:局部的命名空間去 -> 全局命名空間 -> 內置命名空間

如果找不到變量 runoob,它將放棄查找并引發一個 NameError 異常:

NameError: name 'runoob' is not defined。

命名空間的生命周期:

命名空間的生命周期取決于對象的作用域,如果對象執行完成,則該命名空間的生命周期就結束。

因此,我們無法從外部命名空間訪問內部命名空間的對象。

實例

# var1 是全局名稱
var1 = 5def some_func():
# var2 是局部名稱
var2 = 6def some_inner_func():
# var3 是內嵌的局部名稱
var3 = 7

如下圖所示,相同的對象名稱可以存在于多個命名空間中。


作用域

A scope is a textual region of a Python program where a namespace is directly accessible. "Directly accessible" here means that an unqualified reference to a name attempts to find the name in the namespace.

作用域就是一個 Python 程序可以直接訪問命名空間的正文區域。

在一個 python 程序中,直接訪問一個變量,會從內到外依次訪問所有的作用域直到找到,否則會報未定義的錯誤。

Python 中,程序的變量并不是在哪個位置都可以訪問的,訪問權限決定于這個變量是在哪里賦值的。

變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。Python的作用域一共有4種,分別是:

有四種作用域:

  • L(Local):最內層,包含局部變量,比如一個函數/方法內部。
  • E(Enclosing):包含了非局部(non-local)也非全局(non-global)的變量。比如兩個嵌套函數,一個函數(或類) A 里面又包含了一個函數 B ,那么對于 B 中的名稱來說 A 中的作用域就為 nonlocal。
  • G(Global):當前腳本的最外層,比如當前模塊的全局變量。
  • B(Built-in): 包含了內建的變量/關鍵字等。,最后被搜索

規則順序: L –> E –> G –>gt; B

在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內置中找。

g_count = 0 # 全局作用域def outer(): o_count = 1 # 閉包函數外的函數中 def inner(): i_count = 2 # 局部作用域

內置作用域是通過一個名為 builtin 的標準模塊來實現的,但是這個變量名自身并沒有放入內置作用域內,所以必須導入這個文件才能夠使用它。在Python3.0中,可以使用以下的代碼來查看到底預定義了哪些變量:

>>> import builtins>>> dir(builtins)

Python 中只有模塊(module),類(class)以及函數(def、lambda)才會引入新的作用域,其它的代碼塊(如 if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這些語句內定義的變量,外部也可以訪問,如下代碼:

>>> if True:... msg = 'I am from Runoob'... >>> msg'I am from Runoob'>>>

實例中 msg 變量定義在 if 語句塊中,但外部還是可以訪問的。

如果將 msg 定義在函數中,則它就是局部變量,外部不能訪問:

>>> def test():... msg_inner = 'I am from Runoob'... >>> msg_innerTraceback (most recent call last): File "", line 1, in NameError: name 'msg_inner' is not defined>>>

從報錯的信息上看,說明了 msg_inner 未定義,無法使用,因為它是局部變量,只有在函數內可以使用。

全局變量和局部變量

定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域。

局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序范圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。如下實例:

實例(Python 3.0+)

#!/usr/bin/python3 total = 0 # 這是一個全局變量# 可寫函數說明def sum( arg1, arg2 ): #返回2個參數的和." total = arg1 + arg2 # total在這里是局部變量. print ("函數內是局部變量 : ", total) return total #調用sum函數sum( 10, 20 )print ("函數外是全局變量 : ", total)

以上實例輸出結果:

函數內是局部變量 : 30函數外是全局變量 : 0

global 和 nonlocal關鍵字

當內部作用域想修改外部作用域的變量時,就要用到global和nonlocal關鍵字了。

以下實例修改全局變量 num:

實例(Python 3.0+)

#!/usr/bin/python3 num = 1def fun1(): global num # 需要使用 global 關鍵字聲明 print(num) num = 123 print(num)fun1()print(num)

以上實例輸出結果:

1123123

如果要修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變量則需要 nonlocal 關鍵字了,如下實例:

實例(Python 3.0+)

#!/usr/bin/python3 def outer(): num = 10 def inner(): nonlocal num # nonlocal關鍵字聲明 num = 100 print(num) inner() print(num)outer()

以上實例輸出結果:

100100

另外有一種特殊情況,假設下面這段代碼被運行:

實例(Python 3.0+)

#!/usr/bin/python3 a = 10def test(): a = a + 1 print(a)test()

以上程序執行,報錯信息如下:

Traceback (most recent call last): File "test.py", line 7, in test() File "test.py", line 5, in test a = a + 1UnboundLocalError: local variable 'a' referenced before assignment

錯誤信息為局部作用域引用錯誤,因為 test 函數中的 a 使用的是局部,未定義,無法修改。

修改 a 為全局變量,通過函數參數傳遞,可以正常執行輸出結果為:

實例(Python 3.0+)

#!/usr/bin/python3 a = 10def test(a): a = a + 1 print(a)test(a)

執行輸出結果為:

11

總結

以上是生活随笔為你收集整理的vuex的命名空间有哪些_Python3 命名空间和作用域的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。