Может ли кто-нибудь объяснить мне эту странную Python для l oop? - PullRequest
0 голосов
/ 29 апреля 2020

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

from pynput import keyboard
from pynput.keyboard import Controller

keypress = Controller()

COMBINATIONS = [
    {keyboard.KeyCode(char='a'), keyboard.KeyCode(char='z')},
]

current = set()

def execute():
    for loop in range(0, 10):
        keypress.press('w')
        keypress.release('w')

def on_press(key):
    if any([key in COMBO for COMBO in COMBINATIONS]): # THIS PART
        current.add(key)
        print(current)
        if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS): #THIS PART
           execute()

def on_release(key):
    if any([key in COMBO for COMBO in COMBINATIONS]): #THIS PART
        current.remove(key)

    with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
        listener.join()

Я прокомментировал части, которые я не понимаю, с #THIS PART похвалы Спасибо за помощь:)

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Я понял лучше, когда попытался применить его в простом коде. Спасибо за ваше великолепное объяснение:)

import os
Passwords = ["abcd", "efgh"]
inpt = input()


for List in Passwords:
    if (inpt in List) == True:
        print("Correct password! : True!")
        os.startfile('Chrome.exe')


if any([inpt in List for List in Passwords]):
    print("Correct password! : True!")
    os.startfile('Chrome.exe')
0 голосов
/ 29 апреля 2020

Ответ на этот вопрос можно разделить на две части:

1. Понимание списка:

Во-первых, понимание списка: это способ написать for l oop в одну строку. Таким образом, вместо записи:

result = []
for COMBO in COMBINATIONS:
    result.append(key in COMBO)

Вы можете записать это в одну строку следующим образом:

result = [key in COMBO for COMBO in COMBINATIONS]

Как видите, result представляет собой список логических значений .. либо True, либо False. Что приносит вторую часть;

2. любая () функция

Вторая часть - это функция any(). Эта функция возвращает True, если один из заданных элементов в True. И False, если не из указанных пунктов: True.


Итак, ответ на ваш вопрос таков:

any([key in COMBO for COMBO in COMBINATIONS])

Он проверяет, является ли key существует в любом из COMBO данного COMBINATION.

Надеюсь, что это отвечает на ваш вопрос!

...