小编Izz*_*sin的帖子

像属性一样访问dict键?

我发现访问dict密钥更加方便,obj.foo而不是obj['foo'],所以我写了这个代码片段:

class AttributeDict(dict):
    def __getattr__(self, attr):
        return self[attr]
    def __setattr__(self, attr, value):
        self[attr] = value
Run Code Online (Sandbox Code Playgroud)

但是,我认为必须有一些原因,Python不提供开箱即用的功能.以这种方式访问​​dict密钥有什么警告和陷阱?

python syntax dictionary

273
推荐指数
16
解决办法
16万
查看次数

Py_INCREF/DECREF:何时

说明以下内容是正确的:

  • 如果在C函数中创建了Python对象,但该函数没有返回它,INCREF则不需要,但是a DECREF.

  • [false]如果函数确实返回了它,你需要INCREF在接收返回值的函数中.[/ false]

  • 当分配了C类型的变量作为属性,如double,int等等,给Python对象,没有INCREFDECREF需要.

  • 将Python对象作为属性分配给其他Python对象,如下所示:

    PyObject *foo;
    foo = bar // A Python object
    tmp = self->foo;
    Py_INCREF(foo);
    self->foo = foo;
    Py_XDECREF(tmp);
    //taken from the manual, but it is unclear if this works in every situation
    
    Run Code Online (Sandbox Code Playgroud)

编辑: - >我可以在任何情况下安全地使用它吗?(没有碰到一个导致我问题的地方)

  • Python对象的dealloc需要DECREF用于其作为属性的每个其他Python对象,但不适用于C类型的属性.

编辑

'C type as a attribute'是指bar和baz:

typedef struct {
    PyObject_HEAD
    PyObject *foo;
    int bar;
    double baz;
} FooBarBaz;
Run Code Online (Sandbox Code Playgroud)

python python-c-api

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

在python中执行C程序?

我有这个C程序,至少我认为它是(文件:spa.c,spa.h).有没有什么方法可以从Python执行这个脚本而不将额外的参数传递给Python解释器(如果没有,参数会是什么?)

更新:感谢您的回复.源代码可以在http://www.nrel.gov/midc/spa/#register找到

(请不要被网址中的'注册'吓到,如果你填写表格,你可以立即下载文件(没有验证邮件等)我会尝试你的建议并报告结果.

更新2:我使用gcc编译了源代码,但现在它在尝试调用()时给了我一个权限,即使以root身份运行python(im在Ubuntu 10:10上).

更新3 [Errno 8] Exec格式错误

更新4好的,我搞定了.程序使用printf输出值:

>>> call(['/path'])
Julian Day:    2452930.312847
L:             2.401826e+01 degrees
B:             -1.011219e-04 degrees
R:             0.996542 AU
H:             11.105902 degrees
Delta Psi:     -3.998404e-03 degrees
Delta Epsilon: 1.666568e-03 degrees
Epsilon:       23.440465 degrees
Zenith:        50.111622 degrees
Azimuth:       194.340241 degrees
Incidence:     25.187000 degrees
Sunrise:       06:12:43 Local Time
Sunset:        17:20:19 Local Time
Run Code Online (Sandbox Code Playgroud)

谢谢大家!

c python

15
推荐指数
3
解决办法
5万
查看次数

Python/Django:添加自定义模型方法?

用例如

class model(models.Model)
    ....
    def my_custom_method(self, *args, **kwargs):
        #do something
Run Code Online (Sandbox Code Playgroud)

当我尝试在pre_save,save,post_save等过程中调用此方法时,Python引发了一个TypeError; 未绑定的方法.

如何添加自定义模型方法,可以像model.objects.get()等一样执行?

编辑:尝试使用super(model, self).my_custom_method(*args, **kwargs)但在这种情况下Python说该模型没有属性my_custom_method

python django methods model

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

Python if语句:False与0.0

是否有可能:

for k,v in kwargs.items()
    if v == None or v == '' or v == 1.0 or v == False:
       del kwargs[k]
Run Code Online (Sandbox Code Playgroud)

如果v == 0.0,不删除密钥?(假似乎等于0.0),并且没有删除等于True的键.

python if-statement

6
推荐指数
3
解决办法
5万
查看次数

为分层模型创建高效的数据库查询(django)

考虑这个(django)模型:

class Source(models.Model):
   # Some other fields
   type = models.ForeignKey('Type')

class Type(models.Model):
    # Some other fields
    parent = models.ForeignKey('self')
Run Code Online (Sandbox Code Playgroud)

此模型具有自身的外键,从而创建层次结构.

假设我们有以下层次结构:

Website
    Blog
    News    
    Social Network
    Q&A
    Forum
Radio
    Government radio
    Pirate radio
    Commercial radio
    Internet radio
Run Code Online (Sandbox Code Playgroud)

如何有效地查询,这样如果我选择SourceType,我也找回Sources其中有一个Type是给定类型的孩子?

我试过遍历整棵树,但这显然不是很有效.

另一种选择是使用ManyToManyField并通过覆盖save()方法自动附加父类型.例如,如果选择"博客",则还会创建"网站"的记录.但这似乎对我来说太过分了.

django

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

Python等价 PHP的foreach []?

我从数据库中获取行并希望填充多维字典.

php版本大致如下:

foreach($query as $rows):
    $values[$rows->id][] = $rows->name;
endforeach;

return $values;
Run Code Online (Sandbox Code Playgroud)

我似乎无法找出以下问题:

  • 什么是使用自动编号将字符串添加到字典的python方法,例如$ values []

  • 如何使用变量填充Python字典; 例如,使用values [id] = name,不会添加键,而是覆盖现有键.

我完全不知道如何实现这一点,因为我是一个Python初学者(实际上是编程).

python dictionary key

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

在内存变量+ Django中

假设你必须使用Python和Django来代码.

OBJECT_CACHE = {}

def get_my_objects(key, *args, **kwargs):
    try:
        return OBJECT_CACHE[key]
    except KeyError:
        OBJECT_CACHE[key] = # code to get object
        return OBJECT_CACHE[key]
Run Code Online (Sandbox Code Playgroud)

在运行相同代码库的多个项目的情况下,这将如何表现?将OBJECT_CACHE是为每个项目唯一的,还是会与所有项目的对象混在一起?

python django

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

JavaScript中的Django模板标签 - 没有引号的无效语法,带引号的无效语法

您可以从Django模板标签中获取Javascript读取变量var spec = "{{ foo }}";.

但是,如果foo需要是JSON对象.它变成这样:

var spec = "{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}";
Run Code Online (Sandbox Code Playgroud)

前面和后面的引号使这个JavaScript语法无效,但是,如果我将它们遗漏,它也是一个无效的语法 var spec = {{ foo }};

解决这个问题的最佳方法是什么?要么foo输出完整的<script></script>块,要么让JavaScript从服务器请求此对象,而不是通过模板标记输出?......

javascript django django-templates

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