Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 25, 2012 17:13:30

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Область видимости

Господа кодеры!
Не могли бы вы мне подсказать как решить проблему. Вот например есть код:

def sum():
       Sum = 5+5
       Div = 100/25
       Mult = 2*2
       print Sum, Div, Mult
sum()
def lol():
      print Sum, Div, Mult
lol()

Естественно будет ошибка, т.к. Переменные в фун-ии lol не определены. Так вот в чем вопрос, как можно использовать переменные с другой функции?

Отредактировано Protoss (Ноя. 25, 2012 17:21:26)

Офлайн

#2 Ноя. 25, 2012 20:01:16

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Область видимости

Необходимо либо использовать глобальные переменные (global variables), либо возвращать результаты вычислений из функций и подавать их на вход других функций в качестве аргументов. Первое кажется проще, но второе правильнее.

x = 5
y = 8

def doSum(a, b):
sumResult = a + b
return sumResult

sumResult = doSum(x, y) # В переменную sumResult вернули результат сложения

def display(something):
print something

display(sumResult) # Отправили sumResult в функцию display, чтобы она вывела ее на экран



Отредактировано Soteric (Ноя. 26, 2012 09:41:09)

Офлайн

#3 Ноя. 26, 2012 07:51:48

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Область видимости

Soteric, зачем же перекрывать функцию sum переменной?



Офлайн

#4 Ноя. 26, 2012 08:34:32

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Область видимости

Исправил



Офлайн

#5 Ноя. 26, 2012 09:12:51

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Область видимости

Не очень хорошая идея затенять имена built-in functions, в данном случае sum.

Офлайн

#6 Ноя. 26, 2012 09:41:27

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Область видимости

Спасибо, поправил :)



Офлайн

#7 Ноя. 26, 2012 15:51:02

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Область видимости

Спасибо большое, а если у меня больше, чем одна переменная, то я могу передать в функцию 12 параметров?

Офлайн

#8 Ноя. 26, 2012 16:06:55

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Область видимости

Можно передать и 12 параметров. Но, как правило, если возникает такая необходимость, то это повод задуматься а все ли хорошо.



Офлайн

#9 Ноя. 26, 2012 16:36:09

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Область видимости

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

>>> def func(x, *y, **z):
...     print x
...     print y
...     print z
... 
>>> func([1, 2, 3, 4], 2, 3, a=4, b=5)
[1, 2, 3, 4]
(2, 3)
{'a': 4, 'b': 5}
>>> 

Офлайн

#10 Ноя. 26, 2012 23:27:49

Protoss
От: Айур
Зарегистрирован: 2012-11-24
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Область видимости

Спасибо большое всем

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version