小编MSe*_*ert的帖子

Python C扩展:文档的方法签名?

我正在编写C扩展,我想让我的方法的签名可见为内省.

static PyObject* foo(PyObject *self, PyObject *args) {

    /* blabla [...] */

}

PyDoc_STRVAR(
    foo_doc,
    "Great example function\n"
    "Arguments: (timeout, flags=None)\n"
    "Doc blahblah doc doc doc.");

static PyMethodDef methods[] = {
    {"foo", foo, METH_VARARGS, foo_doc},
    {NULL},
};

PyMODINIT_FUNC init_myexample(void) {
    (void) Py_InitModule3("_myexample", methods, "a simple example module");
}
Run Code Online (Sandbox Code Playgroud)

现在,如果(在构建它之后......)我加载模块并查看它的帮助:

>>> import _myexample
>>> help(_myexample)
Run Code Online (Sandbox Code Playgroud)

我会得到:

Help on module _myexample:

NAME
    _myexample - a simple example module

FILE
    /path/to/module/_myexample.so

FUNCTIONS
    foo(...)
        Great example function
        Arguments: (timeout, flags=None)
        Doc blahblah doc doc …
Run Code Online (Sandbox Code Playgroud)

python documentation python-c-api

12
推荐指数
2
解决办法
1632
查看次数

在方法的开头和结尾做一些事情

是否有一种简单的方法可以在课程中的每个函数的开头和结尾处执行某些操作?我已经调查了__getattribute__,但我认为在这种情况下我不能使用它吗?

这是我正在尝试做的简化版本:

class Thing():
    def __init__(self):
        self.busy = False

    def func_1(self):
        if self.busy: 
            return None
        self.busy = True
          ...
        self.busy = False

    def func_2(self):
        if self.busy: 
            return None
        self.busy = True
          ...
        self.busy = False
    ...
Run Code Online (Sandbox Code Playgroud)

python class python-3.x

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

如何在python中拟合高斯曲线?

我给了一个数组,当我绘制它时,我得到一个带有一些噪音的高斯形状.我想要适合高斯.这是我已经拥有的,但是当我绘制这个时,我没有得到一个拟合的高斯,而是我只是得到一条直线.我尝试了很多不同的方法,但我无法理解.

random_sample=norm.rvs(h)

parameters = norm.fit(h)

fitted_pdf = norm.pdf(f, loc = parameters[0], scale = parameters[1])

normal_pdf = norm.pdf(f)

plt.plot(f,fitted_pdf,"green")
plt.plot(f, normal_pdf, "red")
plt.plot(f,h)
plt.show()
Run Code Online (Sandbox Code Playgroud)

点击图片

python gaussian curve-fitting scipy

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

用anaconda无法更新到numpy 1.13?

PyPI现在有一个月的numpy 1.13.3软件包https://pypi.python.org/pypi/numpy

Anaconda云声称拥有1.13 https://anaconda.org/anaconda/numpy

但是当我使用时,我只得到1.11.3-py35_0 conda update numpy

在此输入图像描述

我的环境:Windows 7 64位python 3.5

python numpy anaconda conda

12
推荐指数
2
解决办法
3万
查看次数

如何使用d.items()更改for循环中的所有字典键?

我想帮助理解为什么这段代码没有按预期工作.

如果想要更改字典的键但保留值,他/她可能会使用:

d[new_key] = d.pop[old_key]
Run Code Online (Sandbox Code Playgroud)

我想修改所有键(并保持值到位),但下面的代码跳过某些行 - ("col2")保持不变.是因为字典是无序的,我不断改变其中的值?

如何在不创建新字典的情况下更改密钥并保留值?

import time
import pprint

name_dict = {"col1": 973, "col2": "1452 29th Street",
             "col3": "Here is a value", "col4" : "Here is another value",
             "col5" : "NULL", "col6": "Scottsdale",
             "col7": "N/A", "col8" : "41.5946922",
             "col9": "Building", "col10" : "Commercial"}


for k, v in name_dict.items():
    print("This is the key: '%s' and this is the value '%s'\n" % (k, v) )
    new_key = input("Please enter a new key: ")
    name_dict[new_key] = name_dict.pop(k)
    time.sleep(4)

pprint.pprint(name_dict)
Run Code Online (Sandbox Code Playgroud)

python dictionary for-loop python-3.x

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

使用词典时如何避免KeyError?

现在我正在尝试编写汇编程序,但我不断收到此错误:

Traceback (most recent call last):
  File "/Users/Douglas/Documents/NeWS.py", line 44, in 
    if item in registerTable[item]:
KeyError: 'LD'

我目前有这个代码:

functionTable = {"ADD":"00",
         "SUB":"01",
         "LD" :"10"}

registerTable = {"R0":"00",
         "R1":"00",
         "R2":"00",
         "R3":"00"}

accumulatorTable = {"A"  :"00",
            "B"  :"10",
            "A+B":"11"}

conditionTable = {"JH":"1"}

valueTable = {"0":"0000",
          "1":"0001",
          "2":"0010",
          "3":"0011",
          "4":"0100",
          "5":"0101",
          "6":"0110",
          "7":"0111",
          "8":"1000",
          "9":"1001",
          "10":"1010",
          "11":"1011",
          "12":"1100",
          "13":"1101",
          "14":"1110",
          "15":"1111"}

source = "LD R3 15"

newS = source.split(" ")

for item in newS:

        if item in functionTable[item]:
            functionField = functionTable[item]
        else:
            functionField …
Run Code Online (Sandbox Code Playgroud)

python dictionary keyerror

12
推荐指数
3
解决办法
2万
查看次数

Conda删除所有环境(root除外)

我知道我可以删除单个环境

 conda remove -n envname --all
Run Code Online (Sandbox Code Playgroud)

但是我经常创建多个新的环境来安装一个特定的软件包或对它进行测试,所以我经常最终得到5-10个环境,将它们相互删除是很痛苦的.是否有一种简单的方法(对于Windows)删除除根环境之外的所有环境?

python anaconda conda

11
推荐指数
3
解决办法
7721
查看次数

字典值作为访问密钥时要调用的函数,而不使用"()"

我有一个字典,其值有时作为字符串,有时作为函数.对于作为函数的值,有一种方法可以在()访问密钥时执行函数而无需显式键入?

例:

d = {1: "A", 2: "B", 3: fn_1}
d[3]() # To run function
Run Code Online (Sandbox Code Playgroud)

我想要:

d = {1: "A", 2: "B", 3: magic(fn_1)}
d[3] # To run function
Run Code Online (Sandbox Code Playgroud)

python dictionary function callback python-2.7

11
推荐指数
2
解决办法
4781
查看次数

比较:import语句与__import__函数

作为在正常情况下使用builtin__import__()的问题的后续内容,我进行了一些测试,并且遇到了令人惊讶的结果.

我在这里比较经典import语句的执行时间和对__import__内置函数的调用.为此,我在交互模式下使用以下脚本:

import timeit   

def test(module):    
    t1 = timeit.timeit("import {}".format(module))
    t2 = timeit.timeit("{0} = __import__('{0}')".format(module))
    print("import statement:   ", t1)
    print("__import__ function:", t2)
    print("t(statement) {} t(function)".format("<" if t1 < t2 else ">"))
Run Code Online (Sandbox Code Playgroud)

与链接问题一样,以下是导入时的比较sys以及其他一些标准模块:

>>> test('sys')
import statement:    0.319865173171288
__import__ function: 0.38428380458522987
t(statement) < t(function)

>>> test('math')
import statement:    0.10262547545597034
__import__ function: 0.16307580163101054
t(statement) < t(function)

>>> test('os')
import statement:    0.10251490255312312
__import__ function: 0.16240755669640627
t(statement) < t(function)

>>> test('threading')
import statement:    0.11349136644972191 …
Run Code Online (Sandbox Code Playgroud)

python performance python-import

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

如何在另一个列表中获取列表项的索引?

考虑我有这些列表:

l = [5,6,7,8,9,10,5,15,20]
m = [10,5]
Run Code Online (Sandbox Code Playgroud)

我想要得到的指数ml.我使用list comprehension来做到这一点:

[(i,i+1) for i,j in enumerate(l) if m[0] == l[i] and m[1] == l[i+1]]
Run Code Online (Sandbox Code Playgroud)

输出: [(5,6)]

但如果我有更多的数字m,我觉得它不是正确的方法.那么Python或NumPy有什么简单的方法吗?

另一个例子:

l = [5,6,7,8,9,10,5,15,20,50,16,18]
m = [10,5,15,20]
Run Code Online (Sandbox Code Playgroud)

输出应该是:

[(5,6,7,8)]
Run Code Online (Sandbox Code Playgroud)

python numpy list

10
推荐指数
2
解决办法
1296
查看次数