Не могу понять, почему функция не работает - PullRequest
0 голосов
/ 21 марта 2019

Я новичок в Python3 и кодировании.Я застрял с простой функцией.

import datetime

date = str(datetime.date.today())
mail = ""

text = (f"""   
some text {mail} 
some text {date}
some text
 """)

print(text)
def get_deadline_date():
    mail = "a@a.com"
print(text)

И у меня есть

some text  
some text 2019-03-21
some text


some text  
some text 2019-03-21
some text

Я не могу изменить текстовую переменную.На нем должно появиться:

    some text a@a.com 
    some text 2019-03-21
    some text 

Как я понял, я допустил простую ошибку, но не могу понять.Я попытался,

import datetime

date = str(datetime.date.today())
mail = ""

text = (f"""   
some text {mail} 
some text {date}
some text
 """)

print(text)
def get_deadline_date():
    global mail
    mail = "a@a.com"
get_deadlin 

Это дало тот же вывод.

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Ваша функция определена, но не выполнена. И, если он был выполнен, он не изменил бы значение mail, потому что у него есть собственное пространство имен переменных, поэтому он мог получить доступ к mail, но не установить его. То, что вы делаете там, объявляет новую переменную, также называемую mail в этой функции. Кроме того, ваш текст уже задан и не будет обновляться при изменении значения mail. Я предлагаю это решение:

text = "some text {mail}\n" \
       "some text {date}\n" \
       "some text"


def make_text(text, date):
    mail = "a@a.com"
    return text.format(mail=mail, date=date)


text = make_text(text=text, date=date.today())

Возможно, вы также захотите создать отдельные функции для установки mail и создания текста, но не забудьте вернуть новый mail, который вы делаете, во внешнюю область.

0 голосов
/ 21 марта 2019
  • Ошибка 1: Вы не вызываете функцию
  • Ошибка 2: mail является локальной переменной (для функции)
  • Ошибка 3: строка уже оценена / инициализирована

Плохо, но ваше решение должно быть

import datetime

date = str(datetime.date.today())
mail = ""

text = """   
some text {0} 
some text {1}
some text
 """.format


print(text(mail, date))
def get_deadline_date():
    global mail
    mail = "a@a.com"
get_deadline_date()
print(text(mail, date))

Избегать глобальной переменной

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...