Предыдущие ответы верны, но, пожалуйста, позвольте мне уточнить.
В мире Python вещи имеют очень точные значения, но не всегда ясно, что есть, если вы только начинаете.
Выражения вещи, которые имеют значение , и они включают в себя такие вещи, как 123
, some_variable
и 10/2
. Имя some_variable
называется идентификатором, просто потому, что оно идентифицирует значение. Точно так же, как имя Скраффи может идентифицировать вашу собаку.
Заявления - это вещи, которые влияют на поток программы или состояние вашей программы, но не имеют значения. Ниже приведены примеры высказываний:
if x > 10:
x -= 1
И
def foo(x):
print("The value of x is", x)
В отличие от JavaScript, например, где почти все является выражением (и имеет значение), вы не сделать это:
my_function = def foo(x): print("The value of x is", x)
В предыдущем def
заявление создаст af unction по имени foo
, но сама инструкция не имеет значения. Однако имя foo
будет ссылаться на значение. Это означает, что когда вы пишете foo
, значение будет вещь, и эта вещь является функцией!
Выражение x()
с другой стороны будет делать два вещей. Сначала он будет искать значение идентификатора x
.Надеемся, что это значение является функцией. После этого скобки означают, что значение будет под названием. Что произойдет, если x
не является функцией, то?
>>> x = 10
>>> x()
Traceback (most recent call last):
File "<ipython-input-3-7354d77c61ac>", line 1, in <module>
x()
TypeError: 'int' object is not callable
Big Fat Error: 10 не является «вызываемым». Callable означает что-то, что можно назвать функцией.
Скобки, как вы, вероятно, знаете, список аргументов. В этом случае список просто пуст, поэтому, когда вы пишете x()
, вы говорите: «Назовите любое имя« x », но не отправляйте какие-либо аргументы».
Вызов функции всегда имеет значение, так как это выражение. Если вы явно не вернете ничего, значение будет просто None
.
Чтобы ответить на ваш вопрос, наконец, давайте сыграем в игру замещения. Правила просты, любое выражение можно заменить его значением:
def value():
resp = requests.get('http://www.google.com').elapsed.total_seconds()
return resp
Это заявление, так что это не имеет значения. Однако функция создается с именем value
.
Функция состоит из двух операторов (без значения, снова), назначения переменной и оператора возврата.
Вещь, расположенная справа от =
, является выражением. Краткая история:
requests
ссылается на модуль запросов
get
ссылается на модуль глобального функции в описанном выше модуле
get('...')
называет эту функцию, и что-то возвращается.
- «Что-то» имеет свойство, называемое
elapsed
, которое имеет свойство под названием total_seconds
.
total_seconds
- это идентификатор, который ссылается на вызываемый. Вызываемый вызывается без каких-либо аргументов (total_seconds()
) и что-то возвращается. Вероятно, число, основанное на имени. Скажем, его значение всегда 10
, для простоты.
Следующее утверждение другое назначение:
test = value()
Это можно рассматривать как «пусть название„тест“относится к значению, возвращенному вызываемая идентифицируется именем„значение“ когда он вызывается с пустым списком аргументов ". В нашем случае будет вызван объект функции, называемый value
, resp
будет присвоен значение 10
, тогда оператор return
позволит вызывающему абоненту знать, что этот вызов отправляет значение 10
назад. Название test
будет ссылаться на значение 10
, с этого момента.
Давайте пройдемся по петле, быстро:
while True:
print test
time.sleep(10)
Проделайте следующий до конца недели:
print
(! Заявление в Python 2, выражение в Python 3) имеет побочный эффект печати материала на экран. В противном случае это не делает много.
- Материал, в данном случае, независимо от значения выражения
test
. Мы уже знаем, что идентификатор test
имеет значение 10
. Он просто напечатает «10» на экране.
- Сон на десять секунд.
- Повторите.
Возможно, вы хотите вызвать некоторую функцию на каждой итерации цикла («invoke» в основном латинский для «вызова», мне нравятся причудливые слова). В противном случае программа будет снова печатать «10», «10», «10», снова и снова. Чтобы это исправить это, вы должны сначала изменить выражение оцененное как часть print
заявления от всего идентификатора (test
) для вызова функции:
print test()
Но это, как мы видели ранее, приподнять Большой Ошибка Fat с 10
не является вызываемой функцией. Чтобы исправить это (это то, что делают программисты, верно?), Вам также необходимо изменить значение test
с 10
, так как оно не является вызываемым, для функции. Функция может называться просто по имени, так что просто изменить эту строку:
test = value() # equals ten
Для этого:
test = value # equals the function called "value"
Функция теперь имеет два названия, старое название «ценность», а новое имя "test". Каждый шаг в цикле снова запросит страницу и возвращает новое время, необходимое для завершения запроса. Если запрос истечет, у вас будет другой вид сбоя, но это уже другая история.
Дополнительную информацию можно найти в Python Language Reference.
просто измените 'test = value()' на 'test = value' – MaxU
@MaxU: Еще немного задействовано. Затем он напечатает что-то вроде '' –
zondo
@zondo, это был всего лишь намек (не полный ответ), поэтому он дает OP возможность понять, как справиться с этим – MaxU