Почему input() возвращает только строки?

#python

Вопрос:

Мой вопрос очень прост, я хочу знать, что когда мы инициализируем переменную в python, она распознает ее, является ли она строковой или целочисленной, но когда мы используем функцию ввода, она принимает входные данные в виде строки, и если нам нужно целое число или число с плавающей точкой, мы должны ввести ее. почему?

Комментарии:

1. input всегда возвращает строку. Он не пытается ничего интерпретировать. Есть разница между размещением литерала 123 int в коде и предоставлением 123 в качестве входных данных input .

2. Python 2 сделал это ( input() == eval(raw_input()) ); это огромная дыра в безопасности, позволяющая неизвестному пользователю указывать произвольное выражение Python для выполнения.

3. Предположим, вы хотите, чтобы пользователь ввел пароль, а он ввел 1234 и input интерпретировал это как целое число. Неудобный. Excel делает это при чтении телефонных номеров, дат и строк, таких как ABCD (который выглядит как шестнадцатеричный), из файлов csv, и это очень часто не то, что вам нужно.

4. @Carcigenicate я знаю, что ввод возвращает строку, но мой вопрос в том, почему, если python способен понять, какой тип данных переменной, то почему он не знает, является ли ввод целым числом или строкой.

5. @waleedsultan Как упоминал чепнер, вы часто не хотите, чтобы Python автоматически интерпретировал то, что ввел пользователь. Что, если этот пользовательский ввод содержит код, который Python может интерпретировать? Вы хотите, чтобы Python автоматически интерпретировал все, что ввел пользователь? Что делать , если пользователь ввел print(5) , и вы хотите, чтобы это воспринималось буквально, а не интерпретировалось?

Ответ №1:

Потому input() что всегда возвращает a str . Другими словами, input() «распознает» все (то, что в него введено) как строку.

Существует разница между "123" тем , что является строкой , и 123 тем, что является int. Чтобы сделать int из строки, вы должны использовать приведение типа — int(input('Number: ') .

input() функция не предназначена для автоматического определения типа, как это делает Python, потому что это неудобное поведение по умолчанию. Во всех обычных случаях программа, за исключением определенного типа ввода от пользователя. Вы можете реализовать такую вещь самостоятельно (при необходимости).

Ответ №2:

Python МОЖЕТ распознавать тип переменной. Но в большинстве случаев python в этом нет необходимости. Как уже упоминалось, input всегда возвращается str . Вам нужно использовать его int только в том случае, если вы собираетесь делать с ним что-то целочисленное. В большинстве случаев python не заботится о типе переменных. Это называется типизацией утки
https://realpython.com/lessons/duck-typing/

Комментарии:

1. Какое отношение этот вопрос имеет к набору утят?

2. Речь идет о типах и кастинге. На языке python. Когда вы поймете, что такое ввод на python, данное поведение становится очевидным.

3. Утиный ввод объясняет, что «В большинстве случаев python не заботится о типе переменных»., но это и утиный ввод, похоже, вообще не имеют отношения к вопросу. Я думаю, что последние два предложения просто все путают.