2015-06-19 92 views
0
input = "12345_usa_wool_10x10_100_80.jpg" 

def CleanData(input): 
    data = input.split('_') 

    sku = data[0] 
    country = data[1].capitalize() 
    material = data[2].capitalize() 
    size = data[3] 
    retail_price = data[4] 
    sale_price = data[5] 

CleanData(input) 
print (sku) 
print (country) 

后引用变量我越来越从列表中分离它

NameError: name 'sku' is not defined 

我想所有的值存储在我创建的轻松引用还给他们以后的名单。

比如,如果他们想总储蓄然后我可以以后做类似

def Saving() 
    total_saving = retail_price-sale_price 
    return total_saving 

所以我可以在以后有类似的最终输出:

print (sku+" "+country+" "+sale_price+" "+Saving()) 

我是一个初学者,自学者,所以我认为这不是一个问题太难,但我不知道如何让SKU,国家,材料等能够被公开引用。

回答

2

sku仅在CleanData函数中定义,它没有在该函数之外的作用域。

我建议使用dict对象。例如,

def parseData(input): 
    data = input.split('_') 
    d = {} 
    d['sku'] = data[0] 
    d['country'] = data[1].capitalize() 
    d['material'] = data[2].capitalize() 
    d['size'] = data[3] 
    d['retail_price'] = data[4] 
    d['sale_price'] = data[5] 
    return d 

myData = parseData(input) 
print(myData['sku']) 
print(myData['country']) 

您也可以直接构建dict

def parseData(input): 
    data = input.split('_') 
    d = {'sku': data[0], 
     'country': data[1].capitalize(), 
     'material': data[2].capitalize(), 
     'size': data[3], 
     'retail_price': data[4], 
     'sale_price': data[5]} 
    return d 
+0

谢谢,字典是我需要什么 – TheChosenWong

1

你有什么是python 范围,sku和函数中分配的所有其他变量都是函数的局部变量。如果你想他们是全球性的,然后将其标记为这样:

def CleanData(input): 
    data = input.split('_') 

    global sku 
    sku = data[0] 

.... and so on 

但是,它一般不以这种方式使用全局变量是个好主意。我们希望我们的功能是封装,以便它们可以在许多程序中使用。使用全局变量的问题是你必须知道这个名字不会被用于程序中的其他东西。如果你需要在程序中重复使用代码,那么就会中断。

解决方法是返回某种货柜。例如,它可以是字典,列表或元组。下面是使用一个元组的例子:

def CleanData(input): 
    data = input.split('_') 

    # sku, country, material, size, retail_price, sale_price 
    return (data[0], 
      data[1].capitalize(), 
      data[2].capitalize(), 
      data[3], 
      data[4], 
      data[5]) 

sku, country, material, size, retail_price, sale_price = CleanData(input) 
print (sku) 
print (country) 

你也许可以通过只返回data进一步简化这一点。此外,您可能希望测试len(data)以确保您拥有正确数量的字段。