首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查是否在Python中定义了一个变量以避免?

检查是否在Python中定义了一个变量以避免?
EN

Stack Overflow用户
提问于 2019-07-20 12:45:46
回答 2查看 116关注 0票数 3

我经常读到,检查一个变量是否被定义,在某种程度上是一个糟糕的设计选择。但是,我看不到在类方法中处理可选参数的其他方法。那么,在下面的代码中处理make_sound_twice的可选参数的方式有问题吗?

代码语言:javascript
复制
class Cat(object):
    def __init__(self):
        self.default_sound = 'meow'

    def make_sound_twice(self, sound=None):
        if sound is None:
            sound = self.default_sound
        print("{sound} {sound}".format(sound=sound))


kitty = Cat()

kitty.make_sound_twice()

custom_sound = 'hiss'
kitty.make_sound_twice(custom_sound)

custom_sound = 0
kitty.make_sound_twice(custom_sound)

这将打印以下几行:

代码语言:javascript
复制
meow meow
hiss hiss
0 0

此时未定义self,因此不能简单地设置默认值,而不能设置None

代码语言:javascript
复制
def make_sound_twice(self, sound=self.default_sound):
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-20 12:48:13

--你展示的代码绝对没有什么问题。,实际上,它是非常惯用的。

我经常读到,检查一个变量是否定义了某种程度上是一个错误的设计选择。

在您显示的示例中,定义了变量。它只是设置为None

is None检查它是完全可以的。在某些情况下,可以使用以下技术将所有falsy值(None0""等)替换为默认值:

代码语言:javascript
复制
DEFAULT = ...

def f(arg = None):
   arg = arg or DEFAULT
   ...

但是,这不适用于您的情况,因为您声明您需要能够将零传递给您的函数。

票数 8
EN

Stack Overflow用户

发布于 2019-07-20 12:51:27

你可以让它稍微干净一点:

代码语言:javascript
复制
def make_sound_twice(self, sound=None):
    sound = self.default_sound if sound is None else sound
    print("{sound} {sound}".format(sound=sound))

或者另一种选择:

代码语言:javascript
复制
def make_sound_twice(self, sound=None):
    sound = sound if sound is not None else self.default_sound
    print("{sound} {sound}".format(sound=sound))

但你现在所做的只是惯用的Python。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57124865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档