【问题标题】:Assign "True" to for loop containing an if statement that triggers an email if the for loop is True将“True”分配给包含如果 for 循环为 True 时触发电子邮件的 if 语句的 for 循环
【发布时间】:2020-06-03 18:40:45
【问题描述】:
mylist = [right_branchcode, right_branchname, right_sellingcode, right_advcorp, right_childparent, \
      right_eliteCategoryId, right_partyid, right_retailmga]
for item in mylist:
      if len(item) > 0:
         print(item)
      else:
        print()

如果 for 循环打印一个项目,我希望能够返回“True”。最终目标是触发其中还包含 print(item) 的电子邮件通知。我只是不知道如何将运算符分配给包含 if 语句的 for 循环。

我希望这很清楚。我还在学习,有时很难表达我的需要。

谢谢

【问题讨论】:

  • 问题不清楚,需要更多信息,但据我了解,如果项目已打印,您将尝试返回 true。答:put the loop in a function by passing my_list as a parameter,then you can return inside if statement after printing the item.
  • 您不能将运算符分配给 for 循环; for 循环只迭代它不返回任何东西。如果您想在条件为 True 时执行某项操作,请在 if 的套件中执行。

标签: python pandas for-loop if-statement


【解决方案1】:

我不确定我是否理解正确,但您可以简单地在 if 语句中分配一个变量。

mylist = [right_branchcode, right_branchname, right_sellingcode, right_advcorp, right_childparent, \
      right_eliteCategoryId, right_partyid, right_retailmga]
for item in mylist:
      if len(item) > 0:
         print(item)
         bool_var = True
      else:
        print()
print(bool_var) # It will print true if item is found

您也可以在其中使用return,如果您想在找到项目时停止循环,也可以使用break

【讨论】:

  • 如果bool_var 永远不会被分配,这可能会给出NameError(或UnboundLocalError,如果在函数中)。
【解决方案2】:

循环本身不是真假;这是一个流控制语句,而不是表达式。您正在寻找的是一个 flag(一个布尔值变量),其值指示是否打印了非空值。

mylist = [...]
printed_something = False
for item in mylist:
    if item:
        print(item)
        printed_something = True
    else:
        print()

循环完成后,您可以根据需要使用printed_something 的值。只有在迭代过程中看到至少一个非空值时,才会将其更改为 True

【讨论】:

    【解决方案3】:

    在循环之前将变量初始化为 False。在循环内部,如果您打印任何内容,则将该变量设置为 True。最后,循环结束后,返回变量。

    mylist = [... stuff ...]
    myflag = False
    for item in mylist:
        if len(item) > 0:
            print(item)
            myflag = True
        else:
            print()
    return myflag
    

    【讨论】:

    • 谢谢我以后会用这个!
    【解决方案4】:

    最简洁的方法是在循环内执行您想要的代码(例如发送或不发送电子邮件)。但是,如果您真的想要分离关注点并将电子邮件发送逻辑与迭代逻辑分开,则可以使用生成器。这对应于让迭代器返回 (yield) 值的概念。

    mylist = [...]
    
    def iterate_over_list(l):
        for item in l:
            if len(item) > 0:
                yield True
    
    
    item_iterator = iterate_over_list(mylist)
    
    for item in item_iterator:
        if item:
            print('Send email') # replace with email-sending code
        else:
            print("Don't send email")
    

    【讨论】:

    • 您在问题中说,最终您将实现一些代码以在循环中的条件为真时发送电子邮件。这是关于从循环返回值的问题的附件,因此我将其替换为 print 语句作为指示。如果您在使用 Python 发送电子邮件时需要帮助,那是另一个问题(几乎可以肯定之前在 stackoverflow 上已经问过这个问题)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多