#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 не заботится о типе переменных»., но это и утиный ввод, похоже, вообще не имеют отношения к вопросу. Я думаю, что последние два предложения просто все путают.