两者的主要区别是什么?我一直在研究Python并遇到了它们。装饰器本质上是一个包装另一个函数的函数,您可以在执行特定函数之前和之后执行任何操作。
def my_decorator(some_function):
def wrapper(*args, **kwargs):
print("Do something before the function is called")
some_function(*args, **kwargs)
print("Do something after the function is called")
return wrapper
@my_decorator
def addition(a, b):
result = a+b
print("Addition of {} and {} is {}".format(a,b,result))
Run Code Online (Sandbox Code Playgroud)
但是学习完Context Manager之后,我不禁注意到它也具有进入和退出的功能,您可以在其中执行大多数类似的操作。
from contextlib import contextmanager
@contextmanager
def open_file(path, mode):
the_file = open(path, mode)
yield the_file
the_file.close()
files = []
for x in range(100000):
with open_file('foo.txt', 'w') as infile:
files.append(infile)
for f in files:
if not f.closed:
print('not …Run Code Online (Sandbox Code Playgroud) 所以我有一本字典:
{'a': {'b': {'c': 'd', 'e': 'f'}}}
Run Code Online (Sandbox Code Playgroud)
我需要创建一个字典如下:
{'c':'d', 'e','f'}
Run Code Online (Sandbox Code Playgroud)
它可以更深入到任何级别,但我应该始终获得最大深度的键值对.所以我写了一个函数:
def boil_down_array(key, data):
if type(data) == dict:
for key, item in data.items():
boil_down_array(key, item)
else:
yield {key:data}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,一旦进入递归,yield就会丢失.如何再次出示该词典?我得到的只是一台不是我想要的发电机.
目前,我们正在使用 $centerSphere 来查找附近的城市。例如,对于美国德克萨斯州的 Bee Cave 地区,$centerSphere 正确找到了 30 公里半径内唯一的城市 Austin(根据文档,它已转换为弧度)。现在,对于斐济的劳托卡市(纬度:-17.6169618,经度:177.4504609),它给出了错误“球面距离需要(未实现的)包裹”。这是第一个问题:这个错误是什么意思?
我们尝试使用 $center 来实现相同的功能。我知道我们需要以英里而不是弧度给出距离。实施后,对于 Bee Cave,我得到了数千或数百英里以外的美国城市。一个例子是阿尔伯克基。我无法理解为什么即使在正确遵循 Mongo 文档之后这些城市也会到来。
我正在使用查询(针对 Bee Cave, TX)
db.places.find{
"geo": {
$geoWithin: { $center: [ [ -97.9524, 30.3061 ] , 18.64 ] }
}
}
Run Code Online (Sandbox Code Playgroud) 所以我正在 Django Admin 中构建一个学校管理系统。该学校有多个机构,我们希望建立只能操纵该机构的学生、教师等数据的管理员。例如:如果管理员用户是ABC学院的,他/她应该只能编辑ABC学生、教师等的数据。
这是我的自定义用户和机构模型:
class Institute(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class User(AbstractUser):
"""
Our own User model. Made by overriding Django's own AbstractUser model.
We need to define this as the main user model in settings.py with
variable AUTH_USER_MODEL *IMPORTANT*
"""
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(
max_length=255,
unique=True,
verbose_name="email address"
)
institute = models.ForeignKey(
Institute, on_delete=models.SET_NULL, null=True)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = [] …Run Code Online (Sandbox Code Playgroud)