相关疑难解决方法(0)

带*args和**kwargs的默认参数

Python的2.x的(我用2.7),这是使用默认参数用正确的方式*args**kwargs
我在SO上找到了一个与此主题相关的问题,但这适用于Python 3:
使用*args,**kwargs和可选/默认参数调用Python函数

在那里,他们说这种方法有效:

def func(arg1, arg2, *args, opt_arg='def_val', **kwargs):
    #...
Run Code Online (Sandbox Code Playgroud)

在2.7中,它导致a SyntaxError.有没有推荐的方法来定义这样的功能?
我用这种方式工作,但我猜有更好的解决方案.

def func(arg1, arg2, *args, **kwargs):
    opt_arg ='def_val'
    if kwargs.__contains__('opt_arg'):
        opt_arg = kwargs['opt_arg']
    #...
Run Code Online (Sandbox Code Playgroud)

python python-2.7

74
推荐指数
4
解决办法
4万
查看次数

Python方法覆盖,签名是否重要?

可以说我有

class Super():
  def method1():
    pass

class Sub(Super):
  def method1(param1, param2, param3):
      stuff
Run Code Online (Sandbox Code Playgroud)

它是否正确?对method1的调用总是会转到子类吗?我的计划是让2个子类重写方法1,使用不同的参数

python methods inheritance overriding

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

Python:按名称和kwargs传递参数

在python中我们可以这样做:

def myFun1(one = '1', two = '2'):
    ...
Run Code Online (Sandbox Code Playgroud)

然后我们可以调用函数并按名称传递参数:

myFun1(two = 'two', one = 'one')
Run Code Online (Sandbox Code Playgroud)

此外,我们可以这样做:

def myFun2(**kwargs):
    print kwargs.get('one', 'nothing here')

myFun2(one='one')
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否可以将两种方法结合起来:

def myFun3(name, lname, **other_info):
    ...

myFun3(lname='Someone', name='myName', city='cityName', otherInfo='blah')
Run Code Online (Sandbox Code Playgroud)

一般来说,我们可以做什么组合?

谢谢,对不起我的愚蠢问题.

python arguments function pass-by-name kwargs

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

Python 3最佳实践参数顺序

在这个问题中,描述了自Python3以来你可以使用这种表示法:

def func(a, b, *args, kw1=None, **kwargs)
Run Code Online (Sandbox Code Playgroud)

定义一个函数,而不是传统的Python2方式:

def func(a, b, kw1=None, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

是否有任何商定的最佳做法,应使用哪种签名,还是基于个人喜好?

python

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

在python中使用named/unnamed和variable参数进行函数调用

我有以下代码:

def foo(func, *args, named_arg = None):
    return func(*args)
Run Code Online (Sandbox Code Playgroud)

返回SyntaxError:

  File "tester3.py", line 3
    def foo(func, *args, named_arg = None):
                                 ^
Run Code Online (Sandbox Code Playgroud)

这是为什么?是否有可能以某种方式定义一个函数,它接受一个参数(func),然后是args命名参数之前的变量参数列表?如果没有,我的可能性是什么?

python

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

如何在函数签名中使用 *args 和 **kwargs 返回默认值

我正在尝试在 Python 3 (Python 3.7.0) 中使用argskwargs解决问题,但我的理解遇到了一些问题。

这是我有一个简单的功能:

def add_args(y=10, *args, **kwargs):
    return y, args, kwargs
Run Code Online (Sandbox Code Playgroud)

并测试它以查看返回的内容:

    print(add_args(1, 5, 10, 20, 50))
    print(add_args())
    >>
    (1, (5, 10, 20, 50), {}) # What happened to my default y=10?
    (10, (), {})
Run Code Online (Sandbox Code Playgroud)

我不明白的是,y=10第一个打印语句中发生了什么?我可以看到它被1in覆盖,args但我不确定为什么。

我怎样才能重写这个函数,这样默认值就不会被覆盖,或者我是否遗漏了参数从函数签名传递到 return 语句的方式?

我试着在这里这里寻找,但没有找到我正在寻找的答案。因为我认为将默认值放在args和之前kwargs会防止覆盖。

python function args keyword-argument python-3.x

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