2013-09-11 3 views
0

Я пишу функцию в Python.Как вы можете вывести переменный аргумент в Python?

Так позволяет сказать, у меня есть 3 аргумента в этой функции:

Function (arg1, arg2, arg3) 
    arg1 = arg2 * arg3 

Когда функция вызывается, она как таковая:

function(arg1=var1, arg2=var2, arg3=var3) 

Теперь дело в том, эти переменные (var1 , var2, var3) различаются в случае вызова этой функции. Таким образом, они могут быть var4, var5, var6 и т. Д.

Учитывая, что эти переменные меняются, каков будет синтаксис, чтобы эта функция меняла переменный аргумент?

ie. arg1 = arg2 * arg3 меняется arg1. Потому что arg1 = var1.

Что мне нужно как-то для arg1 стоять в качестве фактического прокси var1 так, что не только arg1 изменен, но var1 изменяется также.

Это, очевидно, не выполнимо с просто с arg1=var1

Я предполагаю, что это также может быть сделано с другими командами функции или структуры. Как на самом деле меня не интересует, мне просто нужно вывести изменение в переменный аргумент.

Редактировать Эта функция специально предназначена для принимать аргумент под названием, не обязательно зная, что это такое, а затем внутри функции, что аргумент, который преобразуется в переменную формулы, такие как х в у = mx + b, необходимо преобразовать обратно в свою переменную цель, всю внутреннюю часть функции.

Проблема в том, что я не знаю, как настроить таргетинг на исходную переменную.

Так что, если бы функция (а = кошки, б = собаки, с = мышей)

а = с/2 - б * 2

как я тогда установить кот = а когда кошка переменная?

Я не могу просто сказать кот = а может быть, потому вход функции (а = птица, Ь =, летит с = кошками)

+1

Это зависит полностью от языка, но то, о чем вы просите, обычно называется ссылкой (вы хотите, чтобы две или более переменных ссылались на одни и те же данные в памяти). – Paulpro

+0

Да, извините его на питоне, я редактировал заголовок и пост. –

+0

Не могли бы вы уточнить, paul, что касается синтаксиса? –

ответ

0
def f(x, y): 
    return x*y 

a, b = 1, 2 

c = f(a, b) 

Вместо того, чтобы ваша функции попытаться изменить свои аргументы напрямую, возвращать любые результаты, которые производит функция. Это, оказывается, намного более чистый и полезный способ структурирования вашего кода.Например, вы можете сделать

print f(1, f(2, 3)) 

вместо того, чтобы создавать временные переменные:

f(a, 2, 3) 
f(b, 1, a) 
print b 

Вместо того, чтобы делать

f(arg1=var1, arg2=var2, arg3=var3) 
f(arg1=var4, arg2=var5, arg3=var6) 

сделать следующее:

var1 = f(var2, var3) 
var4 = f(var5, var6) 
+0

Если я верну результаты, как можно настроить таргетинг на var1, если его переменная? –

+0

@NickSimas: см. Расширенный ответ. – user2357112

+0

Хорошо, что работает да, но его больше похоже на var1 = f (a = var1, b = var2, c = var3) a = b + c return a –

0

Если это не выполнимо с arg1=var1, это из-за этого:

Python передает ссылки-на-объекты по значению (как Java), и все в Python является объектом. Это звучит просто, но тогда вы, , заметите, что некоторые типы данных, по-видимому, демонстрируют характеристики по умолчанию , в то время как другие, похоже, действуют как передача по ссылке ... В чем заключена сделка?

Важно понимать изменяемые и неизменные объекты. Некоторые объекты , такие как строки, кортежи и номера, неизменяемы. Изменение их внутри функции/метода создаст новый экземпляр, а исходный экземпляр вне функции/метода не будет изменен. Другие объекты, такие как списки и словари, изменяемы, что означает, что вы можете изменить объект на месте. Поэтому изменение объекта внутри функции/метода также изменит исходный объект снаружи.

Почему бы не просто вернуть arg1 и установить val1?

+0

Я не могу установить var1, потому что он переменный. –

+0

Как-то в вашем коде вы вызываете функцию, будь то внутри цикла, который выполняет итерации над вещами, которые вы используете в качестве параметров или что-то еще. Где бы вы ни делали это, вы знаете, с какими параметрами вы вызываете функцию. Сразу после вызова функции установите параметр в результат функции. – Ben

0

Python не имеет определенного синтаксиса относительно ссылок (не то, что я знаю, по крайней мере). Если вы хотите, чтобы ваш аргумент передавался в качестве ссылки функции, он должен быть изменен (например, список, словарь).

def foobar(a, b): 
    a[0] = 42 # This will modify the list 
    b[0] = '-' # This will modify the value of b passed to the function 

foobar(
    [4,8,15,16,23,42], # This argument is passed by reference, mutable 
    'asdf'    # This one is passed by value, immutable 
) 
+0

Я понимаю, что вы имеете в виду, но можете ли вы быть более конкретным относительно синтаксиса для изменения var1 внутри функции? –

Смежные вопросы