flist = [] for i in range(3): def func(x): return x * i flist.append(func) for f in flist: print(f(2)) 如何改写上述代码解决上一个问题的功能bug,正确运行结果(0,2,4)
时间: 2023-06-05 21:08:22 浏览: 63
可以使用 lambda 表达式代替 def 函数来解决问题,如下所示:
flist = []
for i in range(3):
flist.append(lambda x, i=i: x * i)
for f in flist:
print(f(2))
运行结果为:0 2 4
相关问题
flist=[] for i in range(3): def func(x): return x * i flist.append(func) for f in flist: print(f(2)) 如何改写上述代码解决上一个问题的功能bug,正确运行结果(0,2,4)
可以修改代码如下:
flist = []
for i in range(3):
def func(x, i=i):
return x * i
flist.append(func)
for f in flist:
print(f(2))
输出结果为:0 2 4。
在修改后的代码中,将变量i作为默认参数传递给了函数func,这样每个函数func的i值就被固定为了循环变量i的值,就可以避免上一个代码中所遇到的问题了。
查看这段代码有没有错误 def countPic(url): print('正在检测图片总数,请稍等.....') pic_num='' t = 0#pn变量,用于拼接Url Url = url + str(t) try: html = requests.get(Url,header,timeout=7) except BaseException: print('请求异常') else: result = html.text #bdFmtDispNum: "约1,050,000", # print(result) flist = re.findall('"bdFmtDispNum":"(.*?)",', result, re.S) # 先利用正则表达式找到图片总数 # print(type(pic_num)) #list # print(type(flist)) for i in flist: # print(i) pic_num+=i # print(pic_num) return pic_num
这段代码可能存在以下错误:
1. 在调用 requests.get() 方法时,header 参数可能未定义。
2. 在调用 re.findall() 方法时,re.S 参数可能未定义。
3. 在对 pic_num 进行字符串拼接时,可能存在类型不匹配的问题。可以将 pic_num 定义为列表,然后使用 append() 方法添加字符串。
建议修正后的代码如下:
```python
import requests
import re
def countPic(url):
print('正在检测图片总数,请稍等.....')
pic_num = []
t = 0 # pn变量,用于拼接Url
Url = url + str(t)
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
try:
html = requests.get(Url, headers=header, timeout=7)
except BaseException:
print('请求异常')
else:
result = html.text
flist = re.findall('"bdFmtDispNum":"(.*?)",', result, re.S) # 先利用正则表达式找到图片总数
for i in flist:
pic_num.append(i)
return ''.join(pic_num)
```
此代码已经添加了 header 和 re.S 参数,并将 pic_num 定义为列表,最后使用 join() 方法将列表中的所有字符串拼接成一个字符串。
阅读全文