0

我有以下代码:

from sys import stdin
import re

def main():
    def hidden1_test(): return hidden1('test')
    def hidden2_test(): return hidden2('test')
    tasks = [dna, sorted, hidden1_test, hidden2_test, equation, parentheses, sorted3]
    print('Skriv in teststrängar:')
    while True:
        line = stdin.readline().rstrip('\r\n')
        if line == '': break
        for task in tasks:
            result = '' if re.search(task(), line) else 'INTE '
            print('%s(): "%s" matchar %suttrycket "%s"' % (task.__name__, line, result, task()))

if __name__ == '__main__': main()

列表任务中的函数在上面定义,但它们对我的问题并不重要。我了解 main 函数的整个运行,直到最后两行:

result = '' if re.search(task(), line) else 'INTE '    
print('%s(): "%s" matchar %suttrycket "%s"' % (task.__name__, line, result, task()))

我不明白什么task.__name__意思。名字必须是__name__ == '__main__'这样,我想我的问题变成了什么task.'__main__'意思(如果我错了,请纠正我)?我将上述两行的第一行解释为:

result = '' 
if re.search(task(), line): 
else:
    'INTE '

我知道这是不对的,因为 if 语句下没有任何内容,但我不知道如何测试代码以了解它的含义。我只是想更好地理解,所以对不是非常高级的程序员的人的解释会很好

提前致谢!

4

2 回答 2

1

所以你有一个任务列表。

tasks = [dna, sorted, hidden1_test, hidden2_test, equation, parentheses, sorted3]

你不知道这些任务什么时候结束,所以你一直检查直到它们完成:while True:

要知道哪个仍在运行,请从标准输入中读取一行。

line = stdin.readline().rstrip('\r\n')

参见:python 3.8.2,标准输入

如果所有任务都完成了,你就没有什么要读的了,你就跳出 while 循环并结束程序。

if line == '': break

# same as
if line == '':
  break

出于提供信息的目的,我们想要打印哪些任务仍在运行,哪些任务已经中断

此任务是否仍在运行(任务名称是否在 中找到line)?

首先我们使用正则表达式,它是一种在文本中搜索模式的工具。

re.search(pattern, text) # Return true if it found something!

玩 RegExr,你会发现它很酷。

然后,如果没有找到任务(完成),我们添加INTE表示它已被中断。

result = '' if re.search(task(), line) else 'INTE '

# Above is a ternary operator, which is the same as...
if re.search(task(), line) :
  result = ''
else:
  result = 'INTE'

这里我们使用大多数人所说的三元运算符

...然后,我们打印一个文本。task.__name__只是任务的名称。最有可能的是,您task是一个对象,并且该对象有一个名称。一个很好的猜测是您的任务名称可能是dna, sorted, hidden1_test, ...

于 2020-04-07T00:24:05.810 回答
1

这里有多个问题。

是什么__name__

在 Python 中,__name__是为某些类型的结构(如模块、类、函数等)自动创建的特殊属性。(有关更多详细信息,请参阅Python 数据模型

在您的代码中,它被使用了两次:

  • task.__name__将是任何task代表的名称。我想这将是您代码中的一个函数。

    例如,对于任务hidden1_testtask.__name__将是'hidden1_test'​​ 。

  • if __name__ == '__main__': main()是 Python 中判断当前脚本是否为Python 主程序的经典方法。

    这里,__name__是当前模块的名称。如果等于 value '__main__',则表示当前脚本主程序

    您可以在What does if __name__ == "__main__": do?中找到更多信息。

如何工作result = 'A' if matches else 'B'

这是一个条件表达式,也称为三元运算符

在大多数受 C 启发的语言中,将编写相同的代码result = matches ? 'A' : 'B'

如果 的返回值为re.search(task(), line),则变量将被赋值。如果不是,它将被分配 value 。result'''INTE '

于 2020-04-06T23:54:02.597 回答