小编Sam*_*way的帖子

编译器找不到Py_InitModule()..它是否已被弃用,如果是这样,我应该使用什么?

我正在尝试为python编写C扩展.使用代码(如下)我得到编译器警告:

implicit declaration of function ‘Py_InitModule’
Run Code Online (Sandbox Code Playgroud)

它在运行时失败并出现此错误:

undefined symbol: Py_InitModule
Run Code Online (Sandbox Code Playgroud)

我花了几个小时寻找一个没有快乐的解决方案.我尝试过多次语法修改,我甚至发现一篇帖子暗示该方法已被弃用.但是我发现没有替代品.

这是代码:

#include <Python.h>

//a func to calc fib numbers
int cFib(int n)
{
    if (n<2) return n;
    return cFib(n-1) + cFib(n-2);
}


static PyObject* fib(PyObject* self,PyObject* args)
{
    int n;
    if (!PyArg_ParseTuple(args,"i",&n)) 
        return NULL;    
    return Py_BuildValue("i",cFib(n));
}

static PyMethodDef module_methods[] = {
    {"fib",(PyCFunction) fib, METH_VARARGS,"calculates the fibonachi number"},
    {NULL,NULL,0,NULL}
};

PyMODINIT_FUNC initcModPyDem(void)
{
    Py_InitModule("cModPyDem",module_methods,"a module");
}
Run Code Online (Sandbox Code Playgroud)

如果它有帮助,这是我的setup.py:

from distutils.core import setup, Extension

module = Extension('cModPyDem', sources=['cModPyDem.c'])
setup(name = 'packagename', …
Run Code Online (Sandbox Code Playgroud)

c python python-extensions

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

使用生成器函数构建列表是否有效

在阅读Brett Slatkin的书"Effective Python"时,我注意到作者建议有时使用生成器函数构建列表并在生成的迭代器上调用list可能会产生更清晰,更易读的代码.

举个例子:

num_list = range(100)

def num_squared_iterator(nums):
    for i in nums:
        yield i**2

def get_num_squared_list(nums):
    l = []
    for i in nums:
        l.append(i**2)
    return l
Run Code Online (Sandbox Code Playgroud)

用户可以打电话的地方

l = list(num_squared_iterator(num_list))
Run Code Online (Sandbox Code Playgroud)

要么

l = get_num_squared_list(nums)
Run Code Online (Sandbox Code Playgroud)

并得到相同的结果.

建议生成器函数具有较少的噪声,因为它较短并且没有用于创建列表和向其附加值的额外代码.

(请注意,对于这些简单的示例,列表理解或生成器表达式会更好,但让我们假设这是一个模式的简化,可用于更复杂的代码,这在列表理解中是不明确的)

我的问题是,将生成器包装在列表中是否有成本?它在性能上与列表构建功能相同吗?

python generator

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

实现原型继承的正确方法

在JavaScript中已经有很多关于原型继承的线程,但由于懒惰,这不是副本.我已经完全阅读了所有内容,并且发现了几乎与我找到答案一样多的不同语法方法,所以看起来我并不是唯一一个对此主题感到困惑的人!

具体细节:

我目前的做法是这样的.

var Person = function(name) {
    this.name = name;

    this.greeting = function() {
        alert("Greetings, I am " + name);
    }

}

var bob = new Person("bob");
bob.greeting();

var Woman = function(name) {
    Person.call(this, name);
    this.gender = "female";
}

Woman.prototype = Object.create(Person.prototype);

var brenda = new Woman("brenda");
brenda.greeting();

Person.prototype.eats = true;

alert(brenda.eats);
Run Code Online (Sandbox Code Playgroud)

测试过代码之后我发现它完美无缺 - 据我所知 - 但我被告知这不是最好的方法,我应该像这样定义构造函数:

Woman.prototype.constructor = Woman;
Run Code Online (Sandbox Code Playgroud)

而不是在我的实际构造方法中使用Person.call方法.有两件事,被告知我看不到一个简单的方法,然后使用第二种方法传递参数,还有,为什么呢?我正在做的似乎工作得很好.

我错过了什么吗?

在某些情况下,我正在做的事情会给出不可预测的错误吗?

任何人都可以给出明确的"正确"方法及其原因吗?

javascript oop inheritance prototype

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

使用配置为触发器的lambda创建Cognito UserPool

我正在尝试使用JavaScript SDK通过脚本以编程方式创建Cognito用户池。

我已经成功创建了用户池,并通过在配置中指定相关lambda的arn定义了预注册和确认后触发器。(根据文档

我的脚本如下所示:

const aws = require('aws-sdk');
const awsConfig = require('../config/config');

aws.config.update({ region: awsConfig.REGION });

const provider = new aws.CognitoIdentityServiceProvider();


// user provided args
const stage = process.argv[2];

if (!stage) {
  process.stdout.write('Please provide stage as argument\n');
  process.exit(1);
}


// generate arns for pre and post cognito triggers
const getArn = (lambdaName) => {
  return `arn:aws:lambda:${awsConfig.REGION}:${awsConfig.AWS_ACCOUNT_ID}` +
         `:function:my-project-name-${stage}-${lambdaName}`;
};

const preSignUp = getArn('preSignUp');
const postConfirmation = getArn('postConfirmation');


const userPoolConfig = {
  PoolName: `mypool-${stage}`,
  AutoVerifiedAttributes: ['email'],
  Schema: [
    { …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services aws-sdk aws-lambda aws-cognito

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

使用多分支管道 Jenkinsfile 时构建环境中的 SSH 密钥

我有一个项目正在使用多分支管道插件在 Jenkins 上构建。我正在使用声明性管道语法,我的 Jenkinsfile 看起来像这样:

pipeline {
    agent { label 'blah' }
    options {
        timeout(time: 2, unit: 'HOURS')
        buildDiscarder(logRotator(numToKeepStr: '5'))
    }
    triggers { pollSCM('H/5 * * * *') }
    stages {
        stage('Prepare') {
            steps {
                sh '''
                  echo "Building environment"
                  python3 -m venv venv && \
                  pip install git+ssh://git@my_private_repo.git
                '''
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当构建在 Jenkins 盒子上运行时,构建失败,当我检查控制台输出时,pip install 命令失败并出现错误:

Permission denied (publickey).
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)

我猜测我需要将所需的 ssh 密钥设置到 jenkins 构建环境中,但我不确定如何执行此操作。

python ssh pip jenkins

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