相关疑难解决方法(0)

给定完整路径如何导入模块?

如何在完整路径下加载Python模块?请注意,该文件可以位于文件系统中的任何位置,因为它是一个配置选项.

python configuration python-module python-import

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

在python中自动调用与特定模式匹配的所有函数

在python我有很多功能,如下面的那些.我想运行名称匹配的所有函数,setup_*而不必从main显式调用它们.运行函数的顺序并不重要.我怎么能在python中这样做?

def setup_1():
    ....

def setup_2():
    ....

def setup_3():
    ...

...

if __name__ == '__main__':
    setup_*()
Run Code Online (Sandbox Code Playgroud)

python automation

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

导入不起作用

我有两个文件说a.pyb.py.

在a.py中,我们这样做

import xxx
from b import *
Run Code Online (Sandbox Code Playgroud)

在b.py中我们有一个需要的功能module xxx.现在,当b.py从中调用函数时a.py,无法找到该模块xxx.

为什么这可以解决这个问题?我不能做import xxxb.py出于某种原因.

MCV:

a.py

import xxx
from b import *
fun()
Run Code Online (Sandbox Code Playgroud)

b.py

def fun():
    xxx.dosomething()
Run Code Online (Sandbox Code Playgroud)

错误:

Global name xxx not defined

python python-import

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

使用kwargs包装一个带有可选参数结构的函数

在C中,看到一个需要大量输入的函数并不罕见,其中许多/大多数都是可选组,这些在结构中使得开发人员的界面更加清晰.(即使你应该能够依赖编译器接受一个函数至少127个参数,但是没有人真正想写那么多,特别是当C没有重载或默认函数参数支持时).作为一个假设的例子,我们可以考虑以下结构/函数对(test.h)来说明问题:

#include <stdbool.h>

typedef struct {
  const char *name;
  void *stuff;
  int max_size;
  char flags;
  _Bool swizzle;
  double frobination;
  //...
} ComplexArgs;

void ComplexFun(const ComplexArgs *arg) {}
Run Code Online (Sandbox Code Playgroud)

当使用SWIG进行包装时,我们可以使用以下方法快速完成工作:

%module test

%{
#include "test.h"
%}

typedef bool _Bool;

%include "test.h"
Run Code Online (Sandbox Code Playgroud)

这有效,我们可以使用如下:

import test

args=test.ComplexArgs()
args.flags=100;
args.swizzle=True
test.ComplexFun(args)
Run Code Online (Sandbox Code Playgroud)

但这并不完全是Pythonic.Python开发人员会更习惯于看到用于支持这种调用的kwargs:

import test

# Not legal in the interface currently:
test.ComplexFun(flags=100, swizzle=True)
Run Code Online (Sandbox Code Playgroud)

我们怎样才能做到这一点?SWIG -keyword命令行选项也没有帮助,因为该函数只有一个实际参数.

c python swig

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

有没有办法从命名空间"as"导入一组函数(没有*)?

而不是定义

from numpy import cos as cos
from numpy import arccos as arccos
Run Code Online (Sandbox Code Playgroud)

等等,我能做点什么吗?

trigfunctions = ('cos','arccos','sin','arcsin','tan','arctan')
for method in trigfunctions:
    setattr(HERE,method,getattr(numpy,method))
Run Code Online (Sandbox Code Playgroud)

其中HERE要么是全球空间(或可能,局部功能的环境)?这将使得更容易定义基于cos,arccos而无需指定命名空间,并从所需模块加载适当的函数(例如,math如果numpy不可用).我意识到这可能会在非常普遍地应用时导致错误,但在某些小的情况下它会很有用.

python

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