1. 程式人生 > >關於 global nonlocal 用法

關於 global nonlocal 用法

用法 上傳 繼承 global 內容 覆蓋 之前 自己的 參數變量

# 1 關於 globals()  locals()  nolocl 還有內置函數的引用
#
# 概念的解釋
# 命名空間
# 1 局部命名空間:每一個函數都有自己的命名空間
# 2 全局命名空間:寫在函數外的變量名
# 3 內置命名空間:pythong 解釋器啟動之後就可以使用的名字
#
# 作用域: 一個名字使用的的區域
# 全局作用域: 內置命名空間和全局命名空間的名字統稱全局作用域
# 局部作用域:局部空間的名字屬於局部作用域
#
# 局部作用域可以使用全局作用域的變量 ,而全局作用域不能使用局部作用域的變量
# 局部作用域還可以嵌套更小的局部作用域
#
# 作用鏈 小作用域可以使用大作用域的變量,但是作用鏈是單向的,不能反向應用
# globals() 保存了全局作用域的名字和值,盡量避免
# ,locals() 中的內容會根據執行位置來決定作用域中的內容 如果在全局執行 和globals() 一樣
# nonlocal x 修改最近擁有該變量的外層函數 不影響全局
---------
# 1題
# def func():
# print(1)
# def func():
# print(2)
# func()
# 答案 是 2 原因第一個函數被覆蓋
--------
# # 2題 ???? 改變全局第一個是為改變之前的 其它 會改變全局
# n = 1
# def func():
# global n
# n = n +1
# print(n)
# print(n)
# func()
# print(n)
---------
# 4題 nonlocal 引用最近上一層的變量 全局不變 y 改變繼承父級爺爺級
# n = 1
# def func1():
# n = 2
# def func2():
# nonlocal n
# n+=1
# print(n)
# func2()
# func1()
# print(n)
# 答案 是 3 , 1 原因第一個函數被覆蓋
---------
# 5題 global 改變全局 n是全局的變量 全局為n =2
# n = 1
# def func1():
# n = 2
# def func2():
# global n
# n+=1
# print(n)
# func2()
# func1()
# print(n)
# 答案 2 2
---------
# 6題 帶上傳參數不能改變全局,能改變局部因為局部有參數變量
# a = 1
# def func(a):
# a+=1
# print(a)
# func(a)
# print(a)
# 答案 2 ,1
---------
# 題目
# n = []
# def func():
# n.append(1)
# print(n)
# print(n)
# func()
# print(n)
# 答案 是 [] ,[1] ,[1] 列表可修改 可變類型 和上傳參數不一樣

關於 global nonlocal 用法