**kwargs在默认值方面,在Python中使用的正确方法是什么?
kwargs返回字典,但设置默认值的最佳方法是什么,还是有一个?我应该只是作为字典访问它吗?使用get函数?
class ExampleClass:
def __init__(self, **kwargs):
self.val = kwargs['val']
self.val2 = kwargs.get('val2')
Run Code Online (Sandbox Code Playgroud)
一个简单的问题,但我找不到好的资源.人们在我看过的代码中采用不同的方式,并且很难知道要使用什么.
这是非常基本的,但我编码并开始想知道是否有一种pythonic方法来检查是否存在某些东西.这是我如何做到的,如果它是真的:
var = 1
if var:
print 'it exists'
Run Code Online (Sandbox Code Playgroud)
但是当我检查是否存在某些东西时,我经常这样做:
var = 2
if var:
print 'it exists'
else:
print 'nope it does not'
Run Code Online (Sandbox Code Playgroud)
如果我所关心的只是一种浪费,似乎是一种浪费,如果没有其他东西,有没有办法检查是否存在某些东西?
似乎python的许多方面只是功能的重复.除了我在Python中的kwargs和dict中看到的冗余之外还有一些区别吗?
我正在尝试使用limit_choices_to限制Django Admin对ForeignKey的选择,但我无法弄清楚如何正确地做到这一点.
如果类别id为16,这段代码可以实现我想要的,但我无法弄清楚如何使用当前类别id而不是硬编码.
class MovieCategory(models.Model):
category = models.ForeignKey(Category)
movie = models.ForeignKey(Movie)
prefix = models.ForeignKey('Prefix', limit_choices_to={'category_id': '16'},
blank=True, null=True)
number = models.DecimalField(verbose_name='Movie Number', max_digits=2,
blank=True, null=True, decimal_places=0)
Run Code Online (Sandbox Code Playgroud)
有可能以某种方式引用ForeignKey类别的id吗?
是否可以简化kwargs选项的布尔检查?
例如,foo我必须检查很多选项:
def foo(*args, **kwargs):
if 'foo' in kwargs and kwargs['foo'] is True:
do_something()
if 'bar' in kwargs and kwargs['bar'] is True:
do_something_else()
...
Run Code Online (Sandbox Code Playgroud)
一个可能的工作方法是通过增加更多复杂性来隐藏一些复杂性......
def parse_kwargs(kwords, **kwargs):
keywords = {}
for kw in kwords:
keywords[kw] = True if kw in kwargs and kwargs['kw'] is True else False
return keywords
Run Code Online (Sandbox Code Playgroud)
然后在我的主要功能:
def foo(*args, **kwargs):
kw = parse_kwargs(**kwargs)
if kw['foo']:
do_something()
if kw['bar']:
do_something_else()
...
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以使用更简单的方法更少的样板...