Зацикливание переменной внутри функции каждый раз, когда функция вызывается в python - PullRequest
0 голосов
/ 24 мая 2018

Я хочу добавлять файл Excel каждый раз, когда вызывается функция.Как мне это сделать?Например, при первом вызове функции телефонный номер и текст вставляются в строку 2, затем при следующем вызове функции телефонный номер и текст вставляются в строку 3 и т. Д. Я хочу "i"изменить.

os.chdir("/Users/name/Desktop/name/name")
book = openpyxl.Workbook()
sheet = book.create_sheet("Sheet", 0)
sheet.cell(row=1, column=6).value = "Verification Code"


class func_with_memory:              
    i = 2
    def write_to_ith_excelrow(self):
    print ('i =', self.i)                
    self.i += 1



    def receive_sms(self, i):
        i = i+2
        # Sender's phone numer
        from_number = request.values.get('From')
        # Receiver's phone number - Plivo number
        to_number = request.values.get('To')
        # The text which was received
        text = request.values.get('Text')
        # Print the message
        print 'Message received - From: %s, To: %s, Text: %s' % (from_number, to_number, text)
        # send 'Text' into an excel file
        sheet.cell(row=i, column=6).value = text
        book.save("numbers.xlsx")
        return "Message received"



sms_to_xl = func_with_memory()
sms_to_xl.write_to_ith_excelrow()

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Почему бы просто не использовать глобальную переменную?Хорошо быть осторожным с их использованием, но в этом случае это кажется совершенно уместным.

import plivo, plivoxml
import openpyxl
from flask import Flask, request
import os

os.chdir("/Users/name/Desktop/name/name")
book = openpyxl.Workbook()
sheet = book.create_sheet("Sheet", 0)
sheet.cell(row=1, column=6).value = "Verification Code"

app = Flask(__name__)

xlsx_row_counter = 2

@app.route("/", methods=['GET','POST'])
def receive_sms():
    global xlsx_row_counter
    from_number = request.values.get('From')
    to_number = request.values.get('To')
    text = request.values.get('Text')
    print 'Message received - From: %s, To: %s, Text: %s' % (from_number, to_number, text)
    sheet.cell(row=xlsx_row_counter, column=6).value = text
    book.save("numbers.xlsx")
    xlsx_row_counter += 1
    return "Message received", 200

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)
0 голосов
/ 24 мая 2018

Если вы хотите, чтобы функция самостоятельно управляла этой функцией подсчета, вам нужно определить класс, в котором ваша функция будет функцией-членом с доступом к переменной члена, где вы можете сохранить значение счетчика.

Например, например:

class func_with_memory:              # define your class
    i = 1
    def write_to_ith_excelrow(self):
        print('i =', self.i)                # replace by meaningful code you want to process
        self.i += 1

После определения вы можете использовать этот класс:

In[1]: sms_to_xl = func_with_memory()       # instantiate the class

In[2]: sms_to_xl.write_to_ith_excelrow()    # first call of member function
i = 1

In[3]: sms_to_xl.write_to_ith_excelrow()    # second call
i = 2

In[4]: sms_to_xl.write_to_ith_excelrow()    # third call
i = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...