bind()
. bind()
function MyConstructor(data, transport) {
this.data = data;
transport.on('data', ( function () {
alert(this.data);
}).bind(this) );
}
// Mock transport object
var transport = {
on: function(event, callback) {
setTimeout(callback, 1000);
}
};
// called as
var obj = new MyConstructor('foo', transport);
Если вы используете underscore.js
- http://underscorejs.org/#bind
transport.on('data', _.bind(function () {
alert(this.data);
}, this));
function MyConstructor(data, transport) {
var self = this;
this.data = data;
transport.on('data', function() {
alert(self.data);
});
}
function MyConstructor(data, transport) {
this.data = data;
transport.on('data', () => {
alert(this.data);
});
}
Используйте raw_input()
вместо input()
:
testVar = raw_input("Ask user for something.")
input()
фактически оценивает ввод как код Python. Я предлагаю никогда не использовать его. raw_input()
возвращает строку verbatim, введенную пользователем.
testVar = raw_input("Ask user for something.")
Функция input
также будет оценивать данные, которые она только что прочитала, как код python, чего вы не хотите.
Общий подход заключается в обработке пользовательского ввода (из sys.stdin
), как и любой другой файл. Попробуйте
import sys
sys.stdin.readline()
Если вы хотите, чтобы он был коротким, вы можете использовать raw_input
, который совпадает с input
, но пропускает оценку.
readline
- это даст функции, похожие на bash (история из коробки, автозаполнение потребует некоторой работы)
– Foo Bah
10 February 2011 в 18:10
Это моя работа, чтобы выйти из строя в безопасности, если мне нужно будет перейти на python 3 в будущем.
def _input(msg):
return raw_input(msg)
Мы можем использовать функцию raw_input()
в Python 2 и функцию input()
в Python 3. По умолчанию функция ввода принимает входной сигнал в строчном формате. Для другого типа данных вы должны ввести пользовательский ввод.
В Python 2 мы используем функцию raw_input()
. Он ожидает, что пользователь наберет некоторый ввод и нажмите return
, и нам нужно сохранить значение в переменной путем литья в качестве нашего типа данных желания. Будьте осторожны при использовании литья типа
x = raw_input("Enter a number: ") #String input
x = int(raw_input("Enter a number: ")) #integer input
x = float(raw_input("Enter a float number: ")) #float input
x = eval(raw_input("Enter a float number: ")) #eval input
В Python 3 мы используем функцию input (), которая возвращает значение пользовательского ввода.
x = input("Enter a number: ") #String input
Если вы введете строку, int , float, eval, это займет в качестве ввода строки
x = int(input("Enter a number: ")) #integer input
Если вы введете строку для int cast ValueError: invalid literal for int() with base 10:
x = float(input("Enter a float number: ")) #float input
Если вы введете строку для float cast ValueError: could not convert string to float
x = eval(input("Enter a float number: ")) #eval input
Если вы введете строку для eval cast NameError: name ' ' is not defined
Эти ошибки также применимы для Python 2.
Если вы хотите использовать вход вместо raw_input в python 2.x, тогда этот трюк будет полезен
if hasattr(__builtins__, 'raw_input'):
input=raw_input
. После чего
testVar = input("Ask user for something.")
будет работать только хорошо.
Мой рабочий код с исправлениями:
import random
import math
print "Welcome to Sam's Math Test"
num1= random.randint(1, 10)
num2= random.randint(1, 10)
num3= random.randint(1, 10)
list=[num1, num2, num3]
maxNum= max(list)
minNum= min(list)
sqrtOne= math.sqrt(num1)
correct= False
while(correct == False):
guess1= input("Which number is the highest? "+ str(list) + ": ")
if maxNum == guess1:
print("Correct!")
correct = True
else:
print("Incorrect, try again")
correct= False
while(correct == False):
guess2= input("Which number is the lowest? " + str(list) +": ")
if minNum == guess2:
print("Correct!")
correct = True
else:
print("Incorrect, try again")
correct= False
while(correct == False):
guess3= raw_input("Is the square root of " + str(num1) + " greater than or equal to 2? (y/n): ")
if sqrtOne >= 2.0 and str(guess3) == "y":
print("Correct!")
correct = True
elif sqrtOne < 2.0 and str(guess3) == "n":
print("Correct!")
correct = True
else:
print("Incorrect, try again")
print("Thanks for playing!")
Проблема, похоже, решена в версии 3.4.2 Python.
testVar = input("Ask user for something.")
Будет работать нормально.
input
эквивалентен Python 2.x raw_input
(см. docs.python.org/3.0/whatsnew/3.0.html#builtins ); это проблема, характерная для 2.x.
– jonrsharpe
16 December 2014 в 12:59
input
теперь работает таким образом, а raw_input исчез. – Thomas K 10 February 2011 в 18:35input()
- полезная функция, и я не рекомендую ее использовать. – Sven Marnach 26 January 2014 в 18:24