名前空間と学習のpythonの範囲

動作要件:以下は、すべてのコードと解析コードの実行フロー描画
1、定義フェーズの対象、図ネームスペースに示す第1の入れ子関係
を2、及び関数呼び出しを見つけを、関数の実行は、コードを記述するために呼び出しますそれは良い1・イン・ピクチャーを参照して、名前を見つけるために来るとき
、あなたが場所を見つけるまで層によって、層検索順序を示し、ネストされたチャート

=================== ===================トピック

input=333
def func():
    input=444
func()
print(input)   #333

プログラムコード実行のプロセス:

)(コードfuncを実行します。

1)FUNC()は、ローカル名前空間である名前の入力結合されたメモリ・アドレス444を有しています

コード印刷(入力)を実行します。

印刷SO 2)333、現在の入力層の名前空間(グローバルネームスペース)= 333で見つかっ

===================タイトル2 ===================

def func():
    print(x)
x=111

func()   #111

)(コードfuncを実行します。

本関数funcのローカル変数空間層において①X最初の外観は全く認められなかっ。

②その後、一つのグローバルネームスペースまで、xを求めるのx = 111見つけ、111ので、印刷します

===================タイトル3 ===================

x=1
def func():
   print(x)

def foo():
    x=222
    func()

foo()    #1

最初の関数の定義フェーズの間、むしろ定義より、関数funcの関数fooでコールを除き、従ってローカル名前空間ローカル名前空間と関数foo FUNC関数が切断する互いに平行の完全に独立して、NO「ネストされた」が存在しません関係は、その上側の名前空間はグローバル名前空間です。

コード実行FOO:

1)実行コードX = 222、メモリアドレスxに222バインド。

2)実行コードFUNC()、

①FUNCでのローカル名前空間xの最初のルックスは、およびローカル名前空間内FUNCは、Xされていません。

X = 1見つけ、Xを見つけるために、一つのグローバルネームスペースを②、したがって1を印刷します。

===================タイトル4 ===================

input=111
def f1():
    def f2():
        # input=333
        print(input)
    input=222

    f2()

f1()   #222

)(コードF1を実行します。

①第行う入力= 222、メモリアドレス入力222に結合します。

②その後、F2()、Xを印刷する必要があり、ローカル・ネーム・スペース入力関数f2の最初の外観を行い、我々は何も見つかりませんでした。

③その後、入力のローカル名前空間の参照関数f1アップ層は、= 222、プリント222の入力を見つけます。

===================タイトル5 ===================

x=111
def func():
    print(x) #
    x=222

func()        #UnboundLocalError: local variable 'x' referenced before assignment

)(コードfuncを実行します。

最初の実行コード(X)を印刷し、xは現在層のローカル名前空間FUNC機能でxを求めるために、印刷する必要があり、この層は、定義されたXを約束したが、Xへの印刷は、エラーが報告され、xは前に定義されています。ローカル変数xで参照として前に定義されています。

===================タイトル6 ===================

x=111

def foo():
    print(x,)

def bar():
    print(x)

foo()        #111
bar()        #111

1)実行コードのfoo()

この層の関数fooでXを見つけるために、実行コード①(X、)、ローカル名前空間を印刷し、見つかりませんでした。

トップグローバルネームスペースに向けて②、xを求めるのx = 111見つけ、111を印刷します。

コードバーの2)実行()

プロセスと同一の内容1)。

===================タイトル7 ===================

x=1
def func2():
    func1()

x=2
def func1():
    print(x)

x=3

func2()            #3

実行コードの関数func2()

①()関数の関数func1を呼び出します

②実行コードPINT(x)は、印刷する必要がX; Xは、現在のレベルの関数func1の目線()は、ローカル名前空間のが見つかりません。

③X = 3を見つけ、グローバルネームスペース上部Xを見つけるために、出力3。

===================タイトル8 ===================
1、次のグローバル変数レコード電流がログオンしているユーザー、ログイン機能を書いて、ユーザーが正常にログインすると、現在のグローバル変数の割り当ては、ログオンしたユーザー名LOGIN_USER =なし

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()

おすすめ

転載: www.cnblogs.com/leilijian/p/12526784.html
おすすめ