Как превратить мой небольшой код oneliner в многострочный в python3?
Я по ошибке сделал единичный фрагмент кода с помощью этого Onelineizer, и теперь я застрял, пытаясь сделать его многострочным. Мне нужно сделать его читабельным, но я не могу этого сделать с моими текущими знаниями.
(lambda __after: [__after() for self.argv.domain in [(parsed_url.netloc)]][0] if parsed_url.netloc and not self.argv.domain else __after())(lambda: None)
self.argv - это
parser.parse_url()
из argparse и parsed_url
from urllib.parse import urlparse; parsed_url = urlparse(someurl)
. Если бы я мог сделать его как оригинал или, по крайней мере, мультилайнер с той же функцией, что и оригинал, было бы здорово. Я думаю, что мог сделать что-то подобное, но я не уверен
if parsed_url.netloc and not self.argv.domain:
something
Я не могу вывести больше, может ли кто-нибудь помочь мне сделать его снова читаемым. Также,
__after()
не является функцией, которую я определил, она добавлена этим инструментом. ИДК, если это помогает, но я не мог получить любой ключ после посещения моих фиксаций: это обязательство, что техника его подводит HAD Oneliner Doesnt Have Oneliner, но это было что коммит Oneliner Имеет Oneliner в строке 38.
Изменить: Выполнив некоторую отладку, я обнаружил, что всякий раз, когда я комментировал эту строку, я получал 32 результата из моего теста, но когда я раскомментировал, я получил 34 результата. Кроме того, когда я напечатал self.argv.domain и parsed_url.netloc в очень похожем коде
print(self.argv.domain)
print(parsed_url.netloc)
(lambda __after: [__after() for self.argv.domain in [(parsed_url.netloc)]][0] if parsed_url.netloc and not self.argv.domain else __after())(lambda: None)
print(self.argv.domain)
print(parsed_url.netloc)
Я получил такой вывод:
[!] Getting data from http://localhost/example.js
Before Self.argv.domain: None
Before Parsed_url.netloc: localhost
After Self.argv.domain: localhost
After Parsed_url.netloc: localhost
[!] Getting data from http://localhost/example.html
Before Self.argv.domain: None
Before Parsed_url.netloc: localhost
After Self.argv.domain: localhost
After Parsed_url.netloc: localhost
что указывает на то, что argv.domain установлен на parsed_url.netloc.
1 ответ
Onelinerizer использует понимание списка для перевода операторов присваивания:
[__after() for self.arg.domain in [(parsed_url.netloc)]][0]
эквивалентно:
self.arg.domain = parsed_url.netloc
__after()
поэтому вся ваша строка эквивалентна:
if parsed_url.netloc and not self.argv.domain:
self.arg.domain = parsed_url.netloc