我有一个包含目录"tests"的包,我正在存储我的单元测试.我的包看起来像:
.
??? LICENSE
??? models
? ??? __init__.py
??? README.md
??? requirements.txt
??? tc.py
??? tests
? ??? db
? ? ??? test_employee.py
? ??? test_tc.py
??? todo.txt
Run Code Online (Sandbox Code Playgroud)
从我的包目录,我希望能够找到tests/test_tc.py
和tests/db/test_employee.py
.我不想安装第三方库(nose
或其他),或者必须手动构建一个TestSuite
以运行它.
当然有一种方法可以告诉unittest discover
他们一旦发现测试就不要停止寻找?python -m unittest discover -s tests
会发现tests/test_tc.py
并python -m unittest discover -s tests/db
会找到tests/db/test_employee.py
.有没有找到两者的方法?
我有以下OrderedDict:
OrderedDict([('r', 1), ('s', 1), ('a', 1), ('n', 1), ('y', 1)])
Run Code Online (Sandbox Code Playgroud)
这实际上表示单词中字母的频率.
在第一步 - 我将采用最后两个元素来创建这样的联合元组;
pair1 = list.popitem()
pair2 = list.popitem()
merge_list = (pair1[0],pair2[0])
new_pair = {}
new_pair[merge_list] = str(pair1[1] + pair2[1])
list.update(new_pair);
Run Code Online (Sandbox Code Playgroud)
这为我创建了以下OrderedList:
OrderedDict([('r', 1), ('s', 1), ('a', 1), (('y', 'n'), '2')])
Run Code Online (Sandbox Code Playgroud)
我现在想迭代元素,每次取最后三个元素并根据值的较低总和决定什么是union对象.
例如,上面的列表将转向;
OrderedDict([('r', 1), (('s', 'a'), '2'), (('y', 'n'), '2')])
Run Code Online (Sandbox Code Playgroud)
但以上是:
OrderedDict([ ('r', 1), ('s', 2), ('a', 1), (('y', 'n'), '2')])
Run Code Online (Sandbox Code Playgroud)
结果将是:
OrderedDict([('r', 1), ('s', 2), (('a','y', 'n'), '3')])
Run Code Online (Sandbox Code Playgroud)
因为我希望左边的那些值更小
我试图自己做,但不明白如何在OrderedDict上从头到尾迭代.
我该怎么做?
EDITED 回答评论:
我在一个句子中得到一个字母频率字典:
{ 's':1, …
Run Code Online (Sandbox Code Playgroud) 真的是一个语义问题.
直到最近,如果我不得不对结构进行任何类型检查,我会使用type(obj) is list
et.人.然而,自从加入SO后,我注意到每个人(我的意思是每个人)都使用了isinstance(obj,list)
.它们似乎是同义词,并且timeit
在它们之间显示出几乎相同的速度.
def a(): return type(list()) is list
def b(): return isinstance(list(),list)
from timeit import timeit
timeit(a)
# 0.5239454597495582
timeit(b)
# 0.5021292075273176
Run Code Online (Sandbox Code Playgroud)
事实上甚至dis
同意他们是同义词,除了type is
'sCOMPARE_OP
from dis import dis
dis(a)
# 2 0 LOAD_GLOBAL 0 (type)
# 3 LOAD_GLOBAL 1 (list)
# 6 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
# 9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
# 12 LOAD_GLOBAL 1 (list)
# 15 …
Run Code Online (Sandbox Code Playgroud) 我遇到了一个相当复杂的Python模块,它不会返回有用的错误代码(它实际上无法安静地失败).但是,它调用的底层C库设置了errno.
通常errno来自OSError属性,但由于我没有异常,我无法得到它.
使用ctypes,libc.errno不起作用,因为errno是GNU libc中的一个宏.Python 2.6有一些功能,但Debian仍然使用Python 2.5.将C模块插入我的纯Python程序只是为了阅读errno令我感到厌恶.
有没有办法访问errno?只有Linux的解决方案很好,因为被包装的库是仅限Linux的.我也不必担心线程,因为我在运行失败的时候只运行一个线程.
有很多人围绕到最近的十分钟的例子,但我无法弄清楚四舍五入到最接近的六分之一的逻辑.我认为这将是一个转换几个数字的问题,但我不能让它工作.
我正在使用的代码位于我的Github.我得到的块甚至没有接近工作(不会给出任何输出)是:
def companyTimer():
if minutes % 6 > .5:
companyMinutes = minutes + 1
elif minutes % 6 < 5:
companyMinutes = minutes - 1
else:
companyMinutes = minutes
print companyMinutes
Run Code Online (Sandbox Code Playgroud)
现在看一下,我看到我的逻辑是不正确的 - 即使它正在工作,代码的加1和减1分是没有意义的.
无论如何,我不知道如何解决这个问题 - 有人能指出我正确的方向吗?
PS - 这是我在工作中为个人使用而制作的东西..不要求我的工作帮助,但这将帮助我跟踪我的工作时间.不希望有任何问题.
谢谢!
我被困在使用Python 2.6,我需要使用TLS 1.2发送一个帖子请求.Python 2.6的requests
库是否支持TLS 1.2?如何确保/验证请求是通过TLS1.2而不是其他版本进行的?
样本请求是
r=requests.post(url,data=payload,verify=False)
Run Code Online (Sandbox Code Playgroud)
在论坛的某个地方,我开始知道我们需要编译pyOpenSSL
来支持这一点.有没有更简单的方法?
我只是写了一些我想做的代码:
def foo(container)
return any((some_obj.attr <= 0 for some_obj in container))
Run Code Online (Sandbox Code Playgroud)
其中,foo
将返回第一个some_obj
地方some_obj.attr
是零或更低.我想,另一种选择是
def foo(container):
return next((some_obj for some_obj in container if some_obj.attr <= 0), False)
Run Code Online (Sandbox Code Playgroud)
但这感觉非常hacky.
我最终写出来了,但我不喜欢它有多深入嵌套.
def foo(container):
for some_obj in container:
if some_obj.attr <= 0:
return some_obj
return False
Run Code Online (Sandbox Code Playgroud)
澄清container
一下:在这种情况下,可能不超过6个对象(通常是2个对象),尽管一般情况更有用.我也试图优化阅读的简易性,而不是性能.
有没有比这更好的构造?
我发现自己需要迭代一个由字典组成的列表,我需要,每次迭代,我正在迭代的字典的名称.
这是一个MWE(这个例子的内容与这个例子无关):
dict1 = {...}
dicta = {...}
dict666 = {...}
dict_list = [dict1, dicta, dict666]
for dc in dict_list:
# Insert command that should replace ???
print 'The name of the dictionary is: ', ???
Run Code Online (Sandbox Code Playgroud)
如果我只是dc
在哪里使用???
,它将打印字典的全部内容.如何获取正在使用的字典的名称?
我正在尝试抓一个论坛讨论并将其导出为csv文件,其中包含"thread title","user"和"post"等行,其中后者是每个人的实际论坛帖子.
我是Python和BeautifulSoup的初学者,所以我很难用这个!
我目前的问题是所有文本在csv文件中每行被拆分为一个字符.那里有谁可以帮助我吗?如果有人能帮我一把,真是太棒了!
这是我一直在使用的代码:
from bs4 import BeautifulSoup
import csv
import urllib2
f = urllib2.urlopen("https://silkroad5v7dywlc.onion.to/index.php?action=printpage;topic=28536.0")
soup = BeautifulSoup(f)
b = soup.get_text().encode("utf-8").strip() #the posts contain non-ascii words, so I had to do this
writer = csv.writer(open('silkroad.csv', 'w'))
writer.writerows(b)
Run Code Online (Sandbox Code Playgroud) 我想了解为什么这段代码有效:
class MyClass(object):
def f(self): print "Hello"
ff = f
def g(self): self.ff()
MyClass().g()
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
class MyClass(object):
def f(self): print "Hello"
ff = f,
def g(self): self.ff[0]()
MyClass().g()
Run Code Online (Sandbox Code Playgroud)
因为它需要一个参数self.ff[0](self)
:
TypeError: f() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
是不是self.ff[0] == self.f
像以前那样self.ff == self.f
?
python ×9
python-2.7 ×2
datetime ×1
dictionary ×1
errno ×1
linux ×1
python-2.5 ×1
python-2.6 ×1
python-3.3 ×1
request ×1
ssl ×1
typechecking ×1