小编use*_*ica的帖子

F# 四舍五入到特定的小数位数

例如,我可以使用System.Math.Round((float),2)将浮点四舍五入到最接近的小数点后两位,但是在 F# 中是否有可以将浮点四舍五入到小数点后两位的方法?谢谢

f# rounding

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

随处替换一个python对象

如何在各处使用另一个对象替换python对象?

我有两个课,SimpleObjectFancyObject。我创建了一个SimpleObject,并且有多个引用。现在,我想创建一个FancyObject,并使所有这些引用都指向新对象。

a = SimpleObject()
some_list.append(a)
b = FancyObject()
Run Code Online (Sandbox Code Playgroud)

a = b不是我想要的,只是改变了要指向的内容。我阅读了以下内容,但没有用。我收到一个错误“属性__dict__不可写”:

a.__dict__ = b.__dict__
Run Code Online (Sandbox Code Playgroud)

我想要的是(pseudo-C)的等效项:

*a = *b
Run Code Online (Sandbox Code Playgroud)

我知道这很骇人,但是有什么办法可以做到这一点?

python python-2.7

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

Python - numpy mgrid 和重塑

有人可以向我解释这段代码的第二行是做什么的吗?

objp = np.zeros((48,3), np.float32)
objp[:,:2] = np.mgrid[0:8,0:6].T.reshape(-1,2)
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释代码的 np.mgrid[0:8,0:6] 部分到底在做什么以及代码的 T.reshape(-1,2) 部分到底在做什么吗?

谢谢,干得好!

numpy

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

在没有内置函数或程序集的情况下在C中实现setjmp和longjmp(获取不正确的返回值)

我正在尝试测试我的两个函数,它们模仿setjmp和longjmp用于作业 - 这是非常困难的,因为我们不允许使用内置函数或汇编asm()来实现longjmp和setjmp函数.(是的,那真的是作业.)

问题:我一直收到错误的返回值.所以,简而言之,当main()调用foo()和foo()调用bar(),而bar()调用longjump()时,bar()不应该返回foo(),而是setjmp()应该返回main的返回值为1,应打印"error"(参见下面的main()).

相反,我的输出结果如下:

start foo
start bar
segmentation fault
Run Code Online (Sandbox Code Playgroud)

分段错误,我尝试通过使用malloc初始化指针*p来修复,但似乎没有做任何事情.虽然,分段错误,是我没有得到正确的返回值的原因?

码:

#include <stdio.h>
#include <stdlib.h>

int setjmp(int v);
int longjmp(int v);
int foo(void);
int bar(void);
int *add;


int main(void) {

    int r;

    r = setjmp(r);
    if(r == 0) {
        foo();
        return(0);
    } else {
        printf("error\n");
        return(2);
    }

}

int _main(void) {
    return(0);
}

int setjmp(int v)
{
    add = &v;
    return(0);
}

int longjmp(int v)
{
    int *p;
    p = &v;
    *(p - 1) = …
Run Code Online (Sandbox Code Playgroud)

c stack pointers longjmp setjmp

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

Python print 语句中函数的调用顺序是什么?

假设我有

def foo(n):
    print("foo",n)

def bar(n):
    print("bar",n)

print("Hello",foo(1),bar(1))
Run Code Online (Sandbox Code Playgroud)

我希望输出是:

Hello
foo 1 None
bar 1 None
Run Code Online (Sandbox Code Playgroud)

但相反,我得到了令我惊讶的东西:

foo 1
bar 1
Hello None None
Run Code Online (Sandbox Code Playgroud)

为什么Python在打印“Hello”之前先调用函数?似乎打印“Hello”,然后调用foo(1),让它打印其输出,然后打印“None”作为它的返回类型更有意义。然后调用bar(1)并打印该输出,并打印“None”作为它的返回类型。Python(或者其他语言)以这种方式调用函数而不是按照每个参数出现的顺序执行它们,是否有原因?

编辑:现在,我的后续问题是,如果 Python 从左到右计算表达式,它会以某种方式临时存储每个参数的返回值,内部发生了什么?例如,现在我知道它将从左到右评估每个表达式,但最后一行说Hello None None,那么 Python 是否以某种方式从每个函数的执行中记住第二个参数和第三个参数的返回值为None?例如,在计算 时foo(),它会打印foo 1然后没有返回语句,那么它是否存储在foo没有返回值的内存中?

python

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

我的Python脚本可以区分是以root用户运行还是通过sudo运行?

[root@hostname ~]# python script.py                  # allow this

[user@hostname ~]$ sudo python script.py             # deny this
[user@hostname ~]$ sudo -E python script.py          # deny this
[user@hostname ~]$ sudo PATH=$PATH python script.py  # deny this
[user@hostname ~]$ python script.py                  # kindly refuse this
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现上述行为。如果您担心原因或示例不够充分,请进一步阅读。抱歉,我的舌头很锋利,但我的大多数Stack Exchange问​​题都返回了敌对问题,而不是答案。

这个问题源于要求管理员运行我的脚本,但是脚本的性质需要root环境变量(而不是环境变量sudo)。

我已经对此进行了深入研究... 以下是此答案的

if os.geteuid() == 0:
    pass  # sufficient to determine if elevated privileges
Run Code Online (Sandbox Code Playgroud)

但是后来我开始需要访问PATH脚本内部。我注意到

sudo -E env | grep PATH; env | grep PATH
Run Code Online (Sandbox Code Playgroud)

打印不同的PATH值。我发现这是因为的安全政策所致PATH …

python sudo rhel environment-variables python-2.x

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

python os 模块文档中的代码示例如何创建安全漏洞?

文件os模块作出如下声明:


笔记

在实际使用 open() 之前,使用 access() 来检查用户是否被授权例如打开文件会创建一个安全漏洞,因为用户可能会利用检查和打开文件之间的短时间间隔来操纵它。最好使用EAFP技术。例如:

if os.access("myfile", os.R_OK):
    with open("myfile") as fp:
    return fp.read()
return "some default data"`
Run Code Online (Sandbox Code Playgroud)

最好写成:

try:
    fp = open("myfile")
except PermissionError:
    return "some default data"
else:
    with fp:
        return fp.read()
Run Code Online (Sandbox Code Playgroud)

我不明白用户如何“利用”这个间隔。如果open要引发异常,我不确定如何os.access防止引发该异常。同样,如果用户以某种方式操作文件,为什么不在 EAFP 版本的open命令之前执行文件操作?

我确实理解第二个版本可能更健壮,因为os.access可能无法正确识别可能引发 a 的条件PermissionError,但我不明白LBYL版本的安全性如何。有人可以解释一下吗?

python file-access python-os

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

我应该如何注释在 Python 中返回 ctypes 数组的函数?

考虑以下 Python 代码:

def foo(aqs : typing.List[int]) -> ??? :
    array_type = ctypes.c_int64 * len(aqs)
    ans = array_type(*aqs)
    return ans
Run Code Online (Sandbox Code Playgroud)

这个函数的返回值的正确注释是什么?(代替???

python arrays annotations function definition

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

使用python捕获异常时如何引发DeprecationWarning?

我写了一个有时会引发异常的库。有一个例外,我想弃用,我想建议人们停止捕捉它们,并在警告消息中提供建议。但是如何使异常DeprecationWarning在捕获时发出?

图书馆代码

import warnings

class MyException(ValueError):
    ...
    warnings.warn(
        "MyException is deprecated and will soon be replaced by `ValueError`.",
        DeprecationWarning,
        stacklevel=2,
    )
    ...

def something():
    raise MyException()
Run Code Online (Sandbox Code Playgroud)

用户代码

try:
    mylib.something()
except MyException: # <-- raise a DeprecationWarning here
    pass
Run Code Online (Sandbox Code Playgroud)

MyException该如何修改以实现这一目标?

python exception deprecation-warning

5
推荐指数
2
解决办法
659
查看次数

什么是 `np.ndarray[Any, np.dtype[np.float64]]` 以及为什么 `np.typing.NDArray[np.float64]` 为它起别名?

的文档称它是“np.typing.NDArray通用版本np.ndarray[Any, np.dtype[+ScalarType]]”。“通用”的概括发生在哪里?

文档中,numpy.ndarray.__class_getitem__我们有这个示例np.ndarray[Any, np.dtype[Any]],但没有解释这两个参数是什么。

为什么我可以这样做np.ndarray[float],即只使用一个参数?这意味着什么?

python numpy typing

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