小编Jim*_*ard的帖子

理解*x,= lst

我正在阅读一些旧代码,试图理解它的作用,我偶然发现了这个奇怪的声明:

*x ,= p
Run Code Online (Sandbox Code Playgroud)

p是这个上下文中的列表.我一直试图弄清楚这句话的作用.据我所知,它只是设置x为的值p.例如:

p = [1,2]
*x ,= p    
print(x)
Run Code Online (Sandbox Code Playgroud)

只是给

[1, 2]
Run Code Online (Sandbox Code Playgroud)

这有什么不同x = p吗?知道这个语法在做什么吗?

python python-3.x iterable-unpacking

70
推荐指数
3
解决办法
4994
查看次数

在比较XSLT <xsl:if>中的字符串时,如何指定"not equals to"?

目前我有一个xsl与以下代码,我正在尝试打印出"计数"只有它不等于N/A.但似乎"!="不起作用.

<xsl:for-each select="Directory/Match">
    <xsl:if test = "Count != N/A">
        <tr>
            <td><xsl:value-of select="@bookName" /></td>
            <td><xsl:value-of select="@AuthorName" /></td>
            <td><xsl:value-of select="Count" /></td>
        </tr>
    </xsl:if>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将其与数值进行比较,它会起作用.

例:

<xsl:if test = "Occurrances != 0">
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我:如果我想比较字符串我可以使用什么?

xslt

60
推荐指数
2
解决办法
14万
查看次数

为什么在Python 3中范围(0)==范围(2,2,2)为真?

为什么使用不同值初始化的范围在Python 3中相互比较?

当我在我的解释器中执行以下命令时:

>>> r1 = range(0)
>>> r2 = range(2, 2, 2)
>>> r1 == r2
True
Run Code Online (Sandbox Code Playgroud)

结果是True.为什么会这样?为什么range具有不同参数值的两个不同对象被视为相等?

python identity range python-3.x python-internals

53
推荐指数
5
解决办法
1万
查看次数

为什么OrderedDict的值不相等?

使用Python 3:

>>> from collections import OrderedDict
>>> d1 = OrderedDict([('foo', 'bar')])
>>> d2 = OrderedDict([('foo', 'bar')])
Run Code Online (Sandbox Code Playgroud)

我想检查是否平等:

>>> d1 == d2
True
>>> d1.keys() == d2.keys()
True
Run Code Online (Sandbox Code Playgroud)

但:

>>> d1.values() == d2.values()
False
Run Code Online (Sandbox Code Playgroud)

你知道为什么价值观不平等吗?

我用Python 3.4和3.5进行了测试.


在这个问题之后,我发布了Python-Ideas邮件列表以获得更多详细信息:

https://mail.python.org/pipermail/python-ideas/2015-December/037472.html

python dictionary ordereddictionary python-3.x

50
推荐指数
3
解决办法
3210
查看次数

Pandas date_range在月初生成月度数据

我正在尝试生成每月数据的日期范围,其中日期始终是月初:

pd.date_range(start='1/1/1980', end='11/1/1991', freq='M')
Run Code Online (Sandbox Code Playgroud)

这会生成1/31/1980,2/29/1980等等.相反,我只是想1/1/1980,2/1/1980...

我已经看到有关生成始终在每个月的特定日期的数据的其他问题,答案说这是不可能的,但肯定必须在月初!

python date-range pandas

48
推荐指数
2
解决办法
3万
查看次数

当'[]是[]'并且'{}是{}'返回False时,为什么'()是()'返回True?

根据我的意识,使用[], {}()实例化对象会分别返回一个list, dict或新的实例tuple; 具有新标识的新实例对象.

这对我来说非常清楚,直到我实际测试它并且我注意到() is ()实际返回True而不是预期False:

>>> () is (), [] is [], {} is {}
(True, False, False)
Run Code Online (Sandbox Code Playgroud)

正如所料,与创建对象时,这种行为还表现list(),dict()tuple()分别为:

>>> tuple() is tuple(), list() is list(), dict() is dict()
(True, False, False)
Run Code Online (Sandbox Code Playgroud)

我可以在状态文档中tuple()找到的唯一相关信息:

[...]例如,tuple('abc')退货('a', 'b', 'c')tuple([1, 2, 3])退货(1, 2, 3).如果没有给出参数,构造函数会创建一个新的空元组().

可以说,这还不足以回答我的问题.

那么,为什么空元组具有相同的身份,而其他像列表或词典不具有相同的身份?

python identity tuples python-3.x python-internals

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

在编译python的时候--enable-optimizations做了什么?

我正在尝试在基于arm的Linux机器上编译Python 3.6, ./configure输出:

如果您想要一个激活所有优化的版本构建(LTO,PGO等),请运行./configure --enable-optimizations.

怎么--enable-optimizations办?

python linux configure python-3.x python-3.6

46
推荐指数
1
解决办法
2万
查看次数

卸载从源代码构建的python?

我从源代码安装了python 2.6,后来又错误地从包管理器中安装了另一个python 2.6.

我找不到卸载从源代码构建的python的方法,这可能/容易吗?

运行ubuntu 10.04.

python linux ubuntu python-2.x

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

'is'运算符与非缓存整数意外地运行

在玩Python解释器时,我偶然发现了关于is运算符的这个冲突的情况:

如果评估发生在它返回的函数中True,如果它在外部完成则返回False.

>>> def func():
...     a = 1000
...     b = 1000
...     return a is b
...
>>> a = 1000
>>> b = 1000
>>> a is b, func()
(False, True)
Run Code Online (Sandbox Code Playgroud)

由于is运营商评估id()的参与对象,这意味着ab指向同一个int函数内声明的时候实例func,但是,相反,它们指向一个不同的对象时,它的外面.

为什么会这样?


注意:我知道identity(is)和equal(==)操作之间的区别,如了解Python的"is"操作符中所述.另外,我也知道python正在对范围内的整数执行缓存,[-5, 256]"is"中所述,运算符与整数一起出现意外行为.

不是这里的情况,因为数字超出了该范围,我确实想要评估身份而不是平等.

python int identity python-3.x python-internals

41
推荐指数
2
解决办法
1420
查看次数

理解__init_subclass__

我终于升级了我的python版本,我发现了添加的新功能.除此之外,我正在摸索新__init_subclass__方法.来自文档:

只要包含类被子类化,就会调用此方法.然后cls是新的子类.如果定义为普通实例方法,则此方法将隐式转换为类方法.

所以我开始尝试一下,按照文档中的示例:

class Philosopher:
    def __init_subclass__(cls, default_name, **kwargs):
        super().__init_subclass__(**kwargs)
        print(f"Called __init_subclass({cls}, {default_name})")
        cls.default_name = default_name

class AustralianPhilosopher(Philosopher, default_name="Bruce"):
    pass

class GermanPhilosopher(Philosopher, default_name="Nietzsche"):
    default_name = "Hegel"
    print("Set name to Hegel")

Bruce = AustralianPhilosopher()
Mistery = GermanPhilosopher()
print(Bruce.default_name)
print(Mistery.default_name)
Run Code Online (Sandbox Code Playgroud)

生成此输出:

Called __init_subclass(<class '__main__.AustralianPhilosopher'>, 'Bruce')
'Set name to Hegel'
Called __init_subclass(<class '__main__.GermanPhilosopher'>, 'Nietzsche')
'Bruce'
'Nietzsche'
Run Code Online (Sandbox Code Playgroud)

我知道这个方法是子类定义之后调用的,但我的问题特别是关于这个特性的用法.我也阅读了PEP 487文章,但对我没什么帮助.这种方法在哪里有用?是为了:

  • 在创建时注册子类的超类?
  • 强制子类在定义时设置字段?

另外,我是否需要了解它__set_name__以充分理解其用法?

python metaclass class subclass python-3.6

41
推荐指数
4
解决办法
1万
查看次数