假设我有一个S
带字符串 的变量"1:3"
(或者就此而言"1"
,或者"1:"
或者":3"
)我希望将它用作列表 上的切片说明符L
.你不能简单地做,L[S]
因为切片所需的args是"int:int"
.
现在,我目前有一些丑陋的代码解析S
它的两个组成部分int
并处理所有边缘情况(其中4个)以提出正确的切片访问,但这只是简单的丑陋和unpythonic.
我如何优雅地使用字符串S
并将其用作切片说明符?
当我查看将参数传递给Jasper Report REST 2 API的文档时:http://community.jaspersoft.com/documentation/jasperreports-server-web-services-guide/v550/running-report-asynchronously我看到了我需要一个"参数"字典.链接中的示例显示了XML并不是那么有用,因为它不清楚具体的JSON应该是什么样子.我能找到的最接近的链接是:http://community.jaspersoft.com/documentation/jasperreports-server-web-services-guide/v56/modifying-report-parameters.现在,我将相应的内容发送到服务器(以及我能想到的所有其他排列),然后我继续得到"400 Client Error:Bad Request".我真的可以使用python代码的确切示例来生成所需的"参数"参数,例如"my_parameter_1 ="test_value_1".
这是我目前的POST数据(为简洁起见,缺少一些参数).我知道这是正确的,因为如果我省略"参数"参数,报告工作正常:
{
'outputFormat': 'pdf',
'parameters': [{'name': 'ReportID', 'value': ['my_value_1']}],
'async': 'true',
'pages': '',
'interactive': 'false'
}
Run Code Online (Sandbox Code Playgroud) 我试图在运行时向现有类添加一个新类(使用"type(...)").我也试图覆盖新的类'__getattr__,以便我可以对不在新类中的属性执行自己的行为.例如,我有类foo,我添加类"工具",我希望foo.tool.test做我自己的事情.下面的代码有效但只是部分代码.如果我显式调用__getattr__,它可以工作(参见第一次打印),但是当我引用foo.tool.test时,我的被覆盖的__getattr__没有被调用,并且引发了一个属性错误.
非常感谢您的帮助.
class Foo(object):
def __init__(self):
self.NameList=[]
# add new class to ourself
self.tool = type('tool', (object,), {} )
# override new class' __getattr__ with call to ourself
setattr(self.tool, "__getattr__", self.__getattr__ )
# add one well known test name for now
self.NameList.append( "test" )
# should be called by our newly added "tool" object but is only called sometimes...
def __getattr__(self, attr):
# print( "__getattr__: %s" % attr )
if( attr in self.NameList ):
return( 99 )
raise AttributeError("--%r object …
Run Code Online (Sandbox Code Playgroud) 假设我有一个名单.我希望能够动态地将这些实例函数添加到类实例中.我知道类型.MethodType但我从这里到这里有点新手.基本上我想做的是:
class foo( object ):
def __init__(self):
pass
f = foo()
names = ["a","b","c"]
for name in names:
add name() to f # not sure what to do here
# what I wanted added to instance "f" is this for each name:
def name(self, *args, **kwargs):
print( "My name is %s" % inspect.stack()[0][3] )
print( "__called, args=%r, **kwargs=%r" % (args, kwargs) )
f.a() # ==> calls f.a()
f.b(1,2,3) # calls f.b(1,2,3 )and so on
Run Code Online (Sandbox Code Playgroud)