Вероятно, самая близкая вещь к совершенно произвольному и бессмысленному разделению ML и DM - это неконтролируемые методы против контролируемого обучения .
Выберите ML, если у вас есть данные тренировки для вашей целевой функции.
Выберите DM, когда вам нужно изучить свои данные.
Простой фрагмент кода, который я использовал, который работает на меня на человечности: python2.7 и python3.6
from sys import version_info
if version_info.major == 2: # for python2
import codecs
# for stdin
UTF8Reader = codecs.getreader('utf8')
sys.stdin = UTF8Reader(sys.stdin)
# for stdout
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)
elif version_info.major == 3: # for python3
import codecs
# for stdin
UTF8Reader = codecs.getreader('utf8')
sys.stdin = UTF8Reader(sys.stdin.buffer)
# for stdout
UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout.buffer)
Вы можете сделать это, не полагаясь на неявное кодирование при печати. В любом случае не полагаться на это - хорошая идея - неявное кодирование используется только при печати в стандартный вывод и когда стандартный вывод подключен к терминалу.
Лучше использовать везде unicode
и везде использовать codecs.open
или codecs.getwriter
. Вы оборачиваете sys.stdout
в объект, который автоматически кодирует ваши строки Unicode в UTF-8, используя, например:
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
Однако это будет работать, только если вы используете Unicode везде. Итак, используйте юникод везде. Действительно везде.