Python - Недопустимый синтаксис при установке переменной с eval [duplicate]

RxAndroid - еще одна лучшая альтернатива этой проблеме, и это избавляет нас от проблем создания потоков, а затем публикует результаты в потоке пользовательского интерфейса Android. Нам просто нужно указать потоки, по которым должны выполняться задачи, и все обрабатывается внутренне.

Observable<List<String>> musicShowsObservable = Observable.fromCallable(new Callable<List<String>>() { 

  @Override 
  public List<String> call() { 
    return mRestClient.getFavoriteMusicShows(); 
  }
});

mMusicShowSubscription = musicShowsObservable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<String>>() {

    @Override 
    public void onCompleted() { }

    @Override 
    public void onError(Throwable e) { }

    @Override 
    public void onNext(List<String> musicShows){
        listMusicShows(musicShows);
    }
});
  1. По указанию (Schedulers.io()) RxAndroid будет запускать getFavoriteMusicShows() в другом потоке.
  2. Используя AndroidSchedulers.mainThread(), мы хотим наблюдать это Observable в потоке UI, т. е. хотим, чтобы наш обратный вызов onNext() вызывался в потоке пользовательского интерфейса
9
задан it_is_a_literature 21 March 2014 в 14:18
поделиться

3 ответа

Для динамического выполнения операторов используется инструкция exec.

>>> exec('y=3')
>>> y
3

Использование Eval: eval(expression)

Аргумент expression передается и оценивается как выражение Python

, например:

>>> s=3
>>> eval('s==3')
True
>>> eval('s + 1')
4
>>> eval('s')
3
>>> eval('str(s)+"test"')
'3test'
7
ответ дан suhailvs 27 August 2018 в 00:40
поделиться

Вы можете это выражение.

eval('"x"+str(i)+"="+"123"')
-1
ответ дан Exa 27 August 2018 в 00:40
поделиться

eval() допускает только выражения . Назначение - это не выражение, а заявление; вам нужно будет использовать exec.

Даже тогда вы могли бы использовать словарь globals() для добавления имен в глобальное пространство имен, и вам не нужно было бы использовать произвольное выполнение выражения.

Вы действительно не хотите этого делать, вам нужно сохранить данные из ваших имен переменных и вместо этого использовать список или словарь:

x = ['123'] * 10

предоставит вам список, который вы можете указать как x[0], x[1] и т. д. без необходимости выполнять произвольные выражения.

12
ответ дан Martijn Pieters 27 August 2018 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: