Qual é a diferença entre raw_input()e input()no Python 3?
inputa raw_inpute ignorar erros de nome.
Qual é a diferença entre raw_input()e input()no Python 3?
inputa raw_inpute ignorar erros de nome.
Respostas:
A diferença é que raw_input()não existe no Python 3.x, enquanto existe input(). Na verdade, o antigo raw_input()foi renomeado para input()e o antigo input()se foi, mas pode ser facilmente simulado usando eval(input()). (Lembre-se de que isso eval()é mau. Tente usar maneiras mais seguras de analisar sua opinião, se possível.)
raw_input...?" - "A diferença é que não há raw_input." ... Uma diferença drástica, eu diria!
eval(e exec) geralmente deve ser evitado, porque eles podem ser um risco à segurança. Para detalhes, consulte Eval é realmente perigoso pelo veterano do SO Ned Batchelder. E é claro que esse conselho também se aplica ao antigo Python 2 input.
eval()e exec(), mas primeiro você precisa entender por que não usar eval()antes de decidir usá-lo.
No Python 2 , raw_input()retorna uma string e input()tenta executar a entrada como uma expressão Python.
Como obter uma string quase sempre era o que você queria, o Python 3 faz isso input(). Como diz Sven, se você quiser o comportamento antigo, eval(input())funciona.
raw_input().
raw_input() pega exatamente o que o usuário digitou e passa de volta como uma string.
input()primeiro pega o raw_input()e depois executa um eval()nele também.
A principal diferença é que input()espera uma declaração python sintaticamente correta, onde raw_input()não.
raw_input()foi renomeado para input()agora input()retorna a string exata.input()foi removido.Se você deseja usar o antigo input(), o que significa que você precisa avaliar uma entrada do usuário como uma instrução python, é necessário fazê-lo manualmente usando eval(input()).
No Python 3, raw_input()não existe o que já foi mencionado por Sven.
No Python 2, a input()função avalia sua entrada.
Exemplo:
name = input("what is your name ?")
what is your name ?harsha
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
name = input("what is your name ?")
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
No exemplo acima, o Python 2.x está tentando avaliar harsha como uma variável e não como uma string. Para evitar isso, podemos usar aspas duplas em torno de nossa entrada como "harsha":
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
raw_input ()
A função raw_input () `não avalia, apenas lê o que você digita.
Exemplo:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
Exemplo:
name = eval(raw_input("what is your name?"))
what is your name?harsha
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
name = eval(raw_input("what is your name?"))
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
No exemplo acima, eu estava apenas tentando avaliar a entrada do usuário com a evalfunção
Gostaria de adicionar um pouco mais de detalhes à explicação fornecida por todos para os usuários do python 2 . raw_input(), que, a essa altura, você sabe que avalia os dados inseridos pelo usuário como uma sequência. Isso significa que o python nem tenta entender os dados inseridos novamente. Tudo o que consideraremos é que os dados inseridos serão string, independentemente de ser uma string ou int real ou algo assim.
Enquanto, input()por outro lado, tenta entender os dados inseridos pelo usuário. Assim, a entrada like helloworldmostraria o erro como ' helloworld is undefined'.
Concluindo, para o python 2 , para inserir uma string também, é necessário inseri-la como ' helloworld', que é a estrutura comum usada no python para usar strings.
Se você deseja garantir que seu código esteja sendo executado com python2 e python3, use a função input () no seu script e adicione-a ao início do seu script:
from sys import version_info
if version_info.major == 3:
pass
elif version_info.major == 2:
try:
input = raw_input
except NameError:
pass
else:
print ("Unknown python version - input function not safe")