Промежуток может использоваться для добавления семантического значения, которое выходит за пределы объема HTML. Это может быть сделано при помощи классов, которые определяют определенные атрибуты. Например, если Вы пишете научно-фантастический роман, можно использовать промежуток для идентификации искусственных слов, потому что можно хотеть отформатировать тех по-другому, или потому что можно хотеть, чтобы программа проверки правописания проигнорировала их:
Тогда мастер призвал < класс промежутка = "wizardword"> gravenwist< / промежуток> и предложил его, нападают на приближающуюся армию. < класс промежутка = "wizardword"> gavenwist< / промежуток> сопротивлявшийся, но < мастера; класс промежутка = "wizardword"> wistwand< / промежуток> было слишком мощно.
Это могло представить как
Тогда, мастер призвал gravenwist и предложил его, нападают на приближающуюся армию. gavenwist, которому сопротивляются, но мастер , wistwand был слишком мощен.
Другой хороший пример этого вида вещи микроформаты , которые позволяют создание произвольной структуры в HTML:
home:
+1.415.555.1212
преимущество промежутка, по сравнению с отделением, состоит в том, что промежутки могут появиться почти везде, потому что они - встроенное содержание, и отделения являются элементами блока, таким образом, они могут только произойти внутри определенные другие элементы.
Сравните это, без использования нелокального
:
x = 0
def outer():
x = 1
def inner():
x = 2
print("inner:", x)
inner()
print("outer:", x)
outer()
print("global:", x)
# inner: 2
# outer: 1
# global: 0
С этим, используя нелокальный
, где inner ()
's x
теперь также external ()
s x
:
x = 0
def outer():
x = 1
def inner():
nonlocal x
x = 2
print("inner:", x)
inner()
print("outer:", x)
outer()
print("global:", x)
# inner: 2
# outer: 2
# global: 0
Если бы мы использовали
global
, он бы связалx
в правильное "глобальное" значение:x = 0 def external (): х = 1 def inner (): глобальный x х = 2 print ("внутренний:", x) внутренний () print ("внешний:", x) внешний () print ("глобальный:", x) # внутренний: 2 # внешний: 1 # глобальный: 2
При поиске в Google по запросу "python nonlocal" было обнаружено Предложение PEP 3104 , которое полностью описывает синтаксис и обоснование этого утверждения. Короче говоря, он работает точно так же, как оператор global
, за исключением того, что он используется для ссылки на переменные, которые не являются ни глобальными, ни локальными для функции.
Вот краткий пример того, что вы можете с этим сделать. Генератор счетчиков можно переписать, чтобы использовать это так, чтобы он больше походил на идиомы языков с замыканиями.
def make_counter():
count = 0
def counter():
nonlocal count
count += 1
return count
return counter
Очевидно, вы могли бы написать это как генератор, например:
def counter_generator():
count = 0
while True:
count += 1
yield count
Но в то время как это совершенно идиоматический питон , кажется, первая версия будет немного более очевидной для новичков. Правильное использование генераторов путем вызова возвращаемой функции - обычная путаница.
Короче говоря, он позволяет вам присваивать значения переменной во внешней (но неглобальной) области. См. PEP 3104 для всех кровавых подробностей.