我想检查一个Python程序,如果一个单词在英语词典中.
我相信nltk wordnet界面可能是要走的路,但我不知道如何将它用于这么简单的任务.
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
Run Code Online (Sandbox Code Playgroud)
在将来,我可能想检查一个单词的单数形式是否在字典中(例如,属性 - >属性 - >英语单词).我怎么做到这一点?
Python中是否有一种快速的方法来替换字符串,但是从头开始,而不是从头开始replace?例如:
>>> def rreplace(old, new, occurrence)
>>> ... # Code to replace the last occurrences of old by new
>>> '<div><div>Hello</div></div>'.rreplace('</div>','</bad>',1)
>>> '<div><div>Hello</div></bad>'
Run Code Online (Sandbox Code Playgroud) 是否可以在Python中重载from/import语句?
例如,假设jvm_object是一个类的实例JVM,是否可以编写此代码:
class JVM(object):
def import_func(self, cls):
return something...
jvm = JVM()
# would invoke JVM.import_func
from jvm import Foo
Run Code Online (Sandbox Code Playgroud) 我想基于它可能是类似地图的对象或类似序列的对象的事实对参数执行操作.我知道没有策略可以100%可靠地进行类型检查,但我正在寻找一个强大的解决方案.
基于这个答案,我知道如何确定某些东西是否是一个序列,我可以在检查对象是否是地图后进行检查.
def ismap(arg):
# How to implement this?
def isseq(arg):
return hasattr(arg,"__iter__")
def operation(arg):
if ismap(arg):
# Do something with a dict-like object
elif isseq(arg):
# Do something with a sequence-like object
else:
# Do something else
Run Code Online (Sandbox Code Playgroud)
因为序列可以看作键是整数的映射,我应该尝试找到一个不是整数的键吗?或者我可以查看字符串表示?要么...?
UPDATE
我选择了SilentGhost的答案,因为它看起来是最"正确"的答案,但根据我的需要,这是我最终实现的解决方案:
if hasattr(arg, 'keys') and hasattr(arg, '__getitem__'):
# Do something with a map
elif hasattr(arg, '__iter__'):
# Do something with a sequence/iterable
else:
# Do something else
Run Code Online (Sandbox Code Playgroud)
本质上,我不想依赖ABC,因为有许多自定义类的行为类似于序列和字典,但仍然没有扩展python集合ABCs(参见@Manoj评论).我认为键属性(由删除他/她的答案的人提到)对映射是一个很好的检查.
扩展序列和映射ABC的类也将与此解决方案一起使用.
我想在文本模式下创建一个可滚动的屏幕,就像在解释器中键入 help(object) 时获得的屏幕一样。是否有我可以使用的跨平台模块来轻松实现这一点?
例如:
>>> def jhelp(object):
>>> text = # get text for object
>>> display_text(text) # display a scrollable screen. How do I do this?
>>>
>>> l = [1,2,3]
>>> jhelp(l)
Run Code Online (Sandbox Code Playgroud) 我想获得一个在运行时可用且与简单名称匹配的类列表.
例如:
public List<String> getFQNs(String simpleName) {
...
}
// Would return ["java.awt.List","java.util.List"]
List<String> fqns = getFQNs("List")
Run Code Online (Sandbox Code Playgroud)
是否有一个可以有效地执行此操作的库,或者我是否必须手动遍历每个类加载器中的所有类?这样做的正确方法是什么?
谢谢!
UPDATE
一位回答者问我为什么要这样做.本质上,我想实现一个类似于"组织导入/自动导入"的功能,但在运行时可用.我不介意解决方案是否相对较慢(特别是如果我可以构建一个缓存,以便后续查询变得更快),如果它只是最好的努力.例如,我不介意我是否得到动态生成的类.
更新2
我必须设计自己的解决方案(见下文):它使用其他响应者提供的一些提示,但我开始意识到它需要可扩展以处理各种环境.无法在运行时自动遍历所有类加载器,因此您必须依赖常规和特定于域的策略来获取有用的类列表.
当我创建一个新的virtualenv时,virtualenv .virtualenvs/my_env只有一小部分标准python模块被复制/链接到新的virtualenv.
例如,当我ls -l在.virtualenvs/my_env/lib/python2.6中进行时,我看到:
...
... os.py -> /usr/lib/python2.6/os.py
... os.pyc -> /usr/lib/python2.6/os.pyc
Run Code Online (Sandbox Code Playgroud)
但模块喜欢shutil和urllib2不复制,即使它们在/usr/lib/python2.6/shutil.py.我正在使用Ubuntu 9.10.
这是预期的行为吗?如何在virtualenv中安装shutil等模块(我在pypi上找不到这些模块)?
我想有效地计算过滤列表的大小,即,我不想将整个过滤列表保留在内存中,我只想获得它的大小.是否有比使用for-loop计算大小更"pythonic"的方式?
例如:
my_list = [1,2,3,4]
# this loads the entire **filtered** list in memory
size_of_filtered_list = len([item for item in my_list if item % 2 == 0])
# is there a more pythonic way than this?
size_of_filtered_list = 0
for item in my_list:
if item % 2 == 0:
size_of_filtered_list += 1
Run Code Online (Sandbox Code Playgroud)
UPDATE
如果我不清楚,请道歉.虽然第一个列表(例如,my_list)已经在内存中,但我不想创建包含已过滤元素的额外列表来计算它们.我知道发电机和总和,但只是没有连接点......谢谢你的答案.
python ×7
classloader ×1
dictionary ×1
import ×1
java ×1
nltk ×1
reflection ×1
sequence ×1
string ×1
text ×1
virtualenv ×1
wordnet ×1