Я пытаюсь понять, как и когда выражения итератора оценены. Следующее, кажется, ленивое выражение:
g = (i for i in range(1000) if i % 3 == i % 2)
Этот, однако сбои на конструкции:
g = (line.strip() for line in open('xxx', 'r') if len(line) > 10)
У меня нет файла названным 'xxx'. Однако, так как эта вещь ленива, почему она перестала работать так скоро?
Спасибо.
EDI: Ничего себе, я сделал ленивый!
g = (line.strip() for i in range(3) for line in open(str(i), 'r'))
Переменные, используемые в выражении генератора , лениво вычисляются в отдельной области, когда
next ()
Метод вызывается для объекта генератора (так же, как для обычных генераторов ). Однако выражениеin
крайнего левого предложенияfor
немедленно оценивается в текущей области , поэтому возникает ошибка {{ 1}} можно увидеть перед любой другой возможной ошибкой в коде, который обрабатывает выражение генератора.
То же, что и в .NET :
$DateStr = $Date.ToString("yyyyMMdd")
Или:
$DateStr = '{0:yyyyMMdd}' -f $Date
-121-2015874- Вы хотите использовать команду am
. Скажите, что у вас есть Манифест, который выглядит примерно так:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.MyApp">
<application android:icon="@drawable/icon">
<activity class=".MyMainActivity" android:label="@string/app_name">
<intent-filter>
<action android:value="android.intent.action.MAIN" />
<category android:value="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
...
</manifest>
вы бы начали это с:
adb shell am start -a android.intent.action.MAIN -n com.example.MyApp/.MyMainActivity
, хотя вы можете сказать ему, чтобы подождать, пока он не будет готов:
adb wait-for-device shell am start -a android.intent.action.MAIN -n com.example.MyApp/.MyMainActivity
В основном вы просто увольняете Намерение
, которое вызывает основное действие
вашего пакета.
Полная документация (от запуска am --help):
usage: am [start|broadcast|instrument|profile]
am start [-D] INTENT
am broadcast INTENT
am instrument [-r] [-e <ARG_NAME> <ARG_VALUE>] [-p <PROF_FILE>]
[-w] <COMPONENT>
am profile <PROCESS> [start <PROF_FILE>|stop]
INTENT is described with:
[-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[-n <COMPONENT>] [-f <FLAGS>] [<URI>]
-121--5086073- Итерация по файлу, возвращенному вызовом open ()
, является ленивой. Вызов open ()
не является вызовом.