问题一:lambda函数究竟是什么原理?
问题二:请看代码
def switch(option):
funcdic={
1:lambda:searchMode(),
2:lambda:editMode(),
3:lambda:exit()
}
return funcdic[option]()
这一段代码 假如我在查询单词里我输入了数字9(代表退出查询,回到主菜单),那么请问return了什么使得这一段函数能成功跳出并执行下一段代码(即:怎么又回到了主菜单)
while True:
print('----------欢迎实用英汉词典---------')
print('1.查询单词\n2.添加单词\n3.退出\n')
option=int(input('请输入你的选择:'))
switch(option)
```python
dict={}
digits='0123456789'
path='F:\\Users\\马欣桐\\Documents\\python\\本书资源\\字典\\dictionary.txt' #最后要把输入键放到下一行
def readFile(path,arg):
try:
file=open(path,arg,encoding='GBK') #格式需要ANSI的
except:
file=open(path,'w',encoding='GBK')
return file
def readWords():
file=readFile(path,'r')
while True:
line=file.readline()
#print(line)
if not line:
break
word=line.split(' ',2)
#print(word)
dict[word[0]]=word[1][:-1]
#print(dict)
file.close()
def writeFile(word,dsp):
file=readFile(path,'a')
file.write('{} {}\n'.format(word,dsp))
file.close()
def modifyFile(word,dsp):
file=readFile(path,'r')
line=file.readlines()
#print(line)
flen=len(line)-1
#print(flen)
for i in range(flen):
if word in line[i]:
file.close()
line[i]='{} {}\n'.format(word,dsp)
print(line[i])
file=readFile(path,'w')
print(line)
file.writelines(line)
break
file.close()
def editMode():
print('*'*50)
print('*'*50)
while True:
word=input('(按数字键退出)请输入你想添加或修改的单词:')
if word in digits:
print('*'*50)
print('*'*50)
return
try:
print('该单词已存在于单词库,当前解释是:{}'.format(dict[word]))
except:
print('您添加的是一个新单词')
print('----------------------------------')
description=input('请输入您的解释:\n')
try:
dict[word]+=',%s'%description
modifyFile(word,dict[word])
except KeyError:
dict[word]='%s'%description
writeFile(word,dict[word])
print('------------添加完成--------------')
def searchMode():
print('*'*50)
print('*'*50)
while True:
word=input("(按数字键退出)请输入你想查的单词:")
if word in digits:
print('*'*50)
print('*'*50)
return
print('----------------------------------')
try:
print(dict[word])
except KeyError:
print('对不起,这个单词没有收录')
print('----------------------------------')
def interface():
readWords()
def switch(option):
funcdic={
1:lambda:searchMode(),
2:lambda:editMode(),
3:lambda:exit()
}
return funcdic[option]()
while True:
print('----------欢迎实用英汉词典---------')
print('1.查询单词\n2.添加单词\n3.退出\n')
option=int(input('请输入你的选择:'))
switch(option)
interface()
###### 运行结果及报错内容
lambda是函数表达式
lambda:searchMode()
就等同
def xxxxxx():
return searchMode()
def switch(option):
funcdic={
1:lambda:searchMode(), 是创建一个没有名字的匿名函数,searchMode()是匿名函数体中执行的代码,把这个匿名函数的引用地址赋值给funcdic字典的1键名中,(这时不会执行函数)
2:lambda:editMode(),
3:lambda:exit()
}
当option=1时 funcdic[option] 就是lambda:searchMode()匿名函数的引用,在后面加括号funcdic[option]()
就是调用执行这个匿名函数。并反回searchMode()的返回值。
1 执行interface()
2 进入 while True: 循环
3 输入1赋值给option 调用 switch()
4 执行funcdic[1]() 调用searchMode()函数
5 在searchMode()中输入数字退出 ,回到(4)处之后继续执行
回到(4)处之后return退出switch函数 ,回到(3)处之后继续执行
回到(3)处之后还是在 while 循环中,继续进行下一次循环又输出主菜单
如有帮助,望采纳!谢谢!