一、如何为函数定义keyword-only参数(写出个例子即可)?
1、使用*kwargs,仅可变仅位置传参,无缺省值;
def foo(*kwargs):
return kwargs
foo(a=1,b=2)
2、在或者args之后的参数,仅接受keyword-only
在*args之后,使用**kwargs,接受可变的keyword-only;
def foo(a=1,b=2,*args,**kwargs):
return a,b,args,kwargs
#a,b为仅位置传参,*args可变仅位置,**kwargs为keyworld-only
foo(100,200,300,d=400)
(100, 200, (300,), {'d': 400})
在‘*’之后,接受不可变的keyword-only,key必须一致
def foo(a=1,b=2,*,c,d):
return a,b,c,d
foo(100,200,c=300,d=400)
(1, 2, 4, 5)
二、什么是LEGB,请解释
理解为函数作用域的范围,或者是在函数执行是优先调用的变量;
-
函数的作用域可以理解为变量的有效范围:对外不可见,对内穿透 -
函数运行时优先选择本地的变量,无则使用外层函数变量,然后在选择全局的 -
可以使用nonlocal、global语句影响函数执行是选择的变量;
L(Local) > E(Enclosing外层函数局部变量) >G(Global)> B(内建函数(built-in))
在各自的函数定义本地变量,函数执行优先选择本地的;
a = 666
def foo1():
a = 1
print(a)
def foo2():
a = 100
print(a)
def foo3():
a = 1000
print(a)
return foo3()
return foo2()
foo1()
1
100
1000
当内层函数不存在本地变量的时候,会选择外层函数局部变量
a = 666
def foo1():
a = 1
print(a)
def foo2():
a = 100
print(a)
def foo3():
print(a)
return foo3()
return foo2()
foo1()
1
100
100
当函数中局部变量全部不存在是,会选择global全局变量
a = 666
def foo1():
print(a)
def foo2():
print(a)
def foo3():
print(a)
return foo3()
return foo2()
foo1()
666
666
666
三、实现一个计算机程序,如下效果:
-
运行后提示让用户输入一个数字 -
提示输入操作符(+ - * /) -
再次提示输入一个数字 -
打印计算结果 -
在不退出程序的前提下,可以允许用户继续输入新一组数据计算 -
尽可能改善用户体验 count = 1
while True:
print("=========================================================")
print("您计算的次数为:",count)
count += 1
print("=========================================================")
print("选择运算:")
print("1、相加")
print("2、相减")
print("3、相乘")
print("4、相除")
print("quit:退出")
slect = input('请输入选择的运算:')
if slect == 'quit':
break
a = int(input("请输入第一个数字:"))
b = int(input("请输入第二个数字:"))
if slect == '1':
print(a+b)
elif slect == '2':
print(a-b)
elif slect == '3':
print(a*b)
elif slect == '4':
print(a/b)
else:
print("运算符为非法字符")
break
|