小编Tra*_*ggs的帖子

大多数pythonic方法创建大小为N的字节()具有非零初始值?

我可以做点什么

initialValue = 0x42
width = 113
someBytes = bytes([initialValue] * width)
Run Code Online (Sandbox Code Playgroud)

这浪费时间创建一个中间列表,只是为了扔掉它.

要么

someBytes = bytearray(width)
for n in range(width):
  someBytes[n] = initialValue
Run Code Online (Sandbox Code Playgroud)

但是这是非常不起作用的,并且以零的初始值开始,这将立即被替换,并且我需要使用bytearray来使分配工作.

是否有更多python /简单/简洁的方法来实现这一目标?

(python3顺便说一句)

跟进:

我最终使用了这种bytes([initialValue]) * width方法.我认为唯一"不太明显"的是需要使用一个短期状态的常规列表来创建一个具有初始值的字节数组,但这与宽度分配无关,并且与其他一些一致python集合.

我确实做了一些有趣的时机.可以预期,拉伸的字节比从拉伸列表创建的字节更快.

>>> timeit("bytes([initial]) * width",
...  "width = 256; initial = 0x42", number=100000)
0.11861954815685749
Run Code Online (Sandbox Code Playgroud)

VS

>>> timeit("bytes([initial] * width)",
...   "width = 256; initial = 0x42", number=100000)
0.5535310138948262
Run Code Online (Sandbox Code Playgroud)

随着大小的width增加,差异变得越来越明显.我尝试的另一种有趣的方法是使用理解来创造.我很惊讶这是多么缓慢:

>>> timeit("bytes(initial for _ in range(width))",
...   "width = 256; initial = 0x42", number=100000)
2.3924577180296183 …
Run Code Online (Sandbox Code Playgroud)

python list python-3.x

2
推荐指数
1
解决办法
244
查看次数

为什么Array.sorted()没有默认闭包?

给出以下游乐场片段

let list = [4.2, 1.3, 7.8]
let list1 = list.sorted() { $0 < $1 }
let list2 = sorted(list)
let list3 = sorted(list) { $0 < $1}
Run Code Online (Sandbox Code Playgroud)

我可以使用两种形式的自由函数sorted,有或没有闭包.但是Array.sorted()方法没有这样的机会.有没有理由不这样做?苹果公司不能宣布这样吗?

func sorted(isOrderedBefore: (<T>, <t>) -> Bool = { $0 < $1 }) { ...
Run Code Online (Sandbox Code Playgroud)

(作为一个附带问题,为什么操场显示(3 times)在右侧,而不是结果列表list1list3?)

closures swift

1
推荐指数
1
解决办法
163
查看次数

来自hex String的NSData?

我知道这个问题已经被要求了ObjectiveC,但我Swift还没有足够强大的音译char *bytes.

所以给定

let string = "600DBEEF"
Run Code Online (Sandbox Code Playgroud)

如何创建NSData代表这4个字节的数字:60 0D BE EF

string hex nsdata swift swift2

1
推荐指数
1
解决办法
2154
查看次数

如何从一个范围内的数字插入到另一个范围内的相应值?

我目前收到的 Int 可能介于 0 和 180,000 之间。我需要改变它以适应 0 到 3000。我知道在其他语言中你可以使用类似的东西

Map(min1,max1,min2,max2,input)
Run Code Online (Sandbox Code Playgroud)

我似乎无法在 swift 中找到类似的东西。这是我目前拥有的,但它总是返回 0。

var newY = [(Int)(input)]
newY = newY.map {_ in 0 * 3000}
print(newY[0])
Run Code Online (Sandbox Code Playgroud)

我想我使用了错误的功能。我以前从未在 Swift 中做过任何映射。

integer range swift

1
推荐指数
1
解决办法
2655
查看次数

是否可以在运行时在M0 +上设置ISR处理程序

我的SAMD21 ARM M0 +有一个"默认"resetVectors.c文件.它有一些看起来像:

__attribute__ ((section(".vectors")))
const DeviceVectors exception_table = {
    ...
};
Run Code Online (Sandbox Code Playgroud)

在其中定义不同的处理程序存根的位置.出于测试目的,我想使用其中一个未使用的外设IRQ.

默认情况下,未使用的设置为NULL地址.我已向自己证明我可以修改该文件,并在编译时更改我未使用的IRQ(21)以触发处理程序.但是,是否可以在编译时间之外完成此操作?

我观察到该表似乎是基于偏移0.所以我尝试了这个:

DeviceVectors *table = 0x0000000;
table->pvReserved21 = PV21Handler;
Run Code Online (Sandbox Code Playgroud)

但这只是挂板.是否有动态方式在运行时分配处理程序?

c embedded arm isr

1
推荐指数
1
解决办法
197
查看次数

pprint与十六进制数字

我使用了许多类似json的词组.pprint构建它们很方便.有没有办法使pprint输出中的所有整数以十六进制而不是十进制打印?

例如,而不是:

{66: 'far',
 99: 'Bottles of the beer on the wall',
 '12': 4277009102,
 'boo': 21,
 'pprint': [16, 32, 48, 64, 80, 96, 112, 128]}
Run Code Online (Sandbox Code Playgroud)

我宁愿看到:

{0x42: 'far',
 0x63: 'Bottles of the beer on the wall',
 '12': 0xFEEDFACE,
 'boo': 0x15,
 'pprint': [0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80]}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过定制PrettyPrinter,但无济于事,我能够导致上述情况,PrettyPrinter.format()处理整数似乎只适用于某些整数:

class MyPrettyPrinter(PrettyPrinter):
    def format(self, object, context, maxlevels, level):
        if isinstance(object, int):
            return '0x{:X}'.format(object), True, False
        return super().format(object, context, maxlevels, level)
Run Code Online (Sandbox Code Playgroud)

以上课程产生

{0x42: 'far',
 0x63: …
Run Code Online (Sandbox Code Playgroud)

python hex python-3.x pprint

1
推荐指数
1
解决办法
383
查看次数

是否有一种惯用的方法来让(辅助)构造函数为Kotlin中的主要构造函数派生值?

我有一个简单的Kotlin类:

data class ValveSpan(val begin:Duration, val end:Duration, val key:String):Comparable<ValveSpan> {
    ...
}
Run Code Online (Sandbox Code Playgroud)

因为它是一个数据类,所以我必须有一个主构造函数,其中包含一个或多个值.这很好,我喜欢它的简洁表达.

但是当我想创建一个辅助构造函数来填充doc之类的对象(类似于JSON)时,它会变得奇怪:

constructor(doc:TSON):this(doc["begin"].duration!!, doc["end"].duration!!, doc["valves"].sequence!!.first()!!.string!!) {
    // do nothing here, because, uh, I had to do it all in the delegated primary????
}
Run Code Online (Sandbox Code Playgroud)

基本上,次级构造的意图,是取输入,计算一些值作为主要的构造,然后调用与这些值的初级.但似乎我必须在主构造函数中内联它们.随着派生变得越来越复杂,越来越复杂.我真的很想写下这样的东西:

constructor(doc:TSON) {
    var sanitizedBegin =  doc["begin"].duration ?: 0.minutes
    var sanitizedEnd = doc["end"].duration ?: 0.minutes
    var sanitizedKey = doc["valves"].sequence?.firstOrNull()?.string ?: ""
    primaryConstructor(sanitizedBegin, sanitizedEnd, sanitizedKey)
}
Run Code Online (Sandbox Code Playgroud)

有没有办法委托给主构造函数,而不必进行内联的所有桥接计算?

kotlin

1
推荐指数
1
解决办法
43
查看次数

如何因仅一个元素的可见性变化而对 Jetpack Compose Row 的所有位置进行动画处理?

我正在尝试组合一个看起来像 iOS 就地表格编辑的效果。当处于“编辑模式”时,选择控件滑入每行的一侧。我在选择按钮上使用简单的 AnimatedVisibility 并调整进入/退出参数来完成此操作。按钮本身看起来不错,但我行中的其他元素也没有为它们的位置设置动画。他们只是在最后突然更新?当我进入和退出“编辑模式”时,我应该如何获得“选择按钮滑入并且其他小部件聚集一点以腾出空间”效果?

我当前用于行的代码如下所示:

Row(
    modifier = Modifier
        .fillMaxWidth()
        .padding(vertical = 10.dp),
    verticalAlignment = Alignment.CenterVertically
) {
    Icon( ... )
    Spacer(modifier = Modifier.width(4.dp))
    Text(text = keyInfo.name, modifier = Modifier.weight(1.0f), maxLines = 1)
    Spacer(modifier = Modifier.width(10.dp))
    SettingsLabel(text = keyInfo.created.shortPrinted())
    AnimatedVisibility(visible = allowSelection,
        enter = slideInHorizontally(initialOffsetX = { w -> w }),
        exit = slideOutHorizontally(targetOffsetX = { w -> w })
    ) {
        IconButton(
            onClick = onSelectionClick, modifier = Modifier
                .padding(start = 16.dp)
                .size(28.dp)
        ) {
            when (isSelected) {
                true …
Run Code Online (Sandbox Code Playgroud)

kotlin android-jetpack-compose jetpack-compose-animation

1
推荐指数
1
解决办法
1225
查看次数

感到困惑的是NSMutableArray sortUsingDescriptors:exception

以下方法:

- (NSMutableArray*) timeSortedBegins {
    NSMutableArray* begins = [self.spans valueForKey: @"begin"];
    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey: @"cycleOffsetObject" ascending: YES];
    [begins sortUsingDescriptors: @[sort]];
    return begins;
}
Run Code Online (Sandbox Code Playgroud)

抛出此运行时异常:

2014-03-21 14:41:32.482 myValve[1741:60b] -[__NSArrayI sortUsingDescriptors:]: unrecognized selector sent to instance 0x16d7bc20
2014-03-21 14:41:32.484 myValve[1741:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI sortUsingDescriptors:]: unrecognized selector sent to instance 0x16d7bc20'
Run Code Online (Sandbox Code Playgroud)

我已经使用断点来说服自己begins数组确实已经满了(在这种情况下为两个)WEAnchor*对象.该对象实现了以下两种方法:

- (NSTimeInterval) cycleOffset {
    return self.offset + (self.datum ? self.datum.cycleOffset : 0.0);
}

- (NSNumber*) cycleOffsetObject {
    return [NSNumber …
Run Code Online (Sandbox Code Playgroud)

sorting objective-c nsmutablearray nssortdescriptor ios

0
推荐指数
1
解决办法
2112
查看次数

Smalltalk x raiseTo:y错误

美好的一天!我明天有报告,我正在审查Smalltalk.我试图使用该raisedTo:方法,但它给了我这个错误:

 MessageNotUnderstood: Character>>raisedTo:
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

|x y z|
x := UIManager default request: 'P1: '.
y := UIManager default request: 'P2: '.
z := x raisedTo: y.
self inform: z.
Run Code Online (Sandbox Code Playgroud)

smalltalk squeak

0
推荐指数
1
解决办法
176
查看次数

无法扩展特定类型的通用结构

想在Swift3中添加一些糖玩具.基本上,我希望能够做到这样的事情:

let randomAdjust = (-10...10).random
Run Code Online (Sandbox Code Playgroud)

为此,我决定扩展ClosedRange.但后来发现它对我的情况可能会更好,我真的只是计划在现在做Int,使用CountableClosedRange.我最近的多次尝试看起来像:

extension CountableClosedRange where Bound == Int {
    var random:Int {
        return Int(arc4random_uniform(UInt32(self.count) + 1)) + self.lowerBound
    }
}
Run Code Online (Sandbox Code Playgroud)

但游乐场抱怨说:

error: same-type requirement makes generic parameter 'Bound' non-generic
extension CountableClosedRange where Bound == Int {
Run Code Online (Sandbox Code Playgroud)

我甚至都不知道它在那里告诉我什么.

swift3

0
推荐指数
1
解决办法
1574
查看次数

尝试在 Swift 中实现 ?.let 模式,有可能吗?

我一直在 Swift 和 Kotlin 之间来回移植代码。受到这个答案的启发,我一直在使用Swift?.let { } ?: run {}来替代我使用的许多地方。if let ... { } else {}

不过,我真的很喜欢 Kotlin 表达式。在我看来,它比关键字特定的if let混合物更通用。因此,为了平等起见——或者至少为了通过尝试愚蠢的实验来学习——我想我应该尝试let在 Swift 中实现这个构造。

因为let是 Swift 中的关键字,所以我立即发现我需要添加反引号,或者使用不同的名称,例如cull. 这导致了这个无法编译的代码:

extension Any {
    func cull<R>(block:(Self) -> R) -> R {
        return block(self)
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑到我的学徒水平,可能存在很多问题。但最重要的是,我被告知我无法扩展 Any(此处有更详细的解释)。

所以Any不能被扩展。我可以使用任何其他语言构造来实现它,以便我可以实现类似 Kotlin 的东西吗let?基本上:

<expression>.foo { <expressionResult> in ... }
Run Code Online (Sandbox Code Playgroud)

作为一个奖励/旁白问题,我认为即使有一种方法(我确实希望有这样我可以学习),它也不会相同,因为 Kotlin 可以用于控制流,因为我可以做来自 Kotlin 的非本地返回,但不是来自 Swift 闭包。这也正确吗?

澄清

let基本上,我可以为指定类型实现 …

kotlin swift

0
推荐指数
1
解决办法
842
查看次数