小编God*_*Man的帖子

在位置参数之前使用默认参数

我正在学习在python中使用位置参数,并试图在与默认参数混淆时看看它们是如何工作的: -

def withPositionalArgs(ae=9,*args):
    print 'ae= ', ae
    print 'args = ', args


a=1
b=2
c=[10,20]

withPositionalArgs(a,b,c)
Run Code Online (Sandbox Code Playgroud)

这给了我输出:

ae=  1
args =  (2, [10, 20])
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,a被认为是传递一个值ae,并且b还有c被认为是位置参数.

所以,我现在想分配10ae同时呼吁withPositionalArgs:

withPositionalArgs(ae=10,b,c)
Run Code Online (Sandbox Code Playgroud)

但是,我不能这样做.我收到错误:

SyntaxError: non-keyword arg after keyword arg
Run Code Online (Sandbox Code Playgroud)

我的问题是:

我做得对吗?是否允许使用默认参数或在python函数中的位置参数之前使用一个好的做法?

python

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

需要了解__init __,__ new__和__call__的流程

class Singleton(type):
    def __init__(self, *args, **kwargs):
        print 'calling __init__ of Singleton class', self
        print 'args: ', args
        print 'kwargs: ', kwargs
        super(Singleton, self).__init__(*args, **kwargs)
        self.__instance = None
    def __call__(self, *args, **kwargs):
        print 'running __call__ of Singleton', self
        print 'args: ', args
        print 'kwargs: ', kwargs, '\n\n'
        if self.__instance is None:
            self.__instance = super(Singleton, self).__call__(*args, **kwargs)
        return self.__instance

class A(object):
    __metaclass__ = Singleton
    def __init__(self,a):
        print 'in __init__ of A:  ', self
        self.a = a
        print 'self.a: ', self.a

a=A(10)
b=A(20) …
Run Code Online (Sandbox Code Playgroud)

python singleton design-patterns metaclass

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

python sum函数 - 需要`start'参数说明

我试图理解内置sum()函数的工作,但是,start参数已经让我不知所措:

  1. a=[[1, 20], [2, 3]]
    b=[[[[[[1], 2], 3], 4], 5], 6]
    >>> sum(b,a)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can only concatenate list (not "int") to list
    >>> sum(a,b)
    [[[[[[1], 2], 3], 4], 5], 6, 1, 20, 2, 3]
    
    Run Code Online (Sandbox Code Playgroud)
  2. >>> a=[1,2]
    >>> b=[3,4]
    >>> sum(a,b)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can only concatenate list (not "int") to list
    >>> sum(b,a)
    Traceback (most recent …
    Run Code Online (Sandbox Code Playgroud)

python sum

6
推荐指数
2
解决办法
2289
查看次数

python不接受关键字参数

我试图让我的代码不接受关键字参数,就像一些bulitins也是不接受的关键字参数,但是,我不能这样做.在这里,根据我的有限理解,我的想法是: -

def somefunc(a,b):
    print a,b

somefunc(10,20)
Run Code Online (Sandbox Code Playgroud)

输出:

10 20
Run Code Online (Sandbox Code Playgroud)

现在,当我运行以下内容时(我知道这不是函数定义中的关键字参数,但是,查看函数调用,它似乎与调用接受关键字参数的函数时的语法相同) :

somefunc(b=10,a=20)
Run Code Online (Sandbox Code Playgroud)

输出:

20 10
Run Code Online (Sandbox Code Playgroud)

我有两个问题: -

  1. 查看函数调用somefunc(b=10,a=20)而不是函数定义,这似乎是对只接受普通参数的函数的调用或接受关键字参数的函数.口译员如何区分两者?
  2. 是否有可能在表单中转换我们的任何函数,以便它不像许多内置函数那样接受关键字参数?

为什么我要这样做呢? 我只是在检查我是否可以这样做,所以我不会错过任何深入理解python的东西.我知道python是否允许这样做.

python keyword-argument

6
推荐指数
2
解决办法
8552
查看次数

python __get__方法

我正在阅读链接中描述符如何工作的解释:http://users.rcn.com/python/download/Descriptor.htm#properties.

但是,在这里,在类Property__get__方法下,我对方法签名有疑问.方法签名是:

def __get__(self, obj, objtype=None):

在这里,我知道何时以及如何obj可以是无或实际对象.

但是,我不明白:在何种情况下可以objtypeNone?而且,它在实际例子中是如何有用的.

python descriptor getattribute

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

类型错误:object.__new__(int) 不安全,使用 int.__new__()

阅读本文时:Python 中的元类是什么?,我正在学习使用__new__以下代码段:-

class a(object):
    pass

a.__new__(int,'abcdef',(int,),{})
Run Code Online (Sandbox Code Playgroud)

调用__new__using可能存在一些问题a.。但是,我收到以下错误,我不明白其含义:-

TypeError: object.__new__(int) is not safe, use int.__new__()

如果与 的用法有关__new__,我可以通过阅读一些书籍来修改。但是,有人可以解释为什么会出现这条消息:

object.__new__(int) is not safe, use int.__new__()

python metaclass

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