Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2011 16:30:49

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

Можно сделать такое

def f(a,b,c,d):
for par in all_parameters:
par = str(par)
print a+b
blabla
чтобы при этом параметры были по прежнему доступны через имена?



Отредактировано (Янв. 9, 2011 17:06:16)

Офлайн

#2 Янв. 9, 2011 17:02:02

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

def f(a,b,c):
"""asdsd"""
zz=locals()
Вы прям как с перла пришли :)



Офлайн

#3 Янв. 9, 2011 17:05:39

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

А при чем тут перл?

Мне надо перевести все параметры в строки и потом иметь возможность обращаться к ним по именам. А что делать с locals()? Это же копия.



Офлайн

#4 Янв. 9, 2011 17:13:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

Потому что в перле обычный способ передать все параметры в массивчике, а потом развертывание по именам.
locals это переменные присутствующие в локальном контексте сразу после входа - считай перечень аргументов
Если есть знатоки они может меня поправят.
Значения параметров это zz.values() имена параметров zz.keys() как к a,b,c все равно можете обращаться.
Почитайте документацию по поводу пространств имен в питоне я думаю станет значительно понятнее



Отредактировано (Янв. 9, 2011 17:13:42)

Офлайн

#5 Янв. 9, 2011 17:23:16

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

Т.е. ты предлагаешь

def f(a,b,c):
vars = locals()
модифицируем vars
print a+b
? Но
locals()

Update and return a dictionary representing the current local symbol table. Free variables are returned by locals() when it is called in function blocks, but not in class blocks.
Note: The contents of this dictionary should not be modified; changes may not affect the values of local and free variables used by the interpreter.
И это тот самый словарь, а не копия?
Edit: копия



Отредактировано (Янв. 9, 2011 17:24:35)

Офлайн

#6 Янв. 9, 2011 17:28:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

Модифицировать vars не получится как впрочем и a,b,c И в питоне модифицировать вообще нету в обычном понимании этого процесса.
a=5
это переассоциация
попробуйте этот код чтобы понять особенности

def f(a,b,c):
"""asdsd"""
zz=locals()
print zz
a=33
print a
print zz
print locals()
f(1,2,3)



Офлайн

#7 Янв. 9, 2011 17:29:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

Вам доступны и имена и значения, а дальше вам решать что с ними делать.



Офлайн

#8 Янв. 9, 2011 17:34:29

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

doza_and
И в питоне модифицировать вообще нету в обычном понимании этого процесса.
a=5
это переассоциация
Переассоциация это тоже модификация .Какая разница

doza_and
Вам доступны и имена и значения, а дальше вам решать что с ними делать.
И что мне с ними делать? Как мне записать во все параметры param = str(param)?



Офлайн

#9 Янв. 9, 2011 17:38:16

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

Разница в том что нет передачи примитивных типов по ссылке. То что вы на меняеете не повлияет на вызывающую процедуру

def f(a,b,c):
"""asdsd"""
params=str(locals().values())
print params
f(1,2,3)
>>>[1, 3, 2]
вам это надо?



Офлайн

#10 Янв. 9, 2011 17:41:21

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Обработать все аргументы функции

Уфф. Нет, мне надо, чтобы можно было дальше обращаться к аргументам по именам, а не через mydict.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version