小编sna*_*che的帖子

如何从python3中的同级目录导入?

我有以下文件结构:

bot
??? LICENSE.md
??? README.md
??? bot.py # <-- file that is executed from command line
??? plugins
?   ??? __init__.py
?   ??? debug.py
?   ??? parsemessages.py
??? helpers
?   ??? __init__.py
?   ??? parse.py
?   ??? greetings.py
??? commands
    ??? __init__.py
    ??? search.py
Run Code Online (Sandbox Code Playgroud)

bot.py当从命令行执行时,将加载plugins目录中的所有内容。

我想从目录plugins/parsemessages.py导入,所以我这样做:parsehelpers

# parsemessages.py
from ..helpers import parse
parse.execute("string to be parsed")
Run Code Online (Sandbox Code Playgroud)

python3 bot.py从命令行运行。

我收到以下错误:

File "/home/bot/plugins/parsemessages.py", line 2, in <module>
  from ..helpers import parse
ValueError: …
Run Code Online (Sandbox Code Playgroud)

siblings python-import importerror python-3.x

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

当循环遍历JS数组的值,并且我删除了值时,我是否需要使用while而不是for?

var myArray = [1,2,3,4,5,6,7,8,9];

function isOdd(value){
    return value % 2;
}

for(var i = 0; i < myArray.length; i++){
    if(isOdd(myArray[i])){
        myArray.splice(i,1);
        i--;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码采用任意长度的数组并检查每个值.如果数组的位满足任意条件(在这种情况下,如果它是奇数),则从数组中删除它.

Array.prototype.splice()用于从数组中删除值,然后i递减以考虑数组中"向下移动"的其余值以填充已移除的值留下的间隙(因此循环不会跳过某个值).

但是,fori等于数组的长度时,循环结束,当删除值时,循环会变短.

myArray.length随着循环的进行,值是否会动态减少,还是在循环开始时保存值而不是在删除值时更新?如果是后者,我该怎么做才能修复我的循环?

谢谢!

javascript arrays for-loop

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

当给定方法不存在时调用类中的另一个方法?

假设我有一个包含多个函数的类。

class Person:
    def __init__(self): pass
    def say(self, speech): pass
    def walk(self, destination): pass
    def jump(self): pass
Run Code Online (Sandbox Code Playgroud)

当用户实例化一个 Person 时,我希望他们能够调用该类的任何方法。如果请求的方法不存在(例如Person.dance()),则应调用默认函数。

我想这可以通过理论上的魔法方法来完成 -

class Person:
    def __init__(self): pass
    def say(self, speech): pass
    def walk(self, destination): pass
    def jump(self): pass
    def sleep(self): print("Zzz")

    def __method__(self, func):
        if func.__name__ not in ['say','walk','jump']:
            return self.sleep
        else
            return func

billy = Person()
billy.dance()
>> "Zzz"
Run Code Online (Sandbox Code Playgroud)

然而,我不知道有这样的神奇方法。

有没有办法使类中不存在的方法重定向到另一个类?

重要的是,最终用户无需执行任何操作 - 从他们的角度来看,它应该可以正常工作。

python python-3.x

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

断言异常消息?

我在一个有很多自定义异常的项目中使用 pytest。

pytest 提供了一种方便的语法来检查是否已引发异常,但是,我不知道有人断言已引发正确的异常消息。

假设我有一个CustomException打印“boo!”的东西,我怎么能断言“boo!” 确实已打印,而不是说“<unprintable CustomException object>”?

#errors.py
class CustomException(Exception):
    def __str__(self): return "ouch!"
Run Code Online (Sandbox Code Playgroud)
#test.py
import pytest, myModule

def test_custom_error(): # SHOULD FAIL
    with pytest.raises(myModule.CustomException):
        raise myModule.CustomException == "boo!"
Run Code Online (Sandbox Code Playgroud)

python pytest

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

映射字典查找

我有一个从字典中获取项目的功能:

def dict_lookup(dictionary, key):
    return dictionary[key]
Run Code Online (Sandbox Code Playgroud)

我将通过多重处理映射此函数,以从一系列长的字典中查找值:

dictlist = [{}, {}, {}]
dict_lookup_partial = functools.partial(dict_lookup, key=some_key)
with multiprocessing.Pool() as pool:
    values = pool.map(dict_lookup_partial, dictlist)
Run Code Online (Sandbox Code Playgroud)

我觉得我不必定义一个函数来从字典中获取值。有一些内置的方法可以做到这一点吗?

python

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

将具有可选属性的类型强制为可索引类型

尝试将具有可选属性的类型作为可索引类型传递时,Typescript 会引发错误:( Playground )

type Thing = {
    thing1?: string
    thing2?: string
    thing3?: number
}

const thing: Thing = {}

function processObject (obj: { [key: string]: string | number }): string {
    /* Generic object handler, not specifically for Thing */
    return "test"
}

console.assert(processObject(thing) === "test")
Run Code Online (Sandbox Code Playgroud)

这导致:

错误:“事物”类型的参数不可分配给“{[键:字符串]:字符串|”类型的参数 数字; }'。属性“thing1”与索引签名不兼容。输入'字符串| undefined' 不能分配给类型 'string | 数字'。类型 'undefined' 不能分配给类型 'string | 数字'。

当然,如果参数的类型被强制设为可选,它会起作用:

function processObject (obj: { [key: string]: string | number | undefined }): string {
    return "test"
}
Run Code Online (Sandbox Code Playgroud)

不过,我不明白为什么这是必要的。根据 …

typescript

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

沿阿基米德螺线等距放置点

我有一个由参数方程x = r t * cos(t)和确定的阿基米德螺线y = r t * sin(t)

我需要n沿螺旋等距放置点。等距的确切定义并不重要——它只需要是近似的。

只需使用rtn作为参数,我怎么能计算出每个等距点的坐标?

javascript geometry spiral parametric-equations

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

如何通过 python3 中的列表理解向字典列表添加属性?

我有一个字典列表。对于每个字典,我需要将其属性之一传递给函数,然后根据该函数的结果分配一个新属性。

例如:我有一个网站的页面列表。我需要循环遍历它们,并根据 URL 将作者姓名分配给字典中的属性。

for index, page in enumerate(pages):
    pages[index]['author'] = get_author(page['url'])
Run Code Online (Sandbox Code Playgroud)

这有效。但很混乱,而且感觉不像蟒蛇。pages[index]感觉像是我不应该在 Python 中做的事情。

有没有办法通过列表理解来做到这一点?或者其他一些更Pythonic的方式?

pages = [??? for page in pages]
Run Code Online (Sandbox Code Playgroud)

python list-comprehension python-3.x

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

如何使用 lambda 作为默认参数?

我正在尝试创建一个带有可选参数callback的函数,该参数必须是一个函数。

我希望这个函数的默认值什么都不做——即一个什么都不做的函数。对我来说似乎有意义的方式是:

do_the_thing()
do_the_thing(callback = print) # or message.respond, or log_to_file, etc

def do_the_thing(**kwargs):
    cb = kwargs.get('callback', lambda x: pass)
    # do things
    cb("Things have been done.")
Run Code Online (Sandbox Code Playgroud)

但是在“pass”结束时出现语法错误。

解决这个问题的正确方法是什么?

python lambda syntax-error python-3.x

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

将ECMAScript 6的箭头函数转换为常规函数

我有以下箭头功能

if( rowCheckStatuses.reduce((a, b) => a + b, 0) ){}

rowCheckStatuses是一个1和0的数组,这个箭头函数将它们全部加起来产生一个数字.此数字用作布尔值,以确定数组中是否至少有一个"1".

问题是,我真的不明白箭头功能是如何工作的,我的IDE认为这是错误的语法,并拒绝检查我的文档的其余部分是否存在语法错误.

我如何将其转换为常规功能以缓解这两个问题?

javascript ecmascript-6 arrow-functions

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