Это проблема синтаксиса и кодирования против представления:
>>> print 1e3
1000.0
Как можно видеть ... это не печатает 1e3
. Он печатает 1000.0
. Но означает ли это, что 1e3
не равно 1000.0
?
>>> print 1e3 == 1000.0
True
№. Он равен. Таким образом, 1e3
и 1000.0
являются семантически одинаковыми, но выглядят по-разному синтаксически.
>>> print "hi"
hi
, но затем:
>>> print hi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'hi' is not defined
hi
и "hi"
можно считать семантически идентичными, но синтаксически они означают совершенно разные вещи. В какой печати он печатает «строчную версию» объекта / значения. Это не обязательно печатает его так же, как вы вводите его в код.
>>> class Animal:
... def __str__(self):
... return "Cat"
...
>>> print Animal()
Cat
Это печатает Cat
, но мы не можем использовать Cat
для создания животного.
Теперь для синтаксиса списков в python требуются запятые. Также ... numpy массивы ARE NOT списки. У них разные типы. Даже если строковое представление WERE одинаково: «5» и 5 имеют одно и то же строковое представление, но:
>>> print "5"
5
>>> print 5
5
Просто потому, что str(a) == str(b)
не означает, что a == b
и не подразумевает type(a) == type(b)
.
они даже не одного типа. Одно целое, а другое - строка. Если вы определяете свой собственный тип, вы можете определить строковое представление для своего типа, но это не изменит синтаксис языка.
Что numpy делает что-то вроде этого:
>>> class Array:
... def __init__(self, xs):
... self.xs = xs
... def __str__(self):
... return "[%s]" % (" ".join(map(str, self.xs)))
...
>>> arr = Array([1,2,3])
>>> arr
<__main__.Array instance at 0x7f783f257ef0>
>>> print arr
[1 2 3]
Он просто определяет строковое представление. В противном случае вы не сможете его распечатать:
>>> class Array:
... def __init__(self, xs):
... self.xs = xs
...
>>> arr = Array([1,2,3])
>>> print arr
<__main__.Array instance at 0x7f783f257f38>
Однако мы не можем ожидать, что, когда мы вводим строковое представление чего-то в наш код, это правильный код ... потому что это просто строковое представление something ... это не обязательно действительный код.
Я думаю, это нормально, что твой фрагмент 1 воссоздан, я думаю, у тебя есть контейнер с фрагментами. А когда вы переходите от фрагмента 1 к фрагменту 2, вы заменяете фрагмент 1 на макет фрагмента 2 с помощью FragmentTransaction.commit (). Если вы хотите управлять кнопкой «Назад» своего приложения, вы можете переопределить метод Onbackpresed в своем классе Mainactivity. что конкретно вы хотите делать, когда нажимаете кнопку возврата ??