如何在python中使用用户定义的函数?

时间:2015-04-16 14:49:01

标签: python-2.7

我只是学习python所以要温柔。我想读取一个文件并将其作为一个函数,然后让另一个函数处理上一个函数" read"。我无法将结果传递给另一个函数。这就是我不远的地方:

我想多次调用read_file并且能够将其结果传递给多个函数,因此,我不希望frame成为全局变量。如何让read_file通过' frame'到cost_channelID直接?也许,对于cost_channelID来调用read_file?

def read_file():
    user_input = raw_input("please put date needed in x.xx form: ")
    path = r'C:\\Users\\CP\\documents\\' + user_input
    allFiles = glob.glob(path + '/*.csv')
    frame = pd.DataFrame()
    list = []
    for file in allFiles:
        df = pd.read_csv(file,index_col=None,header=0)
        list.append(df)
    frame =pd.concat(list,ignore_index=True)

def cost_channelID():
    numbers =r'[0,1,2,3,4,5,6,7,8,9]'
    Ads = frame['Ad']
    ID = []
    for ad in Ads:
        num = ''.join(re.findall(numbers,ad)[1:7])
        ID.append(num)
    ID = pd.Series(ID)
    pieces = [frame,ID]


    frame2 = pd.concat(pieces,ignore_index=True,axis=1)
    frame2 = frame2.rename(columns={0:'Ad',1:'Ad Impressions',2:'Total Ad Spend',3:'eCPM (Total Ad Spend/Ad)',4:'Ad Attempts',5:'ID'})

非常感谢任何和所有帮助!

2 个答案:

答案 0 :(得分:1)

这是您修改后的代码(大写注释,以便于查找,而不是粗鲁):

def read_file():
    user_input = raw_input("please put date needed in x.xx form: ")
    path = r'C:\\Users\\CP\\documents\\' + user_input
    allFiles = glob.glob(path + '/*.csv')
    frame = pd.DataFrame()
    list = []
    for file in allFiles:
        df = pd.read_csv(file,index_col=None,header=0)
        list.append(df)
    frame =pd.concat(list,ignore_index=True)
    return(frame) #YOUR FUNCTION WILL BE RETURNING THE READ FRAME    

def cost_channelID(read_frame): #YOU WILL BE RECEIVING A DIFFERENT FRAME EVERY TIME
    numbers =r'[0,1,2,3,4,5,6,7,8,9]'
    Ads = read_frame['Ad']
    ID = []
    for ad in Ads:
        num = ''.join(re.findall(numbers,ad)[1:7])
        ID.append(num)
    ID = pd.Series(ID)
    pieces = [frame,ID]


    frame2 = pd.concat(pieces,ignore_index=True,axis=1)
    frame2 = frame2.rename(columns={0:'Ad',1:'Ad Impressions',2:'Total Ad Spend',3:'eCPM (Total Ad Spend/Ad)',4:'Ad Attempts',5:'ID'})
#HERE YOU MEANT TO USE FRAME2 WITHIN THE FUNCTION? IT IS WHAT HAPPENING BECAUSE OF THE INDENTATION

frame1 = read_file() #YOU CAN READ AS MANY FRAMES AS YOU WANT AND THEY'LL BE KEPT IN SEPARATED FRAMES
frame2 = read_file()
#...framexx = read_file() 
#AND YOU CAN JUST CALL cost_channelID in any of them (or any other function)

const_channelID(frame1)
const_channelID(frame2)
#... AND SO ON

答案 1 :(得分:0)

如果您尝试将帧从一个函数传递到另一个函数,则需要在函数范围之外声明它。否则,我们需要有关您要完成的内容的更多信息。

frame = None
def read_file():
    user_input = raw_input("please put date needed in x.xx form: ")
    path = r'C:\\Users\\CP\\documents\\' + user_input
    allFiles = glob.glob(path + '/*.csv')
    frame = pd.DataFrame()
    list = []
    for file in allFiles:
        df = pd.read_csv(file,index_col=None,header=0)
        list.append(df)
    frame =pd.concat(list,ignore_index=True)

def cost_channelID():
    numbers =r'[0,1,2,3,4,5,6,7,8,9]'
    Ads = frame['Ad']
    ID = []
    for ad in Ads:
        num = ''.join(re.findall(numbers,ad)[1:7])
        ID.append(num)
    ID = pd.Series(ID)
    pieces = [frame,ID]


    frame2 = pd.concat(pieces,ignore_index=True,axis=1)
    frame2 = frame2.rename(columns={0:'Ad',1:'Ad Impressions',2:'Total Ad Spend',3:'eCPM (Total Ad Spend/Ad)',4:'Ad Attempts',5:'ID'})

这是python中范围规则的一个很好的参考 Short Description of the Scoping Rules?