小编boa*_*der的帖子

在Python中处理默认参数的最佳方法是什么?

我有一些代码(其他人写的):

def render(self, name, value, attrs=None):
    if not attrs:
        attrs = {}
    attrs.update({'class': 'ui-autocomplete-input'})
Run Code Online (Sandbox Code Playgroud)

我认为可以重写为:

def render(self, name, value, attrs={}):
    attrs.update({'class': 'ui-autocomplete-input'})
Run Code Online (Sandbox Code Playgroud)

如果有人入境,这当然会失败attrs=None,但这是否值得期待?attrs={} (额外浪费的dict创作?)是否会受到惩罚?

我仍然对python很新,无法回答这些问题,但我很好奇.

当我在口译员中测试这个时,我得到:

>>> def x(attrs={}):
...   attrs.update({'a': 'b'})
...   print attrs
... 
>>> x({'b': 'c'})
{'a': 'b', 'b': 'c'}
>>> x({'d': 'e'})
{'a': 'b', 'd': 'e'}
>>> x()
{'a': 'b'}
Run Code Online (Sandbox Code Playgroud)

这怎么会导致问题?请注意,我总是将该dict添加到attrs,即使用户指定了一个(实际上可能指向一个不同的问题(我应该将class属性与现有的属性合并).

-------------------并指出上述缺陷------------------

>>> def yikes(attrs):
...   attrs.update({'something': 'extra'})
...   print attrs
>>> def x(attrs={}):
...   print "Before:", attrs
...   attrs.update({'a': 'b'})
...   print …
Run Code Online (Sandbox Code Playgroud)

python

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

是否有一个css"编译器"自动扩展以涵盖所有/大多数浏览器?

专门用-webkit,-moz -o前缀查看事物,如转换,转换等...

我想要一些像智能sass(我认为可能会这样做,但似乎没有)的东西,它将采用通用形式的命令并为我编写所有长前缀版本.例如:

    .shrink {
        -webkit-transition: -webkit-transform 1s;
        -webkit-transform: scale(0);
        -moz-transition: -moz-transform 1s;
        -moz-transform: scale(0);
        -o-transition: -o-transform 1s;
        -o-transform: scale(0);
    }
Run Code Online (Sandbox Code Playgroud)

将写成

    .shrink {
        transition: transform 1s;
        transform: scale(0);
    }
Run Code Online (Sandbox Code Playgroud)

并且css"编译器"会写出所有其他的东西.....

css

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

使用jest 15.1.1编码覆盖率"未知"

当我尝试包含所有项目源代码以获得更合理的代码覆盖率时,我最终得到了

----------|----------|----------|----------|----------|----------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
----------|----------|----------|----------|----------|----------------|
All files |  Unknown |  Unknown |  Unknown |  Unknown |                |
----------|----------|----------|----------|----------|----------------|
Run Code Online (Sandbox Code Playgroud)

我的配置包含以下内容:

"collectCoverageFrom": [
    "<rootDir>/app_modules/",
    "<rootDir>/src/"
],    
Run Code Online (Sandbox Code Playgroud)

我也试过没有尾随/,**/*.js只有一个尾随*.js所有无济于事.

基于该--debug选项,路径扩展到我想要从中收集覆盖信息的路径(不是问题)

那么获得更准确的覆盖信息的魔力是什么?

我能找到的最好的文档来自这个Github PR:https: //github.com/facebook/jest/pull/1349/files


我最终做了:

"collectCoverageFrom": [
    "**/*.js",
    "!webpack.config.js"
],
Run Code Online (Sandbox Code Playgroud)

这只是工作,因为这是默认配置的一部分

"testPathIgnorePatterns": [
    "/node_modules/"
],
Run Code Online (Sandbox Code Playgroud)

它确实为测试运行增加了大量时间.

javascript jestjs babel-jest

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

pip需求文件中的平台独立性

如何将特定于平台的内容添加到需求文件中?需要一些Windows软件包而不是Linux软件包.

在Linux上不需要WinPExpect和pexpect pywin32,但winpexpect需要它

知道如何处理这个问题吗?

我已经考虑过一个小的python脚本,可以检测平台并通过运行不同平台特定文件的pip以及"主要"需求文件来处理它.似乎也许它应该更简单.

python pip virtualenv

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

你如何使Django Rest Framework序列化器双向化

我有一个角度应用程序,它提供了一个包含联系人数据和联系号码列表的表单.每个联系人都可以有N个号码,每个号码都有一个类型(单元格,主页,工作......)下面的代码将json发送到角度应用程序就好了,我可以在那里处理它,包括添加新数字,删除数字.....但是当DRF获得完全相同的格式json时,它无法反序列化它.它抛出了这个错误:

AttributeError: 'Contact' object has no attribute 'numbers'
Run Code Online (Sandbox Code Playgroud)

这是完全有效的,但序列化程序有这个字段,应该能够挂起这些值,以便我保存联系后保存它们.

如果我在更新方法中做了类似这样的事情:

self.object = self.get_object_or_none()
self.object.numbers = []
Run Code Online (Sandbox Code Playgroud)

我可以消除该错误,但它会抛弃这些错误:

{'numbers': [
    {u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']}, 
    {u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']}, 
    {u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']}
]}
Run Code Online (Sandbox Code Playgroud)

前两个电话号码不是新的,它们有id字段,来自db,第三个是新的,我正在尝试添加它.

这是代码.当然,这不是一种奇怪的做事方式.Django Rest Framework是我应该使用的吗?我一直在试着像这样的表演停止者,这似乎是记录下来的做事方式,但随后它们爆发了.

class PhoneTypeSerializer(serializers.ModelSerializer):
    class Meta:
        model = PhoneType

class ContactPhoneSerializer(serializers.ModelSerializer):
    number_type = PhoneTypeSerializer(source='number_type')
    class Meta:
        model = ContactPhone
        depth = 1 …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

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

作为一个群体等待多个承诺并且单独处于角度?

我正在使用Restangular同时对服务器进行几次调用.Restangular返回每个动作的承诺,每个动作都需要对其特定的返回做一些事情,一旦所有3个完成并且它们的.then功能已经完成,我需要执行另一个功能.

这是在这种情况下做承诺的正确方法吗?

var a, b, c;

a = service1.getList(...).then(function A(data) { do something; $log.debug('a'); return 'a';});
b = service2.getList(...).then(function B(data) { do something; $log.debug('b'); return 'b';});
c = service3.getList(...).then(function C(data) { do something; $log.debug('c'); return 'c';});

$q.all([a,b,c]).then(function wrapUp(values) { $log.debug(values); do something after functions A, B,and C above have finished;}
Run Code Online (Sandbox Code Playgroud)

我不知道$ q.all()是否会在A,B和C的最后运行,或者它是否可以在最后一个函数前面竞争.wrapUp()总是最后被调用吗?

注意A,B和C是承诺a,b和c完成后调用的函数.

传递给wrapUp的values数组似乎是来自A,B和C的返回值.但是,在我的控制台中,函数A记录10次,然后函数B记录10次,然后函数C和函数wrapUp都记录10次(交替).

10x伐木似乎有些东西被打破.....,恐惧的种族情况似乎是可能的....

有人能解释一下这里发生了什么吗?

Chrome开发者控制台

promise angularjs restangular

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

指南针插座挂断与咕噜声服务

我正在运行grunt-contrib-compass@0.6.0并且它因此错误而中止:

node_modules/grunt-contrib-compass/node_modules/tmp/lib/tmp.js:261
  throw err;
        ^
Error: socket hang up
at createHangUpError (http.js:1476:15)
at Socket.socketCloseListener (http.js:1526:23)
at Socket.emit (events.js:95:17)
at TCP.close (net.js:465:12)
Run Code Online (Sandbox Code Playgroud)

我升级到grunt-contrib-compass@1.0.1,现在它不再退出,但它会产生以下错误/警告(当发生这种情况时它不再退出,即使它说致命)

Fatal error: socket hang up
Fatal error: socket hang up
Run Code Online (Sandbox Code Playgroud)

我只能假设更好的错误处理是同样的问题.是否有某种方法可以从抛出此错误的内容中获取更好的信息?这是我的Gruntfile的指南针部分

    compass: {
        options: {
            sassDir: '<%= yeoman.app %>/styles',
            cssDir: '.tmp/styles',
            generatedImagesDir: '.tmp/images/generated',
            imagesDir: '<%= yeoman.app %>/images',
            javascriptsDir: '<%= yeoman.app %>/scripts',
            fontsDir: '<%= yeoman.app %>/fonts',
            importPath: '<%= yeoman.app %>/bower_components',
            httpImagesPath: '/images',
            httpGeneratedImagesPath: '/images/generated',
            httpFontsPath: 'styles/fonts',
            relativeAssets: false,
            trace: true
        },
        dist: {},
        server: {
            options: {
                debugInfo: true …
Run Code Online (Sandbox Code Playgroud)

gruntjs grunt-contrib-compass

6
推荐指数
0
解决办法
411
查看次数

Intl.NumberFormat支持来自node.js?

在我的浏览器控制台:

> Intl.NumberFormat.supportedLocalesOf('it')
["it"]
Run Code Online (Sandbox Code Playgroud)

在我的计算机上的节点中:

> Intl.NumberFormat.supportedLocalesOf('it')
[]
Run Code Online (Sandbox Code Playgroud)

在我的同事计算机上的节点中:

> Intl.NumberFormat.supportedLocalesOf('it')
["it"]
Run Code Online (Sandbox Code Playgroud)

相同版本的节点4.5.0

Intl.NumberFormat支持应该来自哪里?您需要构建什么才能将它包含在您的节点版本中?

node.js

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

使用 gettext 和 jinja2 以及金字塔翻译 %%

使用 Jinja2 和 Pyramid 与 Python 进行 i18n 工作。似乎不知道如何翻译%%。 我开始怀疑这个 bug 是在 Jinja2 中。


所以我做了更多的调查,看来问题更多的是 gettext 而不是 jinja2,如 repl 所示

>>>gettext.gettext("98%% off %s sale") % ('holiday')
'98% off holiday sale'
>>>gettext.gettext("98%% off sale")
'98%% off sale'

>>>gettext.gettext("98% off %s sale") % ('holiday')
Traceback (most recent call last):
  Python Shell, prompt 13, line 1
TypeError: %o format: a number is required, not str
Run Code Online (Sandbox Code Playgroud)

这似乎是一个先有鸡还是先有蛋的问题。

  • 如果 gettext 翻译 %% -> % 则格式化程序会在参数替换期间对其进行处理。
  • 如果 gettext 不翻译 %% -> % 那么当未调用格式化程序(没有要插入的参数)时 %% 会泄漏。

所有这些意味着翻译人员(其中大多数不是计算机程序员)必须非常小心地进行翻译,每个人都需要非常小心包含 …

gettext internationalization jinja2 python-2.7 pyramid

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

如何处理 DRF 中序列化器中的保留字(来自)

下面是一个在字段中使用保留字 ( from ) 的序列化器:

class EdgeSerializer(serializers.Serializer):
    field_name_map = {
        '_from': 'from'
    }
    class Meta:
        read_only_fields = ('_from', 'to', 'weight')
    _from = serializers.IntegerField(required=True)
    to = serializers.IntegerField(required=True)
    weight = serializers.FloatField(required=True)
Run Code Online (Sandbox Code Playgroud)

问题是当我读取serializer.data“输出”中的字段名称时_from,不是from。我尝试过使用source=,我尝试过反转field_name_map(键,值)=>(值,键)。

我不能用作from字段的名称,python 尝试解析文件时崩溃了

所以,我这样做是有效的,但在我嘴里留下了不好的味道,而且似乎是“错误”的做法:

class FromIntegerField(serializers.IntegerField):
    def bind(self, field_name, parent):
        super().bind(field_name, parent)
        self.field_name = 'from'

class EdgeSerializer(serializers.Serializer):
    _from = FromIntegerField(required=True)
    to = serializers.IntegerField(required=True)
    weight = serializers.FloatField(required=True)

    class Meta:
        read_only_fields = ('_from', 'to', 'weight')

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs) …
Run Code Online (Sandbox Code Playgroud)

django-rest-framework

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