相关疑难解决方法(0)

在Python中强制命名参数

在Python中,您可能有一个函数定义:

def info(object, spacing=10, collapse=1)
Run Code Online (Sandbox Code Playgroud)

可以通过以下任何一种方式调用:

info(odbchelper)                    
info(odbchelper, 12)                
info(odbchelper, collapse=0)        
info(spacing=15, object=odbchelper)
Run Code Online (Sandbox Code Playgroud)

感谢Python允许任意顺序参数,只要它们被命名.

我们遇到的问题是我们的一些较大的功能增长,人们可能会之间添加参数spacingcollapse,这意味着错误的值可以将未命名的参数.此外,有时候我们并不总是清楚需要注意什么.我们正在采用一种方法强迫人们命名某些参数 - 不仅仅是编码标准,而且理想情况下是标志或pydev插件?

所以在上面的4个例子中,只有最后一个会通过检查,因为所有参数都被命名.

赔率是我们只会为某些功能打开它,但任何关于如何实现这一点的建议 - 或者如果它甚至可能会被赞赏.

python coding-style function parameter-passing

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

在 Cython 类中,使用 __init__ 和 __cinit__ 有什么区别?

代码块 1 使用 __init__

%%cython -3
cdef class c:
    cdef:
        int a
        str s
    def __init__(self):
        self.a=1
        self.s="abc"
    def get_vals(self):
        return self.a,self.s
m=c()
print(m.get_vals())
Run Code Online (Sandbox Code Playgroud)

代码块 2 使用 __cinit__

%%cython -3
cdef class c:
    cdef:
        int a
        str s
    def __cinit__(self):  # cinit here
        self.a=1
        self.s="abc"
    def get_vals(self):
        return self.a,self.s
m=c()
print(m.get_vals())
Run Code Online (Sandbox Code Playgroud)
  1. 我测试了这两个代码,并且都运行没有错误。在这种情况下,使用__cinit__而不是有__init__什么意义?

  2. 看了官方文章,被一句话搞糊涂了:

    如果需要将修改后的参数列表传递给基类型,则必须在方法中执行相关部分的初始化__init__(),其中适用于调用继承方法的正常规则。

“修改后的论点”是什么意思?在这里,为什么我应该使用 init 而不是 cinit?

python oop class cython

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

标签 统计

python ×2

class ×1

coding-style ×1

cython ×1

function ×1

oop ×1

parameter-passing ×1