1. 程式人生 > 遊戲攻略 >《怪物獵人崛起》龍氣斬斧配裝參考

《怪物獵人崛起》龍氣斬斧配裝參考

名稱空間

名稱空間:(namespace)存放名字的地方,是對棧區的劃分,聽了一種在相同專案中避免名字衝突的方法

有了名稱空間之後我們就可以在棧區存放相同的名字,詳細的名稱空間分為三種

1.1 內建名稱空間

存放的是python直譯器內建的名字 英文為 built-in

>>> print
<built-in function print>
>>> input
<built-in function input>

存活週期:python直譯器啟動則產生,python直譯器關閉則銷燬

1.2 全域性名稱空

只要不是函式內定義、也不是內建的、剩下的都是全域性名稱空間的名字,即模組中的變數,包括函式、類、其它匯入模組、模組級的變數和常量 英文為 global

import os  # 模組
x = 10. # 變數名
if 13 > 3:
  y = 20  # 也屬於全域性名稱空間
  
  
def func():  # 函式名
  a = 1
  b = 2

存活週期:該檔案執行則產生,檔案執行完畢之後銷燬

1.3 區域性名稱空間

在函式內定義的名稱,包括函式引數,區域性定義的變數 英文為local

x = 10  # x為全域性名稱
def func():
  a = 20  # a是區域性名稱
  def func2():
    b = 30. # b是內嵌的區域性名稱

存活週期:呼叫執行函式體程式碼時存活,呼叫完畢後銷燬

1.4 名稱空間查詢優先順序

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

內建名稱空間=>全域性名稱空間=>區域性名稱空間

如果當前區域性名稱空間:區域性的名稱空間去-> 全域性名稱空間 -> 內建名稱空間

如果當前在全域性名稱空間:全域性名稱空間=>內建名稱空間

注意:無法向內查詢,只能向外層一層一層查詢

作用域

作用域即作用範圍

全域性作用域:內建名稱空間,全域性名稱空間

1、全域性存活

2、全域性有效,被所有函式共享

區域性作用域:區域性名稱空間

1、臨時存活

2、區域性有效,函式內有效

  • L(Local):最內層,包含區域性變數,比如一個函式/方法內部。

  • E(Enclosing):包含了非區域性(non-local)也非全域性(non-global)的變數。比如兩個巢狀函式,一個函式(或類) A 裡面又包含了一個函式 B ,那麼對於 B 中的名稱來說 A 中的作用域就為 nonlocal。

  • G(Global):當前指令碼的最外層,比如當前模組的全域性變數。

  • B(Built-in): 包含了內建的變數/關鍵字等,最後被搜尋。

注意:名稱空間的巢狀關係是以函式定義為準生成的,與呼叫位置無關

def foo():
  print(x)

  
def bar():
  x = 111
  foo()
  
  
x = 100
bar()  # bar()的輸出結果為100

global 與 nonlocal關鍵字

當局部作用域想修改成為全域性作用域變數時,就需要用到global關鍵字

x = 1
def func():
  global x  # global關鍵字宣告
  x = 100
  print(x)
  

print(x)  # 此時全域性變數x已經被修改 x = 100
func()  #  100

nonlocal關鍵字用來修改巢狀作用域,即enclosing作用域,通俗的來說,即巢狀的外一層的變數,不會修改全域性中的變數

def outer():
  x = 10
  def inner():
    nonlocal x  # nonlocal 關鍵字宣告
    x = 555
    print(x)
  inner()
  print(x)
  
  
outer()  # 輸出結果為555 555