Dmitry_Dronov

nonelocal

Apr 25th, 2016
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.77 KB | None | 0 0
  1. # кроме глобального пространства имен существует пространство nonlocal, которое является промежуточным между global и local. Это имена, которые находятся в пространстве на пути от локального до глобального
  2. # НО! главное что это пространство которое не равно ни global и ни local
  3.  
  4. # Пример
  5. # Если мы наш пример со словами обернём в функцию f() то вывод функции будет работать не так как мы хотим, потому ...
  6. def f():
  7.     ok_status = True
  8.     vowels = ['a','u','i','e','o']
  9.     def check(word):
  10.         global ok_status # ... что мы имя ok_status которое равно True, делая глобальным, выносим за поля функции f(). Чтобы имя ok_status оставалось внутри функции f() нужно использовать конструкцию nonlocal
  11.         #nonlocal ok_status
  12.         for vowel in vowels:
  13.             if vowel in word:
  14.                 return True
  15.         ok_status = False
  16.         return False
  17.  
  18.     print(check('abacaba'))
  19.     print(ok_status)
  20.     print(check('www'))
  21.     print(ok_status)
  22.  
  23. f()
  24. # True
  25. # True
  26. # False
  27. # True
  28. print(ok_status) # False
  29. #
  30. #
  31. print('#') # Second part of programm
  32. #
  33. #
  34. def f():
  35.     ok_status = True
  36.     vowels = ['a','u','i','e','o']
  37.     def check(word):
  38.         nonlocal ok_status
  39.         for vowel in vowels:
  40.             if vowel in word:
  41.                 return True
  42.         ok_status = False
  43.         return False
  44.  
  45.     print(check('abacaba'))
  46.     print(ok_status)
  47.     print(check('www'))
  48.     print(ok_status)
  49.  
  50. f()
  51. # True
  52. # True
  53. # False
  54. # False
  55. #print(ok_status) # NameError
Advertisement
Add Comment
Please, Sign In to add comment