无法理解为什么功能不起作用

时间:2019-03-21 09:40:22

标签: python python-3.x function

我是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

我无法更改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 个答案:

答案 0 :(得分:1)

您的函数已定义但未执行。而且,如果执行了它,则不会更改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返回外部范围。

答案 1 :(得分:0)

  • 错误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))
  

避免全局变量

取消设计代码以避免全局变量,请使用函数参数并返回值。