簡體   English   中英

如何檢查傳遞給函數調用的參數是否為空?

[英]How to check arguments passed to the function call are empty?

我希望該函數簡單地檢查是否傳遞了參數。 如果沒有,打印一些東西,否則打個招呼和那個論點。

這是我的代碼示例:

def say_name(name):
  if name is None:
    print("Hello there")
  else:
    print("Hello, "+ name + "!")

運行代碼:

class Test(unittest.TestCase):
  def test_should_say_hello(self):
    self.assertEqual(say_name("Michael"), "Hello, Michael!")

我已經嘗試使用None , Kwargs 並且仍然無法正常工作。 如何檢查參數是否傳遞給函數?

要使參數成為可選參數,請為其分配默認值:

def say_name(name=None):
    if name is None:
        print("Hello there")
    else:
        print("Hello, "+ name + "!")

附錄:正如 Barmar 在對您的問題的評論中指出的那樣,您的函數需要返回一個字符串才能使您的檢查工作。

def say_name(name=None):
    if name is None:
        return "Hello there"
    else:
        return "Hello, "+ name + "!"

檢查函數調用是否傳遞了“任何”參數

通常,為了檢查是否傳遞了任何參數,您可以使用*args (用於非關鍵字可變長度參數列表)**kwargs (用於關鍵字可變長度參數列表)創建函數。 例如:

def check_argument(*args, **kwargs):
    if args or kwargs:   # check if any among the `args` or `kwargs` is present
        return "Argument Passed!"
    else:
        return "Argument Not passed!"

樣品運行:

# For "non-keyworded" argument
>>> check_argument('something')
'Argument Passed!'

# For "keyworded" argument
>>> check_argument(some_param='some_value')
'Argument Passed!'

# For no argumenet    
>>> check_argument()
'Argument Not passed!'

檢查函數調用是否傳遞了任何“特定”參數

對於您的場景,由於您只關心一個特定的參數name並根據傳遞的值執行操作,因此您可以為其函數定義分配一個default值:

#                  v Default value as `None`
def say_name(name=None):
    if name is None:
        return "Hello, there!"
    else:
        return "Hello, "+ name + "!"

上面的函數可以簡化為:

#                    v setting default name as "there"
def say_name(name="there"):
    return "Hello, {}!".format(name)

# Or you may also check it within the format as
def say_name(name=None):
    return "Hello, {}!".format(name or "there")

樣品運行:

>>> say_name()
Hello, there!
>>> say_name('StackOverflow')
Hello, StackOverflow!

def say_hello(*name):

if name:
  return "Hello, "+name[0]+"!"
else:
  return "Hello there!"

這應該工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM