Причина, по которой вы не можете изменять локальные переменные внутри функции, используя exec
таким образом, и почему exec
действует так, как это делается, можно суммировать следующим образом:
exec
- это функция, которая разделяет ее локальную область действия с областью самой внутренней области, в которой она вызвана. local()
. Когда вы определяете новый объект в exec
, то, что он делает, примерно эквивалентно следующему: from copy import copy
class exec_type:
def __init__(self, *args, **kwargs):
# default initializations
# ...
self.temp = copy(locals())
def __setitem__(self, key, value):
if var not in locals():
set_local(key, value)
self.temp[key] = value
temp
- временное пространство имен, которое сбрасывается после каждого экземпляра (каждый время, которое вы вызываете exec
).
Более подробный пример будет примерно следующим:
g_var = 5
def test():
l_var = 10
print(locals())
exec("print(locals())")
exec("g_var = 222")
exec("l_var = 111")
exec("print(locals())")
exec("l_var = 111; print(locals())")
exec("print(locals())")
print(locals())
def inner():
exec("print(locals())")
exec("inner_var = 100")
exec("print(locals())")
exec("print([i for i in globals() if '__' not in i])")
print("Inner function: ")
inner()
print("-------" * 3)
return (g_var, l_var)
print(test())
exec("print(g_var)")
Выход:
{'l_var': 10}
{'l_var': 10}
locals являются одинаковыми
{'l_var': 10, 'g_var': 222}
после добавления g_var
и изменения l_var
он добавляет только g_var
и оставил неизменяемый l_var
{'l_var': 111, 'g_var': 222}
l_var
, потому что мы меняем и печатаем местные жители в одном экземпляре (один вызов exec)
{'l_var': 10, 'g_var': 222}
{'l_var': 10, 'g_var': 222}
В локальных локалях функции и локальном l_var
exec не изменяется, а g_var
добавлен
Inner function:
{}
{'inner_var': 100}
{'inner_var': 100}
inner_function
. Локальная такая же, как и локальная команда exec
['g_var', 'test']
global содержит только g_var
и имя функции (после исключения специальных методов)
---------------------
(5, 10)
5
Вы можете применить следующий класс и стили к первому столбцу:
.space-between {
display: flex;
flex-direction: column;
justify-content: space-between;
}
. столбец в загрузочном листе (вы вложили второй столбец в первый столбец кода выше)
Похоже, вам не хватает закрытия div
, нарушающего сетку.
codepen: https://codepen.io/brooksrelyt/pen/JwQpqm
<div class="container">
<h1 class="display-3 text-center mb-5">
Lorem, ipsum dolor sit amet consectetur adipisicing elit.
</h1>
<div class="row">
<div class="col-md-6">
<!-- I need this paragraph to stay at the top -->
<p class="text-muted text-center">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Officiis laudantium ducimus veritatis aliquam voluptas, maiores error inventore facere minus rem.
</p>
<!-- I need this image to be at the bottom of the container -->
<img src="https://via.placeholder.com/150x100" class="img-fluid" alt="" />
<!-- <img src="imgs/abc.svg" class="img-fluid" alt="" /> -->
</div>
<div class="col-md-6">
<!-- Other stuff-->
<p>Form other stuff</p>
</div>
</div>
</div>
</div>