相关疑难解决方法(0)

Python中的"at"(@)符号有什么作用?

我正在看一些使用该@符号的Python代码,但我不知道它的作用.我也不知道搜索Python文档会搜索什么,或者当@包含符号时Google不会返回相关结果.

python syntax python-decorators

501
推荐指数
12
解决办法
26万
查看次数

带参数的装饰器?

我有装饰器传递变量'insurance_mode'的问题.我会通过以下装饰器声明来做到这一点:

 @execute_complete_reservation(True)
 def test_booking_gta_object(self):
     self.test_select_gta_object()
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这种说法不起作用.也许有更好的方法可以解决这个问题.

def execute_complete_reservation(test_case,insurance_mode):
    def inner_function(self,*args,**kwargs):
        self.test_create_qsf_query()
        test_case(self,*args,**kwargs)
        self.test_select_room_option()
        if insurance_mode:
            self.test_accept_insurance_crosseling()
        else:
            self.test_decline_insurance_crosseling()
        self.test_configure_pax_details()
        self.test_configure_payer_details

    return inner_function
Run Code Online (Sandbox Code Playgroud)

python decorator

361
推荐指数
11
解决办法
21万
查看次数

如果只有功能B需要功能A应该在B内定义A?

简单的例子.两种方法,一种叫另一种方法:

def method_a(arg):
    some_data = method_b(arg)

def method_b(arg):
    return some_data
Run Code Online (Sandbox Code Playgroud)

在Python中,我们可以def在另一个内部声明def.因此,如果method_b需要并且仅从中调用method_a,我应该method_b在内部声明method_a吗?像这样 :

def method_a(arg):

    def method_b(arg):
        return some_data

    some_data = method_b
Run Code Online (Sandbox Code Playgroud)

或者我应该避免这样做?

python coding-style

140
推荐指数
8
解决办法
24万
查看次数

python requests.get超时的完成响应

我正在收集网站列表的统计数据,为了简单起见,我正在使用它的请求.这是我的代码:

data=[]
websites=['http://google.com', 'http://bbc.co.uk']
for w in websites:
    r= requests.get(w, verify=False)
    data.append( (r.url, len(r.content), r.elapsed.total_seconds(), str([(l.status_code, l.url) for l in r.history]), str(r.headers.items()), str(r.cookies.items())) )
Run Code Online (Sandbox Code Playgroud)

现在,我希望requests.get在10秒后超时,这样循环就不会卡住.

这个问题之前也引起了人们的兴趣,但没有一个答案是清晰的.我将在此给予一些赏金以获得一个很好的答案.

我听说也许不使用请求是一个好主意,但那么我应该如何获得请求提供的好东西.(元组中的那些)

python timeout python-requests

134
推荐指数
11
解决办法
18万
查看次数

python标准库中的装饰器(具体为@deprecated)

我需要将例程标记为已弃用,但显然没有标准的库装饰器可供弃用.我知道它的配方和警告模块,但我的问题是:为什么这个(常见)任务没有标准的库装饰器?

附加问题:标准库中是否有标准装饰器?

python decorator

108
推荐指数
6
解决办法
5万
查看次数

Python函数作为函数参数?

Python函数可以作为另一个函数的参数吗?

说:

def myfunc(anotherfunc, extraArgs):
    # run anotherfunc and also pass the values from extraArgs to it
    pass
Run Code Online (Sandbox Code Playgroud)

所以这基本上是两个问题:

  1. 它是否允许?
  2. 如果是,如何在其他功能中使用该功能?我需要使用exec(),eval()或类似的东西吗?永远不需要弄乱它们.

BTW,extraArgs是anotherfunc参数的列表/元组.

python arguments function

103
推荐指数
4
解决办法
18万
查看次数

你能解释一下闭包(因为它们与Python有关)吗?

我一直在阅读很多关于闭包的内容,我认为我理解它们,但是没有为自己和他人蒙上阴影,我希望有人可以尽可能简洁明了地解释闭包.我正在寻找一个简单的解释,可以帮助我理解我想要使用它们的地点和原因.

python closures functional-programming

78
推荐指数
6
解决办法
1万
查看次数

在Python 2.7中获得执行代码块的时间

我想测量在Python程序中评估代码块所花费的时间,可能在用户CPU时间,系统CPU时间和已用时间之间进行分离.

我知道timeit模块,但是我有很多自编函数,在设置过程中传递它们并不容易.

我宁愿有一些可以使用的东西,如:

#up to here I have done something....
start_counting() #or whatever command used to mark that I want to measure
                   #the time elapsed in the next rows
# code I want to evaluate
user,system,elapsed = stop_counting() #or whatever command says:
                                      #stop the timer and return the times
Run Code Online (Sandbox Code Playgroud)

用户和系统CPU时间不是必需的(虽然我想测量它们),但是对于经过的时间我希望能够做这样的事情,而不是使用复杂的命令或模块.

python profiler python-2.7

67
推荐指数
4
解决办法
8万
查看次数

装饰Python类方法 - 如何将实例传递给装饰器?

这是Python 2.5,它也是GAE,并不重要.

我有以下代码.我正在使用dec_check类作为装饰器在bar中装饰foo()方法.

class dec_check(object):

  def __init__(self, f):
    self.func = f

  def __call__(self):
    print 'In dec_check.__init__()'
    self.func()

class bar(object):

  @dec_check
  def foo(self):
    print 'In bar.foo()'

b = bar()
b.foo()
Run Code Online (Sandbox Code Playgroud)

执行此操作时,我希望看到:

In dec_check.__init__()
In bar.foo()
Run Code Online (Sandbox Code Playgroud)

但我得到" TypeError: foo() takes exactly 1 argument (0 given)"作为.foo()一种对象方法,以自我为参数.我猜测问题是bar当我执行装饰器代码时,实例并不存在.

那么如何将一个实例传递bar给装饰器类呢?

python python-decorators

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

如何防止C共享库在python中的stdout上打印?

我使用python lib导入一个在stdout上打印的C共享库.我想要一个干净的输出,以便与管道一起使用或重定向文件.打印是在python之外的共享库中完成的.

一开始,我的方法是:

# file: test.py
import os
from ctypes import *
from tempfile import mktemp

libc = CDLL("libc.so.6")

print # That's here on purpose, otherwise hello word is always printed

tempfile = open(mktemp(),'w')
savestdout = os.dup(1)
os.close(1)
if os.dup(tempfile.fileno()) != 1:
    assert False, "couldn't redirect stdout - dup() error"

# let's pretend this is a call to my library
libc.printf("hello world\n")

os.close(1)
os.dup(savestdout)
os.close(savestdout)
Run Code Online (Sandbox Code Playgroud)

第一种方法是半工作:
- 由于某种原因,它在移动stdout之前需要一个"print"语句,否则总是打印hello word.因此,它将打印一个空行而不是库通常输出的所有模糊.
- 更令人讨厌,重定向到文件时失败:

$python test.py > foo && cat foo

hello world …
Run Code Online (Sandbox Code Playgroud)

python ctypes python-2.x

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