## 1.為了避免unboundLocalError
發生unboundLocalError!
def generate_integer(level):if level == 1:X = randint(1,9)return X這里出錯的原因在于,一旦if 后面的條件沒有成立,然后X根本沒出生,然后你去使用它,這是有問題的
(這是搜到的例子)
1.第一個解決的辦法:就是在def里面無條件的賦值,也是最簡單的
2.使用場景,你需要修改def外面的全局變量,應該要在def里面global一下,不然改不了
3.使用場景,多個def 函數,需要在內部def 里面使用nonlocal關鍵詞一下,才可以修改外部def里面的變量
2. 一些容易誤解的概念
1.全局初始化 和 無條件賦值的區別:
這里問X沒有全局初始化?X在函數中沒有無條件賦值?
不是一個概念。
簡:
全局初始化:def外面的無條件賦值
函數中無條件賦值:def里面的無條件賦值
2.python 和 C語言 作用域的區別:
簡:
python:只有def或者class可以生小孩(變量)。
沒有語句塊,例如if else ,match…case等等
C語言:所有人(block,只要是帶花括號的{})都可以生小孩(變量)
共性:自己生的小孩(變量),在自己肚子里和身邊活動(作用域)
3. 為什么X的值一直不變呢?
確實(if 的條件不成立)不一樣,所以一直不變
細心的盆友會發現,我們 input的東西是一個 str,不是數字,
這就是為什么一直X的值沒有任何變化
from random import randint
def generate_integer(level):X = 10if level == 1:X = randint(1,9)return X
def get_level():level = input("Level: ")my_list = [1,2,3]while True:if not level.isdigit():level = input("Level: ")elif int(level) not in my_list:level = input("Level:")else:return level
level = get_level()
answer = generate_integer(level)
print(level)
print(answer)
修改:
level = int(get_level())