小编Pet*_*sen的帖子

空集的真值

我有兴趣在Python的真值设置像{'a', 'b'},或空集set()(这是不一样的空字典{}).我特别想知道是否bool(my_set)False当且仅当设定my_set为空.

忽略原语(如数字)以及用户定义的类型,https://docs.python.org/3/library/stdtypes.html#truth表示:

以下值被视为false:

  • [...]
  • 任何空序列,例如'',(),[].
  • 例如,任何空映射{}.
  • [...]

所有其他值都被认为是真实的

https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range,一组是不是一个序列(它是无序的,它的元素没有索引,等等. ):

有三种基本序列类型:列表,元组和范围对象.

而且,根据https://docs.python.org/3/library/stdtypes.html#mapping-types-dict,

目前只有一种标准的映射类型,即字典.

所以,据我所知,set类型不是一种类型False.但是,当我尝试时,bool(set())评估为False.

问题:

  • 这是文档问题,还是我出错?
  • 空集是真实值的唯一集合False吗?

python set truthiness

41
推荐指数
3
解决办法
3282
查看次数

什么时候不使用docker run --init

--init标志docker run原因tini初始化系统被用作ENTRYPOINT。结果,在容器中运行的应用程序将是init系统的子进程,因此它可以处理信号处理,僵尸收割等工作。

docker-compose也有一个init: true服务设置。

正如tini透明地工作一样,无需以任何方式修改Dockerfile(这就是tini文档所说的)。

所以我的问题是:

  • 使用有什么缺点--init吗?
  • 在哪种情况下最好避免使用--init
  • 如果没有严重的缺点:为什么--init没有默认设置?

docker

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

如何使用docker-compose分配IPv6地址

我在Ubuntu 16.04上使用docker 1.12.1,在docker-compose 1.8.1上使用docker 1.12.1.我试图从https://docs.docker.com/compose/compose-file/#ipv4-address-ipv6-address获取Compose文件来运行.作为参考,我创建docker-compose.yml了以下内容:

version: '2'

services:
  app:
    image: busybox
    command: ifconfig
    networks:
      app_net:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10

networks:
  app_net:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "true"
    ipam:
      driver: default
      config:
      - subnet: 172.16.238.0/24
        gateway: 172.16.238.1
      - subnet: 2001:3984:3989::/64
        gateway: 2001:3984:3989::1
Run Code Online (Sandbox Code Playgroud)

现在,跑步docker-compose up产生

Creating network "tmp_app_net" with driver "bridge"
Creating tmp_app_1
Attaching to tmp_app_1
app_1  | eth0      Link encap:Ethernet  HWaddr 02:42:AC:10:EE:0A  
app_1  |           inet addr:172.16.238.10  Bcast:0.0.0.0  Mask:255.255.255.0
app_1  |           inet6 addr: fe80::42:acff:fe10:ee0a/64 Scope:Link
app_1  | …
Run Code Online (Sandbox Code Playgroud)

ipv6 docker docker-compose

5
推荐指数
2
解决办法
8720
查看次数

在 Django 序列化程序中,从上下文(或请求数据)获取默认字段值

我将 Django 与 REST Framework 结合使用。在序列化器中,我想根据视图或请求(request.data['type'])参数分配字段值,因此我需要上下文中的视图/请求。

我成功了,但只是以一种麻烦的方式,我正在寻找简化代码的方法。这是成功的方法(省略不相关的字段):

class TypeDefault(object):
    def set_context(self, serializer_field):
        view = serializer_field.context['view'] # or context['request']

        self.type = view.kwargs['type'].upper()

    def __call__(self):
        return self.type


class RRsetSerializer(serializers.ModelSerializer):
    type = serializers.CharField(read_only=True, default=serializers.CreateOnlyDefault(TypeDefault()))

    class Meta:
        model = RRset
        fields = ('type',)
        read_only_fields = ('type',)
Run Code Online (Sandbox Code Playgroud)

为了简化事情,我尝试删除该类TypeDefault,并将type序列化器字段替换为

    type = serializers.SerializerMethodField()

    def get_type(self, obj):
        return self.context.get('view').kwargs['type'].upper() # also tried self._context
Run Code Online (Sandbox Code Playgroud)

然而,context.get('view')回报None。我不确定为什么视图上下文在这里不可用。我的印象是,应该可以获得所需的功能,而无需求助于额外的类。

作为奖励,最好在字段声明本身中指定默认值,例如

    type = serializers.CharField(default=self.context.get('view').kwargs['type'].upper())
Run Code Online (Sandbox Code Playgroud)

然而,self这里没有定义,我不确定正确的方法是什么。


另外,我感兴趣的是从视图或请求数据检索信息是否有任何差异。CreateOnlyDefault虽然上下文方法应该适用于两者,但当从请求数据获取值时,也许有一种更简单的方法来获取功能,因为序列化器无论如何都会处理请求数据。


编辑:根据 Geotob 的请求,以下是调用序列化器的视图的代码: …

python django serialization django-rest-framework

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