相关疑难解决方法(0)

调用另一个函数并可选择保留默认参数

我有一个带有一个可选参数的函数,如下所示:

def funA(x, a, b=1):
   return a+b*x
Run Code Online (Sandbox Code Playgroud)

我想编写一个调用的新函数,funA并且还有一个可选参数,但是如果没有传递参数,我想保留默认值funA.

我在想这样的事情:

def funB(x, a, b=None):
   if b:
     return funA(x, a, b)
   else:
     return funA(x, a)
Run Code Online (Sandbox Code Playgroud)

有更多的pythonic方式吗?

python

13
推荐指数
2
解决办法
1695
查看次数

Python有同名密钥的字典?

我需要一个字典,它可能对某些键具有相同的名称,并在这种情况下引用键时返回值列表.例如

print mydict['key']
[1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

python dictionary key

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

Django中的Kwargs

什么是Kwarg !! ??

我一直在读django的教程,试图学习这门语言,我偶然发现了这个.

如果有人可以发布/指向一个简单的例子来帮助理解为什么以及如何使用它,我将非常感激.

python django

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

Python函数参数*x,是什么意思?

我见过lambda函数,参数为*x.它是一种放入列表或元组的方式,如果它是一个元组,你如何将列表作为参数参数,反之亦然.

如果你能把我链接到一些文档,我将不胜感激.

有问题的lambda函数:

import os
add_to_place = lambda *x : os.path.abspath(os.path.join(os.path.dirname(__file__), *x))
Run Code Online (Sandbox Code Playgroud)

提前致谢.我推断它是一个元组,但我想要一些文档,只是为了确定.

python lambda variadic-functions

10
推荐指数
0
解决办法
2364
查看次数

Python的`*`和`**`说明符有名字吗?

可能重复:
python*运算符的专有名称?

*拆包当清楚地使用的参数的任意数量

**在将关键字参数解压缩为字典时使用.

这是传统的使用*args**kwargs,我倾向于这些发音为"ARGS"和"quargs",忽略了*秒.

这个问题中,星号被称为指针.

BDFL如何引用这些符号?


关闭后.

感谢您找到相关问题,这就是我所寻求的.准确地搜索(甚至非常特定的)网络真的很棘手*!

对那些回答他们如何发音"*"的评论员来说,这不是我问的问题(如果我的问题误导了你,我会道歉).我想知道的是这些说明符是如何在Python中命名,这不是一个主观问题(因此引用了BDFL).

python naming args kwargs

9
推荐指数
0
解决办法
435
查看次数

为什么 args 和仅关键字参数不能同时与 *args 和 **kwargs 混合

python 中 *args 和 **kwargs 的用法对我来说很清楚,并且 SO 中存在很多问题(例如*args 和 **kwargs 的使用以及**(双星/星号)和 *(星号/星号)对参数做什么?)。

但我想理解的一件事是:为什么不能同时定义强制位置参数、强制 kwarg 参数并最终仍然允许捕获其他参数和 kwargs,如下所示cant_do_that

def one_kwarg_is_mandatory(*, b, **kwargs):
    print(b)
    for key, value in kwargs.items():
        print(key, value)    
        
def one_pos_arg_and_one_kwarg_are_mandatory(a, *, b, **kwargs):
    print(a, b)
    for key, value in kwargs.items():
        print(key, value)
      
# I wanted a mandatory arg (a) and possibly parse other args (*args), 
# then a mandatory kwarg (b) and eventually other kwargs (**kwargs)
def cant_do_that(a, *args, *, b, **kwargs):
    print(a, b) …
Run Code Online (Sandbox Code Playgroud)

python args keyword-argument python-3.x

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

传递集合参数而不解压缩其内容

问题:编写一个__init__直接将集合作为参数而不是解压缩其内容的优缺点是 什么?

上下文:我正在编写一个类来处理数据库表中几个字段的数据.我遍历一些大的(约1亿行)查询结果,一次将一行传递给执行处理的类.每行作为元组从数据库中检索(或者可选地,作为字典).

讨论:假设我对三个字段感兴趣,但传递给我的类的内容取决于查询,查询由用户编写.最基本的方法可能是以下之一:

class Direct:
    def __init__(self, names):
        self.names = names

class Simple:
    def __init__(self, names):
        self.name1 = names[0]
        self.name2 = names[1]
        self.name3 = names[2]

class Unpack:
    def __init__(self, names):
        self.name1, self.name2, self.name3 = names
Run Code Online (Sandbox Code Playgroud)

以下是可能传递给新实例的行的一些示例:

good = ('Simon', 'Marie', 'Kent')                 # Exactly what we want
bad1 = ('Simon', 'Marie', 'Kent', '10 Main St')   # Extra field(s) behind
bad2 = ('15', 'Simon', 'Marie', 'Kent')           # Extra field(s) in front
bad3 = ('Simon', 'Marie')                         # …
Run Code Online (Sandbox Code Playgroud)

python arguments iterable-unpacking

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

zip函数有助于元组

我希望有人可以帮助我解决我遇到的问题.我有大量的元组(> 500),如下所示:

(2,1,3,6)  
(1,2,5,5)  
(3,0,1,6)  
(10,1,1,4)  
(0,3,3,0)  
Run Code Online (Sandbox Code Playgroud)

我的代码片段为:

sum1 = (A,B,C,D) # creates a tuple of sums of (A,B,C,D)  
mysum = map(sum, zip(A, B, C, D))
print(mysum)
Run Code Online (Sandbox Code Playgroud)

我意识到上面的代码不正确.我试图找到一种方法将所有值A加在一起,B的所有值,C的所有值以及D的所有值一起使用zip函数.例如,我想打印一些如下所示的内容:

Asum = 16  
Bsum = 7  
Csum = 13  
Dsum = 21  
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?非常感谢你花时间陪伴.

python tuples

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

Python:将标志传递给函数

很长一段时间以来,我一直试图弄清楚将标志传递给python函数的最佳方法是什么.最直接的方式是:

def func(data, flag1, flag2, flag3):
    ...

func(my_data, True, False, True)
Run Code Online (Sandbox Code Playgroud)

这非常简洁,但难以理解,因为单词"True"或"False"不会告诉你什么标志正在设置,你必须仔细计算从左边开始的参数.你可以使它们成为关键字参数:

def func(data, flag1=False, flag2=False, flag3=False):
    ...

func(my_data, flag1=True, flag3=True)
Run Code Online (Sandbox Code Playgroud)

但这有点多余,因为"真实"根本没有任何意义.我可以将它作为列表传递:

func(mydata, ['flag1', 'flag3'])
Run Code Online (Sandbox Code Playgroud)

要么

func(mydata, [func.flag1, func.flag3])
Run Code Online (Sandbox Code Playgroud)

但第一个感觉相当脏,使用字符串作为标志,第二个仍然有点重复.理想情况下我想说的是:

func(my_data, flag1, flag3)
Run Code Online (Sandbox Code Playgroud)

将标志传递给具有最小详细程度和冗余的函数.有没有办法在python中做这样的事情?

编辑:我最终去了:

func(mydata, flagA=1, flagB=1)
Run Code Online (Sandbox Code Playgroud)

主要是出于上述原因:编译时检查(与传入字符串相比),没有名称空间污染(与使用全局"ENUM"相反)和最小样板(= 1或= 0只有2个字符,而5或6表示= True或= False).它还可以非常轻松地设置标志的默认值:

def func(data, flagA=1, flagB=0, flagC=1):
    ...
Run Code Online (Sandbox Code Playgroud)

这比通过箍提取并将默认值分配给**kwarg风格的标志要容易得多,而且要容易得多.标志基本上是静态检查的,非常清晰/干净.现在,如果我能剃除最后两个角色......

python

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

func(*args,**kwargs,x)抛出无效语法

再次研究自己进入一个角落......

def superfunction(*args, **kwargs, k):
                                 ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

什么是我打破这里的规则?似乎你不应该将'常规'变量与*变量混合,但我找不到任何人确认或否认这一点.我读到了某个地方(我现在无法找到)当前必须先找到某些类型的参数,我相信关键字参数,这可能是也可能不是我的问题的一部分.

python

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