用于调用接受* args的函数的python3.5 +语法是什么,其中* args引用具有多个项的变量。
我是自学python;我不禁想到我错过了一些关于* args如何运作的基本内容。请随意给我一些必要的阅读。
使用operator.itemgetter(* items)按列对列表进行排序时,如何可变地提供*项目?
import operator
records = [
['0055613893 ', 'AP', 'BU', 'AA', '00005000012404R'],
['0048303110 ', 'MM', 'BU', 'AB', '00028230031385R'],
['0044285346 ', 'AP', 'BU', 'AA', '00062240050078R'],
['0048303108 ', 'MO', 'BU', 'AF', '00047780036604R'],
['0048751228 ', 'AP', 'ME', 'AC', '00000750013177R'],
['0045059521 ', 'AR', 'YT', 'AB', '00005430014570R']
]
如果我想按第3列排序这个特定的记录集,然后按第1列排序,我会:
records.sort(key=operator.itemgetter(3, 1))
当然,这可以像人们期望的那样发挥作用。
我得到的是如何可变地为itemgetter()提供“3,1”?
即:
indices = {insert some code here to provide itemgetter() what it needs}
records.sort(key=operator.itemgetter(indices))
我试过了:
元组:
indices = (3, 1)
要么
indices = 3, 1
TypeError: list indices must be integers or slices, not tuple
列表:
indices = [3, 1]
TypeError: list indices must be integers or slices, not list
对基础知识感到谦卑永远不会太晚。提前感谢您协助填补我的python基础中的这个空白。
答案 0 :(得分:1)
假设你有
var scope;
var controller;
var mockedMyFactory;
beforeEach(module('my'));
beforeEach(module('my', function ($provide) {
mockedMyFactory = {
getThingys: jasmine.createSpy()
};
$provide.value('myFactory', mockedMyFactory);
}));
beforeEach(inject(function ($controller, $rootScope, myFactory) {
scope = $rootScope.$new();
controller = $controller('MyCtrl', {
$scope: scope, myFactory
});
}));
describe('this', function () {
it('is a dummy spec', function () {
expect(2 + 2).toEqual(4);
});
});
您可以使用Python解包来为函数调用提供3和1:
indices = [3, 1]
这相当于
itemgetter(*indices)
我不确定它的Python版本是什么。这是快速变化的部分之一,因此如果您使用旧版本,可能需要做一些阅读。