Python простой?
От: Разраб  
Дата: 07.09.23 07:53
Оценка: :)
Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?
def connect_bd():
    global con
    ...        

def get_from_bd():
    connect_bd()

    with con:
        ...
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Python простой?
От: pagid_ Россия  
Дата: 07.09.23 08:13
Оценка: 1 (1) +2
Здравствуйте, Разраб, Вы писали:

Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?

Это не о простоте/сложности, а а хаотичности/бессистемности синтаксиса, присущей очень многим, практическим наверно всем, динамическим языкам.
Re: Python простой?
От: CreatorCray  
Дата: 07.09.23 08:21
Оценка: 3 (1) +4 -1 :)
Здравствуйте, Разраб, Вы писали:

Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?

Мда.
На помоечку!
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Python простой?
От: Privalov  
Дата: 07.09.23 08:50
Оценка: +2
Здравствуйте, CreatorCray, Вы писали:

CC>На помоечку!


В печку же!
Автор: Sheridan
Дата: 26.02.08
Re: Python простой?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 07.09.23 10:11
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?


А то что можно любой объект или даже класс доработать напильником на ходу — даже поменять его тип — это тебя не смущает?

Да, вот такая там обстановка и это принципиально.
The God is real, unless declared integer.
Re: Python простой?
От: Pyromancer  
Дата: 07.09.23 10:24
Оценка: +2
Здравствуйте, Разраб, Вы писали:

Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?


На то что технически возможно, но не нравится, есть мантра из С++ — "просто не делайте это"
Re: Python простой?
От: Pauel Беларусь http://blogs.rsdn.org/ikemefula
Дата: 07.09.23 11:06
Оценка:
Здравствуйте, Разраб, Вы писали:

Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?


global это явный захват глобальной переменной с возможностью изменения, т.к. просто так перезаписать захваченную переменную не выйдет. Вполне себе годная вещь.

Если взять за правило, что абы где переменными не раскидываетесь, то это хороший бенефит — ищете по global и смотрите, где что захватываете с целью модификации.

На самом деле слабоватая фича, т.к. вместо изменения переменной можно изменить свойство или вызвать мутабельный метод. Но в целом на этой штуке можно построить более-менее внятный подход к разработке в простых приложениях
Отредактировано 07.09.2023 11:09 Pauel . Предыдущая версия .
Re: Python простой?
От: Буравчик Россия  
Дата: 07.09.23 12:34
Оценка: +1
Здравствуйте, Разраб, Вы писали:

Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?

Р>
Р>def connect_bd():
Р>    global con
Р>    ...        

Р>def get_from_bd():
Р>    connect_bd()

Р>    with con:
Р>        ...
Р>


1. В таком виде не работает. Будет ошибка NameError
2. Не надо писать такой код. Да и вообще, не надо использовать global
Best regards, Буравчик
Re[3]: Python простой?
От: CreatorCray  
Дата: 07.09.23 20:06
Оценка: +1
Здравствуйте, Privalov, Вы писали:

CC>>На помоечку!

P>В печку же!
Автор: Sheridan
Дата: 26.02.08

Ещё вариант "фтопку!"
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: Да фигня
От: Wolverrum Ниоткуда  
Дата: 07.09.23 22:06
Оценка: +1 :)))
Здравствуйте, Разраб, Вы писали:

Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?

Это еще фигня

Лично я над примерно таким довольно долго медитировал (пока не домедитировал до знания, что это типа здесь вполне нормальное поведение)
class A:
    def __init__(self, arg_list=[]):
        self._args = arg_list

    def append(self, item):
        self._args.append(item)

    def iterate(self):
        for item in self._args:
            print(f"{item} ")

def run():
    a = A()
    b = A()
    b.append(1)
    b.append(2)
    a.append(3)
    b.iterate()

run()


"Счастливой отладки!" как говорится
Re[2]: Да фигня
От: Разраб  
Дата: 08.09.23 02:50
Оценка:
Здравствуйте, Wolverrum, Вы писали:

W>Лично я над примерно таким довольно долго медитировал (пока не домедитировал до знания, что это типа здесь вполне нормальное поведение)

W>
W>class A:
W>    def __init__(self, arg_list=[]):
W>        self._args = arg_list
W>


W>"Счастливой отладки!" как говорится


def run():
    a = A([])
    b = A([])

Но почему?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Да фигня
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 08.09.23 05:06
Оценка: 1 (1) +1 :)
Здравствуйте, Wolverrum, Вы писали:

W>class A:

W> def __init__(self, arg_list=[]):
W> self._args = arg_list

Первый встречный статический анализатор объяснит тебе, в чём ты неправ. А анализаторов этих штуки 3-4 доступных щелчком пальца на pip install. Если ты их не применяешь — чистый ССЗБ. Сейчас таки не 2000-й год, чтобы это всё только глазами ловить ;\

Я как-то похожее написал (если точно, там было foo = [] в объявлении класса). Потом что-то стукнуло и исправил, просто по ходу прочей возни. Но между написанием и правкой отфоркнули релизную ветку.
Саппорту пришлось побегать по кастомерам.
Анализаторов тогда не было, или, скорее, я их не знал (конец 2000х).

W>"Счастливой отладки!" как говорится


Нее, настоящие проблемы сильно глубже;\
The God is real, unless declared integer.
Re: Python простой?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 08.09.23 05:22
Оценка: +1
Здравствуйте, Разраб, Вы писали:

Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?


Вдогонку:

Р>def connect_bd():

Р> global con
Р> ...

Ну а возьмём C:

$ cat t1.c
#include <stdio.h>
void aaa();
void bbb();
int main() {
  extern int moo;
  moo = 0x12345678;
  printf("%x\n", moo);
  aaa();
  bbb();
}
$ cat t2.c
int moo = 999;
netch@lessie:/tmp>>
$ cat t3.c
void aaa() {
  extern short moo;
  moo = 123;
}
$ cat t4.c
#include <stdio.h>
void bbb() {
   extern int moo;
   printf("%x\n", moo);
}
$ gcc t1.c t2.c t3.c t4.c
$ ./a.out 
12345678
1234007b


Ну и в чём разница?
В Питоне хотя бы нарушить типы нельзя;\
А в C спокойно где-то на любой глубине ссылайся через extern куда угодно...
The God is real, unless declared integer.
Re[2]: Python простой?
От: night beast СССР  
Дата: 08.09.23 06:22
Оценка:
Здравствуйте, netch80, Вы писали:

Р>>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?

N>Вдогонку:

Р>>def connect_bd():

Р>> global con
Р>> ...

N>Ну а возьмём C:


я так понял, основная претензия была в том что читать без global можно, а писать нельзя )
Re: Python простой?
От: DiPaolo Россия  
Дата: 08.09.23 06:35
Оценка:
Р>Вот такие штуки когда нечтно глобальное объявляется внутри функции по вашему как?
Норм. Даже полезно. Собственно, официальная документация то же самое объясняет:

(https://docs.python.org/3/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python)

Though a bit surprising at first, a moment’s consideration explains this. On one hand, requiring global for assigned variables provides a bar against unintended side-effects. On the other hand, if global was required for all global references, you’d be using global all the time. You’d have to declare as global every reference to a built-in function or to a component of an imported module. This clutter would defeat the usefulness of the global declaration for identifying side-effects.

Патриот здравого смысла
Re[3]: Python простой?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 08.09.23 07:17
Оценка:
Здравствуйте, night beast, Вы писали:

NB>я так понял, основная претензия была в том что читать без global можно, а писать нельзя )


Я не могу найти никакого способа понять фразу

Р>>>нечто глобальное объявляется внутри функции


описанным тобой способом. Ибо "объявляется" это не "используется".

Проблема, да, есть (для сравнения см. команду nonlocal — почему она нужна, а global — нет?)
Но она понятна, если посмотреть на eval() где определяются global и local пространства, а не цепочка всевозможных между ними.
The God is real, unless declared integer.
Re[4]: Python простой?
От: night beast СССР  
Дата: 08.09.23 07:25
Оценка:
Здравствуйте, netch80, Вы писали:

NB>>я так понял, основная претензия была в том что читать без global можно, а писать нельзя )


N>Я не могу найти никакого способа понять фразу

Р>>>>нечто глобальное объявляется внутри функции
N>описанным тобой способом. Ибо "объявляется" это не "используется".

мое предположение было сделано исходя из представленного кода и вероятного небольшого опыта работы ТС с питоном
Re[3]: Да фигня
От: Wolverrum Ниоткуда  
Дата: 08.09.23 15:32
Оценка:
Здравствуйте, netch80, Вы писали:

N>Первый встречный статический анализатор объяснит тебе, в чём ты неправ.

Согласен, но заметил, что там что-то подчеркивается (речь идет о pycharm) лишь вчера, когда пример готовил

N>Нее, настоящие проблемы сильно глубже;\

Вполне согласен, но пока экспы мало, и код слишком прикладной, чтобы замечать. бездну смотрящую в меню
Re[4]: Python простой?
От: Privalov  
Дата: 09.09.23 10:54
Оценка:
Здравствуйте, CreatorCray, Вы писали:

Это общий вариант. А "в печку" — сугубо для Питона.
Есть еще один специализированный. В пруд
Автор: Sheridan
Дата: 16.01.12
и закопать
Автор: Sheridan
Дата: 16.01.12
. Это про жабу (Java по-русски).
Re[5]: Python простой?
От: rudzuk  
Дата: 09.09.23 14:07
Оценка: +1
Здравствуйте, Privalov, Вы писали:

P> Есть еще один специализированный. В пруд
Автор: Sheridan
Дата: 16.01.12
и закопать
Автор: Sheridan
Дата: 16.01.12
. Это про жабу (Java по-русски).


avalon/3.0.2
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.