python學習之命名空間與作用域作業

2022-06-12 13:12:11 字數 4159 閱讀 6123

作業要求:下述所有**畫圖以及分析**執行流程

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 可以當做函式的返...