作业 —— day15
作业要求:下述所有代码画图以及分析代码执行流程
1.以定义阶段为准,先画出名称空间的嵌套关系图
2.然后找到调用函数的位置,写出函数调用时代码的执行过程,涉及到名字的查找时,参照1中画好的嵌套图,标明查找顺序,一层一层直到找到位置
=题目1=
input=333 # 定义全局变量input,赋值333
def func(): # 定义全局函数func(),无形参
input=444 # 定义局部变量input,赋值444
func() # 调用全局函数func()
print(input) # 输出全局变量input的值
# 输出:
# 333
# 过程:定义全局变量input,赋值333;定义全局函数func(),调用全局函数func(),执行函数func()
定义全局函数func()内的局部变量input,赋值444,无返回值,func()调用结束后,销毁
函数func()销毁后,只剩全局变量input=333,print输出333
=题目2=
def func(): # 定义全局函数func(),无形参
print(x) # 输出x
x=111 # 定义全局变量x,赋值111
func() # 调用全局函数func()
# 输出:
# 111
# 过程:定义全局函数func(),定义全局变量x,,赋值111
在全局函数func()内print(x),但是函数func()内无x,就去全局名称空间找,找到x=111
调用函数func(),找到全局变量x=111,print输出111
=题目3=
x=1 # 定义全局变量x,赋值1
def func(): # 定义全局函数func(),无形参
print(x) # 输出x
def foo(): # 定义全局函数foo(),无形参
x=222 # 定义局部变量x,赋值222
func() # 调用全局函数func()
foo() # 调用全局函数foo()
# 输出:
# 1
# 过程:定义全局变量x,赋值11,定义全局函数func(),无形参,定义全局函数foo()
在全局函数func()内print(x),但是函数func()内无x,就去全局名称空间找,找到x=1
在全局函数fooc()内定义局部变量x,赋值222,调用全局函数func(),输出全局名称空间的x=1
调用全局函数foo(),跳过x=222,因为x没被调用,调用函数func(),找到全局变量x=1,print输出1
=题目4=
input=111 # 定义全局变量input,赋值111
def f1(): # 定义全局函数f1(),无形参
def f2(): # 定义f1内的局部函数f2(),无形参
print(input) # 输出input
input=222 # 定义局部函数f2()内的局部变量input,赋值222
f2() # 调用局部函数f2()
f1() # 调用全局函数f1()
# 输出:
# 222
# 过程:定义全局变量input,赋值111,定义全局函数f1(),无形参
在全局函数f1()内定义局部函数f2(),无形参
在局部函数f2()内输出input,但是f2()内本身无input变量,就去和f2()同级的局部找,找到input=222
在全局函数f1()内调用f2(),print局部变量input=222
调用全局函数f1(),f1()内调用f2(),找到全局变量局部变量input=222,print输出222
=题目5=
x=111 # 定义全局变量x,赋值111
def func(): # 定义全局函数func(),无形参
print(x) # 输出x
x=222 # 定义局部变量x,赋值222
func() # 调用函数func()
# 报错:
# UnboundLocalError: local variable 'x' referenced before assignment
# 过程:定义全局变量x,赋值111;定义全局函数func(),无形参
在全局函数func()输出x,但是此时尚未定义变量x,去上一层找,找不到,去全局和内置也找不到,就会报错
在全局函数func()定义局部变量x,赋值222
调用全局函数func(),在输出x的时候找不到x,程序报错
=题目6=
x=111 # 定义全局变量x,赋值111
def foo(): # 定义全局函数foo(),无形参
print(x,) # 输出x
def bar(): # 定义全局函数bar(),无形参
print(x) # 输出x
foo() # 调用全局函数foo()
bar() # 调用全局函数bar()
# 输出:
# 111
# 过程:定义全局变量x,赋值111;定义全局函数foo(),无形参;定义全局函数bar(),无形参
在全局函数foo()输出x,但是此时尚未定义变量x,去全局找,找到x=111
在全局函数bar()输出x,但是此时尚未定义变量x,去全局找,找到x=111
调用全局函数foo(),找到全局变量x=111,输出111
调用全局函数bar(),找到全局变量x=111,输出111
=题目7=
x=1 # 定义全局变量x,赋值1
def func2(): # 定义全局函数func2(),无形参
func1() # 调用全局函数func1()
x=2 # 定义全局变量x,赋值2
def func1(): # 定义全局函数func1(),无形参
print(x) # 输出x
x=3 # 定义全局变量x,赋值3
func2() # 调用全局函数func2()
# 输出:
# 3
# 过程:定义全局变量x,赋值1;定义全局函数f2(),无形参
定义全局变量x,赋值2;定义全局函数f1(),无形参,定义全局变量x,赋值3
全局变量x的值一直被覆盖,最后为3
全局函数f2()调用全局函数f1(),全局函数f1()输出x,f1()内找不到x,在全局找到x=3,输出3
=题目8=
1.如下全局变量记录了当前登录用户,编写登录功能,一旦用户登录成功,则将全局变量赋值为当前登录的用户名login_user=None
login_user = None
def login():
inp_usr = input('请输入用户名:').strip()
inp_pwd = input('请输入密码:').strip()
if inp_usr == 'xxq' and inp_pwd == '123':
print("登录成功!")
global login_user
login_user = inp_usr
else:
print("帐号或密码错误!")
login()
print('当前登录的用户是:',login_user)