Geeker_odd 发表于 2022-3-20 12:52:17

映射map的返回如何显示

请教鱼油高手,代码如下:

from PIL import Image

x_1 = x_train[:15]

path_1 = "D:/PyCharm_project/mnist/try1/"

def file_name(x):
    counter = 0
    for x in range(15):
      img = Image.fromarray(x_1)
      img = img.resize((224,224)).convert('RGB')
      file_name = img.save(os.path.join(path_1,str(counter)+".jpg"))
      counter += 1
      
for i in map(file_name,range(15)):
    print(i)

但是,print出来的都是None, 这是为什么?后来我用字典解决了这个问题,但是我觉得用map应该也是可以的。

isdkz 发表于 2022-3-20 12:55:16

你希望 i 是什么?

qq1151985918 发表于 2022-3-20 12:58:35

函数没有返回值当然就都是None

Geeker_odd 发表于 2022-3-20 13:15:38

我希望把15对映射都打印出来

Geeker_odd 发表于 2022-3-20 13:17:52

后来我用字典,内容如下:
{0: 'D:/PyCharm_project/mnist/try\\0.jpg', 1: 'D:/PyCharm_project/mnist/try\\1.jpg', 2: 'D:/PyCharm_project/mnist/try\\2.jpg', 3: 'D:/PyCharm_project/mnist/try\\3.jpg', 4: 'D:/PyCharm_project/mnist/try\\4.jpg', 5: 'D:/PyCharm_project/mnist/try\\5.jpg', 6: 'D:/PyCharm_project/mnist/try\\6.jpg', 7: 'D:/PyCharm_project/mnist/try\\7.jpg', 8: 'D:/PyCharm_project/mnist/try\\8.jpg', 9: 'D:/PyCharm_project/mnist/try\\9.jpg', 10: 'D:/PyCharm_project/mnist/try\\10.jpg', 11: 'D:/PyCharm_project/mnist/try\\11.jpg', 12: 'D:/PyCharm_project/mnist/try\\12.jpg', 13: 'D:/PyCharm_project/mnist/try\\13.jpg', 14: 'D:/PyCharm_project/mnist/try\\14.jpg'}
但是,用map不知道为啥不能显示

isdkz 发表于 2022-3-20 13:43:15

Geeker_odd 发表于 2022-3-20 13:17
后来我用字典,内容如下:
{0: 'D:/PyCharm_project/mnist/try\\0.jpg', 1: 'D:/PyCharm_project/mnist/tr ...

map 函数是将你的迭代器传进指定的函数,然后得到函数的返回值的。

你的函数没有返回值默认就是 None 了,我改了以下你的代码,看看是不是你要的效果。

from PIL import Image

x_1 = x_train[:15]

path_1 = "D:/PyCharm_project/mnist/try1/"

def file_name(x):
    img = Image.fromarray(x_1)
    img = img.resize((224,224)).convert('RGB')
    counter = x + 1
    file_name = os.path.join(path_1,str(counter)+".jpg")
    img.save(file_name)
    return (file_name, counter)
      
for i in map(file_name,range(15)):
    print(i)

Geeker_odd 发表于 2022-3-20 15:10:59

isdkz 发表于 2022-3-20 13:43
map 函数是将你的迭代器传进指定的函数,然后得到函数的返回值的。

你的函数没有返回值默认就是 None...

counter = x + 1, 这个不行,因为我要按顺序在文件名字上显示正确的数字,就是0,1,2,3.........14

isdkz 发表于 2022-3-20 15:12:55

Geeker_odd 发表于 2022-3-20 15:10
counter = x + 1, 这个不行,因为我要按顺序在文件名字上显示正确的数字,就是0,1,2,3.........14

好吧,我看走眼你那个字典了,这样呢:
from PIL import Image

x_1 = x_train[:15]

path_1 = "D:/PyCharm_project/mnist/try1/"

def file_name(x):
    img = Image.fromarray(x_1)
    img = img.resize((224,224)).convert('RGB')
    file_name = os.path.join(path_1,str(x)+".jpg")
    img.save(file_name)
    return (x, file_name)
      
for i in map(file_name,range(15)):
    print(i)

Geeker_odd 发表于 2022-3-20 15:14:32

我给函数增加了返回值,但是还是None:
from PIL import Image
import keras
from keras.datasets import mnist
import os

(x_train,y_train),(x_test,y_test) = mnist.load_data()

x_1 = x_train[:15]

path_1 = "D:/PyCharm_project/mnist/try1/"

def file_name(x):
   
    for x in range(15):
      img = Image.fromarray(x_1)
      img = img.resize((224,224)).convert('RGB')
      file_name = img.save(os.path.join(path_1,str(x)+".jpg"))
      
    return file_name
      
for i in map(file_name, range(15)):
    print(i)

Geeker_odd 发表于 2022-3-20 15:36:27

isdkz 发表于 2022-3-20 12:55
你希望 i 是什么?

我希望得到的一个列表:["0.jpg", "1.jpg", "2.jpg", "3.jpg"......, "14.jpg"]

Geeker_odd 发表于 2022-3-20 16:02:45

折腾半天,发现还是用列表解决,不需要map:

from PIL import Image
import keras
from keras.datasets import mnist
import os

(x_train,y_train),(x_test,y_test) = mnist.load_data()

x_1 = x_train[:15]

path_1 = "D:/PyCharm_project/mnist/try1/"

def file_name(x):
    list = []
    for i in range(x):
      img = Image.fromarray(x_1)
      img = img.resize((224,224)).convert('RGB')
      img_name = os.path.join(path_1,str(i)+".jpg")
      img.save(img_name)
      list.append(img_name)
      
    return list
      
file_name(15)

谢谢各位高手指正!
页: [1]
查看完整版本: 映射map的返回如何显示