小编Har*_*Har的帖子

Python:python中的Splat/unpack运算符*不能用在表达式中?

有没有人知道为什么unary(*)运算符不能用在涉及iterators/lists/tuples的表达式中的原因?

为什么它只限于功能拆包?或者我认为错了?

例如:

>>> [1,2,3, *[4,5,6]]
File "<stdin>", line 1
[1,2,3, *[4,5,6]]
        ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

为什么不是*运营商:

[1, 2, 3, *[4, 5, 6]] give [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

而当*操作符与函数调用一起使用时,它会扩展:

f(*[4, 5, 6]) is equivalent to f(4, 5, 6)
Run Code Online (Sandbox Code Playgroud)

使用列表时+*使用列表时之间存在相似性,但在使用其他类型扩展列表时则不相似.

例如:

# This works
gen = (x for x in range(10))

def hello(*args):
    print args    
hello(*gen)

# but this does not work
[] + gen
TypeError: can only concatenate …
Run Code Online (Sandbox Code Playgroud)

python argument-unpacking python-2.7 iterable-unpacking pep448

25
推荐指数
2
解决办法
8942
查看次数

Python:扩展预定义的命名元组

我有以下命名的元组:

from collections import namedtuple
ReadElement = namedtuple('ReadElement', 'address value')
Run Code Online (Sandbox Code Playgroud)

然后我想要以下内容:

LookupElement = namedtuple('LookupElement', 'address value lookups')
Run Code Online (Sandbox Code Playgroud)

两个命名元组之间存在重复,如何将ReadElement子类化为包含其他字段?

class LookupElement(ReadElement):
    def __new__(self, address, value, lookups):
        self = super(LookupElement, self).__new__(address, value)
        l = list(self)
        l.append(lookups)
        return tuple(l)
Run Code Online (Sandbox Code Playgroud)

然而,在语句中创建了元组,如果我将self修改为列表,我将丢失类型信息,我该如何避免这种情况?

python namedtuple python-2.7

19
推荐指数
2
解决办法
9877
查看次数

输入消息:win32上的[MSC v.1500 64位(AMD64)]

我想知道,当我启动python时,我收到以下消息:

Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Run Code Online (Sandbox Code Playgroud)

我使用64位python,但为什么它提到win32而不是win64?

python python-2.7

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

如何在python中使用继承将多个对象连接成一个对象?(在运行时)

我有以下课程:

class hello(object):
    def __init__(self):
        pass

class bye(object):
    def __init__(self):
        pass

l = [hello, bye]
Run Code Online (Sandbox Code Playgroud)

如果我执行以下操作,则会收到错误消息:

>>> class bigclass(*l):
  File "<stdin>", line 1
    class bigclass(*l):
                    ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

还有另一种方法可以在运行时自动执行此操作吗?

我使用的是Python 2.7.

python oop superclass python-2.7

15
推荐指数
2
解决办法
140
查看次数

ANTLR4:匹配所有输入备选方案exaclty一次

如何在ANTLR中以任何顺序制定规则以匹配其所有备选方案一次?

rule: ('example\r\n' | 'example2\r\n') nextRule
Run Code Online (Sandbox Code Playgroud)

我希望'example'和'example2'在进入下一个规则之前只匹配一次.

应匹配以下输入:

example
example2
Run Code Online (Sandbox Code Playgroud)

要么

example2
example
Run Code Online (Sandbox Code Playgroud)

但没有输入:

example
example
example2
Run Code Online (Sandbox Code Playgroud)

antlr4

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

如何将一系列条件映射为字典中的键?

我知道你可以使用字典作为switch语句的替代,如下所示:

def printMessage(mystring):
    # Switch statement without a dictionary
    if mystring == "helloworld":
        print "say hello"
    elif mystring == "byeworld":
        print "say bye"
    elif mystring == "goodafternoonworld":
        print "good afternoon"


def printMessage(mystring):
    # Dictionary equivalent of a switch statement
    myDictionary = {"helloworld": "say hello",
                    "byeworld": "say bye",
                    "goodafternoonworld": "good afternoon"}
    print myDictionary[mystring]
Run Code Online (Sandbox Code Playgroud)

但是,如果使用条件,除了返回true为false的等于(==)之外,这些不能轻易映射,即:

if i > 0.5:
    print "greater than 0.5"
elif i == 5:
    print "it is equal to 5"
elif i > 5 and i < 6:
    print …
Run Code Online (Sandbox Code Playgroud)

python lambda dictionary python-2.7

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

如何衡量JVM启动时间?

我有一个用java编写的应用程序,我想知道在达到它之前需要多长时间static void int main(String args)以及它在那个阶段做了什么我该如何实现呢?

我知道微软有一个名为MPGO的工具(管理器配置文件引导优化)是否有Java的等价物?

java jvm

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

ANTLR4:树木结构

我正在扩展baseClass Listener并试图读取一些值,但是顺序似乎没有任何层次结构.

我的语法的缩减版本如下:

start: config_options+
config_options: (KEY) EQUALS^ (PATH | ALPHANUM) (' '|'\r'|'\n')* ;

KEY: 'key' ;
EQUALS: '=' ;
ALPHANUM: [0-9a-zA-Z]+ ;
Run Code Online (Sandbox Code Playgroud)

但是,这个实现的解析树在config_options级别(终端级别)是平的,但是规则开始有很多config_options子项,但EQUALS不是config_options子树的根,所有TOKENS都有规则config_options作为根节点.如何将其中一个终端设为根节点?

在这个特殊的规则中,我不想要捕获任何空格,我知道有一个 - >跳过指向词法分析器但是在某些情况下我确实需要空间.即在字符串'''(ALPHANUM |'')'''中

(注意:^似乎不起作用)

输入的示例是:

关键= ABCDEFG

关键= 90weata

关键= acbefg9

我想做的就是提取键值和值对.我希望'='将是根,两个孩子将成为关键和价值.

antlr4

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

Python将yield作为函数参数进行跟进

我正在读这个问题

这个lambda/yield/generator理解是如何工作的?

我想更详细地理解语言结构.为什么括号必要?

(yield 55)
Run Code Online (Sandbox Code Playgroud)

而不是

yield 55
Run Code Online (Sandbox Code Playgroud)

为什么它只在作为参数传递给函数的生成器表达式中起作用?如果我做以下事情

 a = lambda x: 1
 a((yield 55))
 SyntaxError: 'yield' outside function
 # The error here implies that it must be used within a function... not a generator expression
Run Code Online (Sandbox Code Playgroud)

运行以下内容时:

a = lambda x: 1
list(a((yield 55)) for b in range(5))
[55,
 1,
 55,
 1,
 55,
 1,
 55,
 1,
 55,
 1]
Run Code Online (Sandbox Code Playgroud)

为什么这个收益率会产生价值?谁在旁边打电话?语法不清楚评估的顺序.

python python-2.7

7
推荐指数
0
解决办法
64
查看次数

ANTLR4:获取Listener中特定规则的令牌列表

我在ANTLR4中扩展了一个Listener,我希望获得与解析器中特定规则相关的所有标记,是否有方法可以做到这一点?

myConfiguration: CONFIG EQUALS parameters ;
parameters: ALPHANUMERIC+

CONFIG: 'config' ;
ALPHANUMERIC: [a-zA-Z0-9] ;
Run Code Online (Sandbox Code Playgroud)

我怎么能告诉我的听众查找的值CONFIG,并EQUALS在进入时myConfiguration解析规则?

有没有我可以使用的某种循环?

for( all tokens in this rule) {
    System.out.println(token.getText());
}
Run Code Online (Sandbox Code Playgroud)

我可以通过解析器类看到有一个令牌列表,但我找不到与当前规则关联的令牌列表.

我之所以这样问,是因为我可以避免在Listener和语法中重新输入我需要的令牌名称.通过这样做,我可以检查是否找到了该特定规则中的每个令牌类型,而无需手动输入名称.

antlr4

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