作業要求:下述所有**畫圖以及分析**執行流程
1、以定義階段為準,先畫出命名空間的巢狀關係圖
2、然後找到呼叫函式的位置,寫出函式呼叫時**的執行過程,涉及到名字的查詢時,參照1中畫好
的巢狀圖,標明查詢順序,一層一層直到找到位置
=題目一
程式**執行過程中:
1)執行** func():
func()的區域性命名空間中有乙個名字input繫結了444的記憶體位址
2)執行** print(input):
在本層命名空間(全域性命名空間)中找到input=333,因此列印333
=題目二
執行** func():
①先在本層func函式的區域性變數空間中查詢x,發現沒有;
②然後往上一層全域性命名空間中查詢x,找到x=111,因此列印111
=題目三
首先在函式的定義階段,函式func只是在函式foo中進行了呼叫,而不是定義,因此函式func的區域性命名空間和函式foo的區域性命名空間是完全平行切互相獨立的,不存在『巢狀』關係,它們的上層命名空間都是全域性命名空間。
執行**foo:
1)執行** x=222,將222的記憶體位址繫結給x;
2)執行** func(),
①首先在func的區域性命名空間中查詢x,而func的區域性命名空間中沒有x;
②往上一層全域性命名空間中查詢x,找到x=1,因此列印1。
=題目四
執行**f1():
①先執行 input = 222,將222的記憶體位址繫結給input;
②再執行 f2(),需要列印x,首先在函式f2的區域性命名空間中查詢input,發現沒有;
③然後往上一層函式f1的區域性命名空間中查詢 input,找到input=222,列印222。
=題目五
執行** func():
先執行** print(x),需要列印x,先在本層函式func的區域性命名空間中尋找x,發現了本層中有為x進行定義,但是給x定義是在列印x之前,因此報錯:在區域性變數x定義之前進行了引用。
=題目六
1)執行** foo()
①執行** print(x,),在本層函式foo的區域性命名空間中尋找x,發現沒有;
②往上層全域性命名空間中尋找x,找到x=111,列印111。
2)執行**bar()
過程和1)的內容一樣。
=題目七
執行**func2()
①呼叫函式func1()
②執行** pint(x),需要列印x;在本層函式func1()的區域性命名空間中尋找x,沒有找到;
③往上層全域性命名空間中尋找x,找到x=3,輸出3。
=題目八
=1、如下全域性變數記錄了當前登入使用者,編寫登入功能,一旦使用者登入成功,則將全域性變數賦值為當前登入的使用者名稱 login_user=none
def log_in():
global login_user
while true:
inp_name = input('請輸入你的賬號:').strip()
user_info = {}
with open('db.txt','rt',encoding='utf-8') as f:
for line in f:
user_name,pwd = line.strip().split(':')
user_info[user_name] = pwd
if inp_name in user_info:
inp_pwd = input('請輸入你的密碼:').strip()
if inp_pwd == user_info[inp_name]:
print('登入成功。')
login_user = inp_name
break
else:
print('密碼錯誤,登入失敗。')
else:
print('你輸入的賬號不存在,請重新輸入。')
2、針對之前編寫的查詢餘額的功能,新增額外的邏輯:如果使用者沒有登入,則先執行登入功能
def check_balance():
while true:
inp_name = input('請輸入你的賬號:').strip()
user_balances = {}
with open('user_balance.txt','rt',encoding='utf8') as f:
for line in f:
user_name,balance = line.strip().split(':')
user_balances[user_name] = balance
if inp_name in user_balances:
if inp_name == login_user:
print('使用者 {} 的餘額為: {} 元。'.format(inp_name,user_balances[inp_name]))
break
else:
print('你還沒有登入,請登入後再進行查詢。')
log_in()
else:
print('你輸入的賬號不存在,請重新輸入。')
login_user = none
check_balance()
python之命名空間
一 命名空間namespaces 存放名字的空間,是對棧區的劃分,有了名稱之後,就可以在棧區中存放相同的名字,詳細的,命名空間分為三種。1.1 內建命名空間 存放的名字 存放的是python直譯器內內建的名字 存活週期 python直譯器啟動則產生。python直譯器關閉則銷毀。print 1.2 ...
python之命名空間
建立乙個類就會建立乙個類的命名空間,用來儲存類中定義的所有名字,這些名字稱為類的屬性 而類的良好總屬性 資料屬性和函式屬性 其中類的資料屬性是共享給所有物件 print id g1.camp 引用的位址是一樣的 print id garen.camp 輸出結果為 其中類的函式屬性是繫結到所有物件 p...
2020 12 29隨堂筆記函式,命名空間與作用域
1 函式物件 在python中,函式是第一類物件 第一等公民 本質 函式可以當變數用,故引發下列操作 1 可以被賦值 例 def func print from func f func print f f 2 可以當引數傳給另外乙個函式 def foo x x foo func 3 可以當做函式的返...