1. 如何为函数定义keyword-only参数(写出个例子即可)?
keyword-only形参,位于*args或者*,之后,只能接受关键字传入实参。
#示例1
def foo(x, *args, y):
print(x, y, args)
foo(1, 2, 4, y=200) #调用时keyword-only参数只支持以关键字形式传入的参数
#示例2
def foo(*, x, y):
print(x, y)
foo(x=1, y=‘abc‘)
#示例3
def bar(a, b, /, c, d=10, *args, m=20, n, **kwargs): #注意*args后面的m=20定义缺省值可以放在前面
print(a, b, c, d, args, m, n, kwargs)
#该函数中,m和n时keyword-only参数,需要以k,y的形式传入实参,但是因为m有默认值,所以直接传入n的参数即可。注意传参的时候要放到位置参数后面。
bar(1, 2, n=100, c=5)
2 5 10 () 20 100 {}
2. 什么是LEGB,请解释
变量的优先级顺序,优先级由高低依次是L-->E-->G-->B。函数定义中,优先使用本地局部变量,本地无定义的情况下在按顺序向外查找。
-
L: Local,本地局部变量。
-
E: Enclosing,外层函数局部变量。
-
G: Goabl,跟模块有关,当前模块中的全局变量,模块需要加载,默认是main模块。
-
B: Built-in,内建变量,print,list,str,int,range,Exception 生命周期和解释器相同。
3. 实现一个计算机程序,如下效果:
- 运行后提示让用户输入一个数字
- 提示输入操作符(+ - * /)
- 再次提示输入一个数字
- 打印计算结果
- 在不退出程序的前提下,可以允许用户继续输入新一组数据计算
- 尽可能改善用户体验
def addition(x, y):
return x + y
def subtraction(x, y):
return x - y
def multipulication(x, y):
return x * y
def division(x, y):
return x / y
def calculator(*args):
print("="* 30 + "简单计算器" + "=" * 30)
x = int(input(‘请输入一个数字: ‘))
o = input(‘请输入运算符 + - * /: ‘)
y = int(input(‘请输入第二个数字: ‘))
if x or y or o:
print("请按要求输入相应的字符。")
if o == ‘+‘:
return addition(x, y)
elif o == ‘-‘:
return subtraction(x, y)
elif o == ‘*‘:
return multipulication(x, y)
if o == ‘/‘ and y != 0:
return division(x, y)
else:
print("0不可以做除数,请重新输入。")
while True:
print("计算结果:{}".format(calculator()))
#输出结果
==============================简单计算器==============================
请输入一个数字: 1000
请输入运算符 + - * /: +
请输入第二个数字: 1000
请按要求输入相应的字符。
计算结果:2000