Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2013 11:18:22

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

Инструкция global

x = 1
def f():
    if x: ...
глобальная переменная x в функции f только читается, и ее не надо объявлять global. А вот если объявить, не ускорит ли это доступ к этой переменной, ведь мы явно указываем где конкретно искать?

Офлайн

#2 Март 1, 2013 11:24:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Инструкция global

ИМХО, инструкция глобал нужна, если переменная объявляемая в теле функции должна являться глобальной для модуля.
То есть так

def foo():
    global x
    x=3
foo()
print x
Однако, это тоже какое-то сомнительное применение.



Офлайн

#3 Март 1, 2013 11:30:45

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

Инструкция global

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

Офлайн

#4 Март 1, 2013 11:44:59

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Инструкция global

Простой тест

import timeit
x = 3
def foo():
    global x
    y = x ** 2
def bar():
    y = x ** 2
print(timeit.timeit("foo()", setup="from __main__ import foo"))
print(timeit.timeit("bar()", setup="from __main__ import bar"))

0.249526023865
0.161004066467


БЕЗ global функция работает гораздо быстрее, посему не пихайте ее в код без нужды, а такую нужду придумать весьма непросто.



Отредактировано FishHook (Март 1, 2013 11:46:42)

Офлайн

#5 Март 1, 2013 11:48:41

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

Инструкция global

Ясно, спасибо, вопрос закрыт.

Офлайн

#6 Март 1, 2013 22:55:24

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Инструкция global

FishHook
БЕЗ global функция работает гораздо быстрее, посему не пихайте ее в код без нужды, а такую нужду придумать весьма непросто.
Тут таки важно какой питон. Важно, в каком контексте это надо. Поэтому, я бы так категорично не утверждал.



Офлайн

#7 Март 2, 2013 06:38:20

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Инструкция global

Опять экономия на спичках.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version