У меня есть Android LisView, содержащий TextView для отображения данных в списке,
Я добавляю, чтобы изменить его на Webview, после этого все выглядит хорошо, кроме setOnClickListener, который больше не отвечает ..
Я читал о Webview и обнаружил, что setOnClickListener не поддерживается, y, z вместо импортировать x, y, z из модуля
. Я не являюсь носителем языка, но разве последнее не более правильное / естественное?
Итак, в чем причина ставить с первого? Это просто для упрощения грамматики (не нужно смотреть вперед)? Это попытка сделать два вида импорта более различимыми? Или это один из тех случаев, когда очевидный путь «сначала не очевиден, если вы не голландец»? ;)
Не знаю, почему это было на самом деле сделано таким образом, но это так, как я хотел бы сделать это, просто потому, что, будучи инженерного типа, он кажется более естественным для меня начать с общей категории и перейти к конкретике.
Кроме того, будет означать, что анализатор должен хранить меньше материала, если обработка последовательно. С:
import x, y, z from a
вы должны помнить х
, у
и г
. С:
from a import x, y, z
вы только должны помнить а
.
Вот почему я так много проблем, когда я впервые столкнулся в Perl после, если вариант:
$x = $y if $y > 40;
, так как вы не знаете заранее вы ли то, что вы читаете это условное или нет.
Очень дикая догадка и, вероятно, совершенно бессмысленная, но я знал этот синтаксис из Модула-2 (чувак, это было двадцать лет назад, я чувствую себя старым). .. может Python был вдохновлен этим?
Помимо прямого вопроса Гвидо, я не думаю, что вы найдете какое-либо объяснение этому.
Синтаксис существовал с самого начала. Самая ранняя версия исходников Python, которую я смог найти, была python 1.0.1. Глядя на журнал изменений в файле грамматики, мы находим ссылки на еще более ранние версии. В версии 2 Python (я думаю, мы говорим о втором выпуске после 0.9.0) у нас есть это примечание:
# added 'from' NAME option on import clause, and '*' to import all;
Это было добавлено в то же время, что и
# added class definition.
Таким образом, оператор импорта возник одновременно с классами. были добавлены в Python. Это происходит из того времени, когда Python был сольным проектом Гвидо ван Россума. Другими словами, ответ, который вы ищете, затерян в песках времени.
А теперь мое предположение, почему оператор импорта читает из x импорт y
, а не импорт y из x
.
В документации для оператора импорта представлен основной алгоритм реализации импорта:
Операторы импорта выполняются в два этапа. шаги: (1) найти модуль и инициализируйте его при необходимости; (2) определить имя или имена в локальном пространстве имен (области, в которой импорт происходит заявление). Заявление приходит в двух формах, различающихся тем, использует ключевое слово from. Первая форма (без от) повторяет эти шаги для каждый идентификатор в списке. Форма with from выполняет шаг (1) один раз, а затем повторно выполняет шаг (2).
В обеих версиях оператора импорта первый шаг этого алгоритма крайний левый.Я предполагаю, что это был наиболее очевидный порядок для разработчика языка, хотя английский мог бы читаться более естественно, если бы порядок был обратным.
Возможно, в английском языке было бы более разумно сказать импорт x, y, z из модуля
, но в программировании это Гораздо разумнее сначала представить более общий пункт, а затем детали.
Это может быть не причиной, но это упрощает работу компилятора или интерпретатора.
Попробуйте написать компилятор, и вы поймете, что я имею в виду: D
Это зависит от используемого вами синтаксиса языка программирования. Мне легче читать такой импорт.
Легче читать и понимать
From Grocery buy apple and orange
или
Buy apple and orange from grocery.
Buy apple and orange from supermarket
Первый мне больше подходит...
Я не знаю полного наследия этого синтаксиса, так как он датируется днями Python 1.x. Но я считаю полезным иметь возможность сканировать левую часть исходного кода и быстро находить имена модулей, от которых зависит сценарий. Если оператор читал «импортировать a,b,c,d,e,really_long_name, alsdf,lsdf from blah», мне потребовалось бы некоторое время, чтобы обнаружить, что этот скрипт зависит от blah.
На самом деле, это не так уж и странно. Посмотрите, как мы «импортируем», «включаем» или «требуем» на других языках. Мы всегда сначала указываем пространство имен. например, включите "inc/config.php" в PHP. Таким образом, он сохраняет наш обычный способ включения файлов или модулей.