Может быть, вы можете попробовать этот формат:
=IF((AND(Form Responses 1!B2:B=A7,Form Responses 1!E2:E="John Smith")), Form Responses 1!F2:F,"")
Некоторые ответы содержат слово "копия" в контексте вызова функции. Я нахожу это сбивающим с толку.
Python не копирует объекты , Вы передаете во время вызова функции когда-либо .
Параметры функции имена . Когда Вы звоните, функциональный Python связывает эти параметры с любыми объектами, которые Вы передаете (через имена в объеме вызывающей стороны).
Объекты могут быть изменяемыми (как списки) или неизменными (как целые числа, строки в Python). Изменяемый объект можно измениться. Вы не можете изменить имя, просто можно связать его с другим объектом.
Ваш пример не приблизительно объемы или пространства имен , это - приблизительно именование и привязка и переменчивость объекта в Python.
def f(n, x): # these `n`, `x` have nothing to do with `n` and `x` from main()
n = 2 # put `n` label on `2` balloon
x.append(4) # call `append` method of whatever object `x` is referring to.
print('In f():', n, x)
x = [] # put `x` label on `[]` ballon
# x = [] has no effect on the original list that is passed into the function
Вот хорошие изображения на различие между переменными на других языках и именами в Python .
У Вас уже есть много ответов, и я широко соглашаюсь с J.F. Sebastian, но Вы могли бы найти это полезным как ярлык:
Любое время Вы видите varname =
, Вы создаете новый привязка имени в объеме функции. Независимо от того, что значение varname
было связано с тем, прежде чем будет потерян в этом объеме .
Любое время Вы видите varname.foo()
, Вы называете метод на varname
. Метод может изменить varname (например, list.append
). varname
(или, скорее объект, что varname
имена) может существовать больше чем в одном объеме, и так как это - тот же объект, любые изменения будут видимы во всех объемах.
[отмечают, что global
ключевое слово создает исключение к первому случаю]
f
на самом деле не изменяет значение x
(который всегда является той же ссылкой на экземпляр списка). Скорее это изменяется эти содержание из этого списка.
В обоих случаях, копия ссылки передается функции. В функции,
n
присвоен новое значение. Только ссылка в функции изменяется, не та снаружи. x
не становится присвоенным новое значение: ни ссылка внутри, ни вне функции не изменяется. Вместо этого x
’s значение изменяется. и Начиная с x
внутренняя часть функция и снаружи относится к тому же значению, оба видят модификацию. В отличие от этого, n
внутренняя часть функция и снаружи относится к [1 111] отличающийся , значения после n
были повторно присвоены в функции.
Я переименую переменные для сокращения беспорядка. n-> nf или nmain. x -> xf или xmain:
def f(nf, xf):
nf = 2
xf.append(4)
print 'In f():', nf, xf
def main():
nmain = 1
xmain = [0,1,2,3]
print 'Before:', nmain, xmain
f(nmain, xmain)
print 'After: ', nmain, xmain
main()
при вызове функции f время выполнения Python делает копию xmain и присваивает его [1 110] xf и так же присваивает копию nmain к [1 112] nf.
В случае [1 113] n, значение, которое копируется, равняется 1.
В случае [1 114] x значение, которое копируется, не литеральный список [0, 1, 2, 3] . Это ссылка к тому списку. xf и xmain указывает на тот же список, поэтому когда Вы изменяете xf, Вы также изменяете xmain.
, Если, однако, необходимо было записать что-то как:
xf = ["foo", "bar"]
xf.append(4)
Вы нашли бы, что xmain не изменился. Это вызвано тем, что, в строке xf = ["нечто", "панель"] у Вас есть изменение xf для указания на новый список. Любые изменения, которые Вы вносите в этот новый список, не будут иметь никаких эффектов на список что xmain неподвижные точки к.
Hope, которая помогает. :-)
ItВґs, потому что список является изменяемым объектом. YouВґre не установка x к значению [0,1,2,3], youВґre определение маркировки к объекту [0,1,2,3].
необходимо объявить функцию f () как это:
def f(n, x=None):
if x is None:
x = []
...
n является (неизменным) интервалом, и копия передается функции, таким образом, в функции Вы изменяете копию.
X (изменяемый) список, и копия , указатель передается o функция так x.append (4) изменения содержание списка. Однако Вы, Вы сказали, что x = [0,1,2,3,4] в Вашей функции, не измените содержание x в основном ().