【问题标题】:python main() not executing in shellpython main()没有在shell中执行
【发布时间】:2017-02-27 05:51:14
【问题描述】:

我试图在 main 中运行我的 flatten(li) 函数,但是当我运行模块时它没有运行。但是当我在 shell 中输入“flatten(li)”时它正在工作。有任何想法吗?谢谢!

li = [0, 2, [[2, 3], 8, 100, None, [[None]]], -2]

def flatten(li):
     i = 0
     while i < len(li):
         "only execute if the element is a list"
         while isinstance(li[i], list):
             """taking the element at index i and sets it as the
                i'th part of the list. so if l[i] contains a list
                it is then unrolled or 'unlisted'"""
             li[i:i + 1] = li[i]
         i += 1

    for element in li:  
         if not element and not isinstance(element, int):
         li.remove(element)

    return li

def main():
    flatten(li)

if __name__ == '__main__':
    main()

【问题讨论】:

  • 你什么也看不到,因为你什么也没打印

标签: python shell python-idle


【解决方案1】:

你没有对输出做任何事情。我不确定您希望看到什么,但您想要的是这样的:

li = [0, 2, [[2, 3], 8, 100, None, [[None]]], -2]


def flatten(li):
    i = 0
    while i < len(li):
        while isinstance(li[i], list):
            li[i:i + 1] = li[i]
        i += 1

    for element in li:
        if not element and not isinstance(element, int):
            li.remove(element)

    return li


def main():
    flat = flatten(li)
    print(flat)


if __name__ == '__main__':
    main()

【讨论】:

  • 非常感谢!如果我只是在 shell 中键入 flatten(li),我为什么不需要打印?另外,我的记录方式是否正确?
  • 当您输入flatten(li) 时,您正在调用flatten 函数,该函数返回li。默认情况下,您的 shell 正在打印返回的值。当您调用main 时,它正在调用flatten,它将li 返回到main,但main 函数对该对象没有任何作用。 main 然后将None 返回给shell。
【解决方案2】:

它当然有效——你只是不打印任何东西,所以你什么也看不到。尝试添加print调用:

if __name__ == '__main__':
    main()
    print(li)

【讨论】:

  • 非常感谢!如果我只是在 shell 中键入 flatten(li),我为什么不需要打印?另外,我的记录方式是否正确?
  • 如果你从 python shell 运行东西,它会自动打印出被调用函数返回的内容——为了你的方便。
  • 不,您记录代码的方式不正确。请改用 cmets (# here goes some comment)。您尝试记录事物(文档字符串)的方式仅用于函数、类和模块。
猜你喜欢
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2012-03-12
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多