小编Mit*_*ras的帖子

Python中上下文管理器和装饰器之间的区别

两者的主要区别是什么?我一直在研究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)

python contextmanager python-decorators

7
推荐指数
2
解决办法
1260
查看次数

如何在Python中的递归函数中产生

所以我有一本字典:

{'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就会丢失.如何再次出示该词典?我得到的只是一台不是我想要的发电机.

python python-3.x

6
推荐指数
2
解决办法
1006
查看次数

Mongo 中 $center 和 $centerSphere 的区别?

目前,我们正在使用 $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)

geospatial geo mongodb

3
推荐指数
1
解决办法
1164
查看次数

根据登录用户过滤 Django 管理员用户列表

所以我正在 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)

python django

1
推荐指数
1
解决办法
295
查看次数