我有以下文件结构:
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
导入,所以我这样做:parse
helpers
# 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) 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
递减以考虑数组中"向下移动"的其余值以填充已移除的值留下的间隙(因此循环不会跳过某个值).
但是,for
当i
等于数组的长度时,循环结束,当删除值时,循环会变短.
myArray.length
随着循环的进行,值是否会动态减少,还是在循环开始时保存值而不是在删除值时更新?如果是后者,我该怎么做才能修复我的循环?
谢谢!
假设我有一个包含多个函数的类。
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)
然而,我不知道有这样的神奇方法。
有没有办法使类中不存在的方法重定向到另一个类?
重要的是,最终用户无需执行任何操作 - 从他们的角度来看,它应该可以正常工作。
我在一个有很多自定义异常的项目中使用 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) 我有一个从字典中获取项目的功能:
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)
我觉得我不必定义一个函数来从字典中获取值。有一些内置的方法可以做到这一点吗?
尝试将具有可选属性的类型作为可索引类型传递时,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)
不过,我不明白为什么这是必要的。根据 …
我有一个由参数方程x = r t * cos(t)
和确定的阿基米德螺线y = r t * sin(t)
。
我需要n
沿螺旋等距放置点。等距的确切定义并不重要——它只需要是近似的。
只需使用r
,t
并n
作为参数,我怎么能计算出每个等距点的坐标?
我有一个字典列表。对于每个字典,我需要将其属性之一传递给函数,然后根据该函数的结果分配一个新属性。
例如:我有一个网站的页面列表。我需要循环遍历它们,并根据 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) 我正在尝试创建一个带有可选参数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”结束时出现语法错误。
解决这个问题的正确方法是什么?
我有以下箭头功能
if( rowCheckStatuses.reduce((a, b) => a + b, 0) ){}
rowCheckStatuses
是一个1和0的数组,这个箭头函数将它们全部加起来产生一个数字.此数字用作布尔值,以确定数组中是否至少有一个"1".
问题是,我真的不明白箭头功能是如何工作的,我的IDE认为这是错误的语法,并拒绝检查我的文档的其余部分是否存在语法错误.
我如何将其转换为常规功能以缓解这两个问题?
python ×5
python-3.x ×4
javascript ×3
arrays ×1
ecmascript-6 ×1
for-loop ×1
geometry ×1
importerror ×1
lambda ×1
pytest ×1
siblings ×1
spiral ×1
syntax-error ×1
typescript ×1