Каковы две дополнительные строки вывода, когда я вызываю ifelse [duplicate]

Вы передаете результат self.read в целевой аргумент Thread. Thread ожидает, что будет передана функция для вызова, поэтому просто удалите скобки и не забудьте запустить Thread:

t1=threading.Thread(target=self.read)
t1.start()
print "something"
11
задан rawr 25 July 2015 в 22:58
поделиться

3 ответа

Не печатает ли TRUE и возвращает TRUE одновременно?

Так, например, использование cat вместо печати изменит результат ...

Это в основном связано к комментарию Ольферов.

-1
ответ дан drmariod 23 August 2018 в 23:54
поделиться

Это происходит потому, что ifelse всегда будет возвращать значение. Когда вы запускаете ifelse(1<2,print("true"),print("false")), вы выбираете условие yes. Это условие является вызовом функции для печати "true" на консоли, и так оно и делается.

Но функция print() также возвращает свой аргумент, но невидимо (например, присвоения), иначе вы 'd имеет значение, напечатанное дважды в некоторых случаях. Когда выражение yes оценивается, его результатом является то, что возвращает ifelse, а ifelse не возвращается невидимо, поэтому он печатает результат, так как это выполнялось в глобальной среде и без какого-либо присвоения.

Мы можем проверить некоторые варианты и проверить, что происходит.

> result <- print("true")
[1] "true" # Prints because the print() function was called.
> result
[1] "true" # The print function return its argument, which was assigned to the variable.

> ifelse(1<2, {print("true");"TRUE"},print("false"))
[1] "true" #This was printed because print() was called
[1] "TRUE" #This was printed because it was the value returned from the yes argument

Если мы назначим это ifelse()

> result <- ifelse(1<2, {print("true");"TRUE"},print("false"))
[1] "true"
> result
[1] "TRUE"

, мы также можем посмотреть на случай, когда оцениваются оба условия условия:

> ifelse(c(1,3)<2, {print("true");"TRUE"},{print("false");"FALSE"})
[1] "true" # The yes argument prints this
[1] "false" # The no argument prints this
[1] "TRUE"  "FALSE" # This is the returned output from ifelse()

Вы должны использовать ifelse для создания нового объекта, а не для выполнения действий на основе условия. Для этого используйте if else. R Inferno имеет хороший раздел (3.2) о разности между ними.

12
ответ дан Ry- 23 August 2018 в 23:54
поделиться

Просто добавьте некоторые аргументы в прекрасный ответ Молькса. Одна из причин, почему это происходит, зависит от этого:

length(print("true"))
[1] "true"
[1] 1
length(length(print("true")))
[1] "true"
[1] 1
length(length(length(print("true"))))
[1] "true"
[1] 1

... и т. Д. ...

В руководстве R указано, что:

< blockquote>

yes возвращаемые значения для истинных элементов теста

обратите внимание на значения, а не на значение, здесь мы имеем два значения: один является объектом функции печати (которая должна print «true», скорее всего, это вызов функции, в данном случае print, в результате чего есть вектор символов с true), а другой - вывод print «true», который является правильным элементом оператора ifelse.

Его можно было бы избежать только с помощью:

 ifelse(1 < 2, "true" , "false" )
[1] "true"
1
ответ дан SabDeM 23 August 2018 в 23:54
поделиться
Другие вопросы по тегам:

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