小编Ale*_*nin的帖子

Python中全局变量和局部变量的速度

我猜每个人都知道:

Python比全局变量更有效地访问局部变量

好的,这是真的:

oldlist = [str(i) for i in range(500)]
oldlist1 = [i for i in range(500)]

%%timeit
newlist = []
for word in oldlist:
    newlist.append(word.upper())
Run Code Online (Sandbox Code Playgroud)

10000循环,最佳3:每循环178μs

%%timeit
def func():
    newlist = []
    for word in oldlist:
        newlist.append(word.upper())
    return newlist
newlist = func()
Run Code Online (Sandbox Code Playgroud)

10000次循环,最佳3次:每次循环93.2μs

不幸的是,看起来它不是全球规则,而是特例:

%%timeit
newlist = []
for nr in oldlist1:
    newlist.append(nr * nr)
Run Code Online (Sandbox Code Playgroud)

10000个循环,最佳3:每循环60.3μs

%%timeit
def func():
    newlist = []
    for nr in oldlist1:
        newlist.append(nr * nr)
    return newlist
newlist = func()
Run Code Online (Sandbox Code Playgroud)

10000个循环,最佳3:每循环60.5μs

如何解释这些测试?

python optimization global-variables local-variables

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

OS X 上的 Rust 和加载器路径(@rpath、@loader_path)

我正在尝试解决使用 Rust 加载外国库的问题。

输入:

我有一个可执行文件rtest和一个 dylib libcpp2rs.dylib。该库通过 FFI 链接到可执行文件:

#[link(name="cpp2rs")]
extern { ... }
Run Code Online (Sandbox Code Playgroud)

我的build.rs文件(我传递了一个带libcpp2rs.dylib位置的额外参数):

pub fn main() {
    println!("cargo:rustc-link-search=native=./cpplib/bin");
}
Run Code Online (Sandbox Code Playgroud)

还有我的Cargo.toml文件:

[package]
name = "rtest"
version = "0.1.0"
authors = ["astavonin"]
build = "build.rs"
rpath = true
[dependencies]
libc = "0.2.10"
Run Code Online (Sandbox Code Playgroud)

我使用cargo build命令进行编译。

输出:

otool向我显示库将通过以下方式加载RPATH

> otool -L rtest
rtest:
@rpath/libcpp2rs.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
Run Code Online (Sandbox Code Playgroud)

但同时 …

macos rpath rust rust-cargo

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

XNU在Kext中表现出色

我正在研究应该可以访问struct proc->p_pid字段的Kext .问题是结构只在XNU源中定义,所以我incomplete definition of type 'struct proc'在编译时遇到了错误.

从我的角度来看,将XNU标题包含到我自己的项目中是一个难闻的解决方案,但是另一种方法是什么?是复制并将结构粘贴到我自己的代码中吗?

macos kernel-extension xnu

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

Python函数调用速度

我真的很困惑Python中的函数调用速度.第一和第二种情况,没有任何意外:

%timeit reduce(lambda res, x: res+x, range(1000))
Run Code Online (Sandbox Code Playgroud)

10000循环,最佳3:每循环150μs

def my_add(res, x):
return res + x
%timeit reduce(my_add, range(1000))
Run Code Online (Sandbox Code Playgroud)

10000循环,最佳3:每循环148μs

但第三种情况对我来说很奇怪:

from operator import add
%timeit reduce(add, range(1000))
Run Code Online (Sandbox Code Playgroud)

10000个循环,最佳3:每循环80.1μs

同时:

%timeit add(10, 100)
%timeit 10 + 100

10000000 loops, best of 3: 94.3 ns per loop
100000000 loops, best of 3: 14.7 ns per loop
Run Code Online (Sandbox Code Playgroud)

那么,为什么第三种情况会加速约50%呢?

python optimization

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

别名转换

我有struct AccessToken外部库的一部分,我自己使用该库.我想返回这种类型的值,但我没有看到为什么我的内部实现应该从外部可见的任何原因.类型别名看起来很棒.

type AccessToken oauth.AccessToken
Run Code Online (Sandbox Code Playgroud)

但是我在尝试下一步时遇到错误:

func Auth(key string, secret string) *AccessToken {
...
    var token oauth.AccessToken = AuthorizeToken(...)
    return AccessToken(*token)
}
Run Code Online (Sandbox Code Playgroud)

错误:

cannot use AccessToken(*accessToken) (type AccessToken) as type *AccessToken in return argument
Run Code Online (Sandbox Code Playgroud)

很明显,我可以通过恶魔复制结构字段.但有没有办法使用别名?

casting go

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