Различия упоминаются достаточно четко в документации array
и asarray
. Различия заключаются в списке аргументов и, следовательно, действии функции, зависящей от этих параметров.
Определения функций:
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
и
numpy.asarray(a, dtype=None, order=None)
Следующие аргументы - это те, которые могут быть переданы в array
, а не asarray
, как указано в документации:
copy: bool, optional Если true (по умолчанию), то объект копируется. В противном случае копия будет сделана только в том случае, если
__array__
возвращает копию, если obj является вложенной последовательностью или если требуется копия для удовлетворения любых других требований (dtype, order и т. Д.).subok: bool, optional If True, тогда подклассы будут переданы, иначе возвращаемый массив будет вынужден быть массивом базового класса (по умолчанию).
ndmin: int, необязательный Задает минимальное количество измерений, которое должен иметь результирующий массив. [1]
будут предварительно отложены до формы, необходимые для выполнения этого требования.
Вы можете использовать Python 3.0 .. Строковый тип по умолчанию - unicode, поэтому префикс u''
больше не требуется ..
Короче говоря, нет. Вы не можете отключить это.
u
исходит из метода unicode.__repr__
, который используется для отображения материала в REPL:
>>> print repr(unicode('a'))
u'a'
>>> unicode('a')
u'a'
Если я не ошибаюсь , вы не можете переопределить это без повторной компиляции Python.
Самый простой способ - просто напечатать строку.
>>> print unicode('a')
a
Если вы используете встроенную конструкцию unicode()
для построения всех ваши строки, вы могли бы сделать что-то вроде ..
>>> class unicode(unicode):
... def __repr__(self):
... return __builtins__.unicode.__repr__(self).lstrip("u")
...
>>> unicode('a')
a
.. но не делайте этого, это ужасно
В случае, если вы не хотите обновлять Python 3, вы можете использовать подстроки. Например, скажем, что исходный результат был (u'mystring ',). Предположим для примера, что переменная row содержит строку «mystring» без префикса unicode. Тогда вы хотели бы сделать что-то вроде этого:
temp = str(row); #str is not necessary, but probably good practice
temp = temp[:-3];
print = temp[3:];
У меня был случай, когда мне нужно было удалить префикс u, потому что я настраивал javascript с помощью python как часть html-шаблона. Простой выход оставил префикс u для ключей dict, например
var turns = [{u'armies':2...];
, который разбивает javascript.
Чтобы получить необходимый javascript, я использовал модуль json python для закодируйте строку для меня:
turns = json.dumps(turns)
Это делает трюк в моем конкретном случае, и поскольку все клавиши все ascii, нет никакого беспокойства по поводу кодировки. Возможно, вы использовали этот трюк для вывода отладки.
assert '{"3": 5}' == json.dumps({3:5})
(Поскольку идентификаторы свойств объекта JavaScript - все строки.)
– Bob Stein
15 July 2016 в 02:02
, используя str( text )
, является на самом деле плохой идеей, когда вы не можете быть на 100% уверены в кодировке по умолчанию вашего питона и в точном содержании строки --- последнее было бы типичным для текста, полученного из Интернета. также, в зависимости от того, что вы хотите сделать, использование print text.encode( 'utf-8' )
или print repr( text.encode( 'utf-8' ) )
может привести к неутешительным результатам, поскольку вы можете получить рендеринг, полный нечитаемых кодовых точек, таких как \x3a
.
действительно использовать командную строку с поддержкой unicode (трудно под Windows, легко под Linux) и переключиться с python 2.x на python 3.x. легкость и ясность обработки текстовых и байтов, предоставляемых новой версией python 3, действительно являются одним из больших выигрышей, которые вы можете ожидать. это означает, что вам придется потратить немного времени на изучение различия между «байтами» и «текстом» и понять концепцию кодировок символов, но тогда это время намного лучше потрачено в среде python 3, поскольку новый подход python к этим неприятные проблемы намного яснее и гораздо меньше подвержены ошибкам, чем предлагал python 2. я бы зашел так далеко, чтобы подойти к подходу python 2 к unicode проблематичным в ретроспективе, хотя я привык думать об этом как о превосходном --- когда я сравнивал его с , эта проблема обрабатывается в php .
edit Я просто остановился на связанном обсуждении здесь, на SO, и нашел этот комментарий о том, как php в эти дни решает проблемы с unicode / encoding:
< blockquote>Это как мышь, пытающаяся съесть слона. Обрабатывая Unicode как расширение ASCII (у нас есть обычные строки, и у нас есть mb_strings), он получает вещи не так, и получает зависание от того, какие особые случаи необходимы для работы с символами с забавными squiggles, которым требуется более одного байта. Если вы рассматриваете Unicode как предоставление абстрактного пространства для любого персонажа, который вам нужен, ASCII будет размещен в нем без необходимости рассматривать его как особый случай.
blockquote>Я цитирую это здесь, потому что по моему опыту 90% всех SO python + unicode-тем, похоже, исходят от людей, которые были в порядке с ascii или, может быть, латинскими-1, укушенными случайным персонажем, который не поддерживался в их обычных настройках, а затем в основном просто хотел избавиться из этого. что вы делаете при переключении на python 3, именно то, что предлагает вышеперечисленный комментатор: вместо просмотра unicode как досадного расширения ascii вы начинаете рассматривать ascii (и почти любую другую кодировку, которую вы когда-либо встречаете) как подмножество (s ) юникода.
, чтобы быть правдой, unicode v6, конечно, не последнее слово в кодировках, но он настолько близок к универсальности, что вы можете привыкнуть к нему.
from __future__ import unicode_literals
доступен с Python 2.6 (выпущен 1 октября 2008 г.). Он по умолчанию используется в Python 3.
Он позволяет опустить префикс u''
в исходный код, хотя он не меняет repr(unicode_string)
, который вводит в заблуждение.
Вы можете переопределить sys.displayhook()
в Python REPL, чтобы отображать объекты, как вам нравится. Вы также можете переопределить __repr__
для собственных пользовательских объектов.
type("")
в новом Python REPL, вы увидите <type 'str'>
. Затем запустите: from __future__ import unicode_literals
и повторите type("")
. Теперь вы должны увидеть <type 'unicode'>
. Какова ваша среда (ОС, версия python)?
– jfs
2 April 2016 в 03:17
Попробуйте следующее
print str (result.url)
blockquote>Возможно, ваша кодировка по умолчанию была изменена.
Вы можете проверить кодировку по умолчанию следующим образом: -
> import sys > print sys.getdefaultencoding() > ascii
По умолчанию должно быть ascii, что означает, что u'string 'следует печатать как «строка», но ваш может быть изменен.
Вы должны использовать print str(your_Variable)
Кажется, что работает для меня:
import ast
import json
j = json.loads('{"one" : "two"}')
j
dd = {u'one': u'two'}
dd
# to get double quotes
json.dumps(j, encoding='ascii')
json.dumps(dd, encoding='ascii')
# to get single quotes
str(ast.literal_eval(json.dumps(j, encoding='ascii')))
str(ast.literal_eval(json.dumps(dd, encoding='ascii')))
Выход:
>>> {u'one': u'two'}
>>> {u'one': u'two'}
>>> '{"one": "two"}'
>>> '{"one": "two"}'
>>> "{'one': 'two'}"
>>> "{'one': 'two'}"
Выше работает для словарей и объектов JSON, как само собой разумеющееся.
Для просто строки, wrapping в str (), похоже, работает для меня.
s=u'test string'
s
str(s)
Выход:
>>> u'test string'
>>> 'test string'
Версия для Python: 2.7.12
Не уверен в unicode, но обычно вы можете вызвать str.encode()
, чтобы преобразовать его в более подходящую форму. Например, вывод подпроцесса, захваченный в Python 3.0+, фиксирует его как поток байтов (префикс «b»), а encode () исправляет правильную строчную форму.
Я знаю, что это не глобальный вариант, но вы также можете подавить Unicode u, поместив строку в функцию str ().
Итак, список производных Unicode будет выглядеть так:
>>> myList=[unicode('a'),unicode('b'),unicode('c')]
>>> myList
[u'a', u'b', u'c']
станет следующим:
>>> myList=[str(unicode('a')),str(unicode('b')),str(unicode('c'))]
>>> myList
['a', 'b', 'c']
Это немного громоздко, но может быть полезно для некоторых
u
, вы делаете что-то ужасное. @itsricky, вы, вероятно, захотите кодировать JSON, не пытаясь разобрать Python в PHP!
– Eevee
30 March 2014 в 01:00
На всякий случай, когда вы получаете что-то вроде этого u['hello']
, вы должны печатать массив. напечатайте str(arr[0])
, и вам хорошо идти.