相关疑难解决方法(0)

Python多行语句

with在python中创建多行的简洁方法是什么?我想在一个单独的文件中打开几个文件with,但它足够远,我想要它在多行上.像这样:

class Dummy:
    def __enter__(self): pass
    def __exit__(self, type, value, traceback): pass

with Dummy() as a, Dummy() as b,
     Dummy() as c:
    pass
Run Code Online (Sandbox Code Playgroud)

不幸的是,那是一个SyntaxError.所以我尝试了这个:

with (Dummy() as a, Dummy() as b,
      Dummy() as c):
    pass
Run Code Online (Sandbox Code Playgroud)

还有一个语法错误.但是,这有效:

with Dummy() as a, Dummy() as b,\
     Dummy() as c:
    pass
Run Code Online (Sandbox Code Playgroud)

但是,如果我想发表评论怎么办?这不起作用:

with Dummy() as a, Dummy() as b,\
     # my comment explaining why I wanted Dummy() as c\
     Dummy() as c:
    pass
Run Code Online (Sandbox Code Playgroud)

\s 的位置也没有任何明显的变化.

是否有一种干净的方法来创建with允许在其中发表评论的多行语句?

python multiline with-statement python-3.x

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

'staticmethod'对象不是可调用的开关/ case

我有这个代码:

class A(object):
    @staticmethod
    def open():
        return 123
    @staticmethod
    def proccess():
        return 456

    switch = {
        1: open,
        2: proccess,   
        }

obj = A.switch[1]()
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我不断收到错误:

TypeError: 'staticmethod' object is not callable
Run Code Online (Sandbox Code Playgroud)

怎么解决?


python

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

python一行函数定义

这必须很简单,但作为一个偶尔的python用户,与一些语法作斗争.这有效:

def perms (xs):
    for x in itertools.permutations(xs): yield list(x) 
Run Code Online (Sandbox Code Playgroud)

但这不会解析:

def perms (xs): for x in itertools.permutations(xs): yield list(x) 
Run Code Online (Sandbox Code Playgroud)

单行函数语法是否有一些限制?正文定义(for ...)可以是两行或一行,而def:可以是一行或两行,具有简单的主体,但两者结合失败.是否有排除此的语法规则?

python

26
推荐指数
3
解决办法
4万
查看次数

Auto-PEP8 通过将我的 lambda 转换为 def 函数来添加行,如何禁用这种特定的自动格式?

我正在使用 Visual Studio Code 并且 PEP8 会自动格式化我的代码的一部分,我只是在学习 lambdas 并且我有一个像这样的 3 行代码:

它来自这3 行代码:

# Lambda example
divide = lambda x, y: x/y
print(divide(10, 2))
Run Code Online (Sandbox Code Playgroud)

对于这7 行代码:

# Lambda example


def divide(x, y): return x/y


print(divide(10, 2))
Run Code Online (Sandbox Code Playgroud)

有谁知道我如何让这个程序特别不将我的 lambda 函数转换为 def 函数?

它已经很好地格式化了我的代码,所以我不想完全禁用这个自动功能,只是为了 lambda 的事情。

python pep8 autopep8

10
推荐指数
3
解决办法
2100
查看次数

Python函数检查数字是否为素数

def is_prime(num):
    lst = []
    if num > 1:
        pass
    else:
        return False
    for number in range(0, 1000000+1):
        if str(num) in str(number):
            continue
        elif str(1) in str(number):
            continue
        elif str(0) in str(number):
            continue
        lst.append(number)
    for x in lst:
        if num % num == 0 and num % 1 == 0 and not(num % x == 0):
            return True
        else:
            return False

print(is_prime(9))
Run Code Online (Sandbox Code Playgroud)

我不知道我的代码有什么问题,我找不到解决方案,程序的重点是检查数字是否是素数(素数只能被 1 和它本身整除)。for 循环似乎不起作用或什么的

python

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

def内部if/else三元表达式

有没有办法转换这个:

if counts:
    def a(l):
        return a_with_counts(l)
else:
    def a(l):
        return a_without_counts(l)
Run Code Online (Sandbox Code Playgroud)

变成三元表达?

我试过这样的事

def a(l):
    return a_with_counts(l) if counts else a_without_counts(l)
Run Code Online (Sandbox Code Playgroud)

但我不希望if counts每次打电话都要评估a(l),我想在我的方法开始时做一次,然后每次打电话时直接评估指定的功能a(l).这可能吗?

谢谢!

python conditional-operator

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

如何根据功能从另一个列表创建列表?

我想创建一个列表,其中的值对应于另一个列表。例如,如果我有:

listA = [1, 2, 3, 4, 5,...]
Run Code Online (Sandbox Code Playgroud)

我想创建另一个相同的列表,除了所有值都根据 x^2(或任何其他函数)而变化,给出:

listB = [1, 4, 9, 16,25, ...]
Run Code Online (Sandbox Code Playgroud)

我已经尝试通过执行 while 循环来做到这一点:

listA = [1, 2, 3, 4]
listB = range(1, 4, 1)
i = 0
while i <= 4:
    listB [i] = (listA [i]) ** 2
    i = i + 1
print listA
print listB
Run Code Online (Sandbox Code Playgroud)

但它只是吐出一条错误消息:

Traceback (most recent call last):
  File "/home/tim/Desktop/Python/test.py", line 5, in <module>
    listB [i] = (listA [i]) ** 2
IndexError: list assignment index out of range …
Run Code Online (Sandbox Code Playgroud)

python list

-3
推荐指数
2
解决办法
4615
查看次数

PEP 8警告:“ defaultdict lambda表达式不使用lambda表达式,请使用def”

我正在使用下面的python代码创建字典。但是我收到dct_structure变量的一个PEP 8警告。警告是:do not use a lambda expression use a def

from collections import defaultdict

dct_structure = lambda: defaultdict(dct_structure)
dct = dct_structure()
dct['protocol']['tcp'] = 'reliable'
dct['protocol']['udp'] = 'unreliable'
Run Code Online (Sandbox Code Playgroud)

我对python lambda表达式还不满意。因此,任何人都可以帮助我为以下两行python代码定义函数以避免PEP警告。

dct_structure = lambda: defaultdict(dct_structure)
dct = dct_structure()
Run Code Online (Sandbox Code Playgroud)

python lambda defaultdict

-5
推荐指数
1
解决办法
3349
查看次数