Python中如何使用Optional和默认值参数来提高函数的灵活性?
- 内容介绍
- 文章标签
- 相关推荐
本文共计690个文字,预计阅读时间需要3分钟。
文章目录带默认值的参数Typing.Optional类Optional[X]等价于Union[X, None]带默认值的参数在Python中,类或函数中的参数可以带有默认值。如果参数在调用时没有提供值,它将使用默认值。
例如:pythondef greet(name=Guest): print(fHello, {name}!)
greet() # 输出: Hello, Guest!greet(Alice) # 输出: Hello, Alice!
Typing.Optional类`Typing.Optional`是一个类型注解,用于表示一个参数可以是某个类型或者`None`。
例如:pythonfrom typing import Optional
def get_user_name(user_id: int, name: Optional[str]=None): if name is None: name=Guest print(fUser ID: {user_id}, Name: {name})
get_user_name(1) # 输出: User ID: 1, Name: Guestget_user_name(2, Bob) # 输出: User ID: 2, Name: Bob
Optional[X]等价于Union[X, None]在类型注解中,`Optional[X]`与`Union[X, None]`是等价的。它们都表示参数可以是类型`X`或者`None`。
例如:pythonfrom typing import Optional
def get_age(age: Optional[int]=None): if age is None: age=18 print(fYour age is: {age})
get_age() # 输出: Your age is: 18get_age(25) # 输出: Your age is: 25
带默认值的参数在Python中,函数或类的方法参数可以带有默认值。如果调用时未提供该参数,它将使用默认值。
例如:pythonclass Person: def __init__(self, name: str=Guest): self.name=name
person=Person()print(person.name) # 输出: Guest
person_with_name=Person(Alice)print(person_with_name.name) # 输出: Alice
文章目录
- 带默认值的参数
- Typing.Optional类
- Optional[X]等价于Union[X, None]
带默认值的参数
在Python中的类或者函数中,若参数在声明时附带了它的默认值,则在实例化或调用时,可以选择性地为该参数赋值,例如:
#默认值参数def foo_v1(a: int, b: int = 1):
print(a + b)
#未给b传入实参时,采用默认值
foo_v1(2)
# 输出
# >>> 3
Typing.Optional类
可选类型,作用几乎和带默认值的参数等价,不同的是使用Optional会告诉你的IDE或者框架:这个参数除了给定的默认值外还可以是None,而且使用有些静态检查工具如mypy时,对 a: int =None这样类似的声明可能会提示报错,但使用a :Optional[int] = None不会。
Optional[X]等价于Union[X, None]
看个例子:
from typing import Optional
def foo_v2(a: int, b: Optional[int] = None):
if b:
print(a + b)
else:
print("parameter b is a NoneType!")
#只传入a位置的实参
foo_v2(2)
# 输出
>>> parameter b is a NoneType!
当你给Optional参数的默认值不为None时,看看Optional为IDE的带来的提示:
这意味着在这个函数中b是一个可选参数,并且提示你它的默认值可以为None。
本文共计690个文字,预计阅读时间需要3分钟。
文章目录带默认值的参数Typing.Optional类Optional[X]等价于Union[X, None]带默认值的参数在Python中,类或函数中的参数可以带有默认值。如果参数在调用时没有提供值,它将使用默认值。
例如:pythondef greet(name=Guest): print(fHello, {name}!)
greet() # 输出: Hello, Guest!greet(Alice) # 输出: Hello, Alice!
Typing.Optional类`Typing.Optional`是一个类型注解,用于表示一个参数可以是某个类型或者`None`。
例如:pythonfrom typing import Optional
def get_user_name(user_id: int, name: Optional[str]=None): if name is None: name=Guest print(fUser ID: {user_id}, Name: {name})
get_user_name(1) # 输出: User ID: 1, Name: Guestget_user_name(2, Bob) # 输出: User ID: 2, Name: Bob
Optional[X]等价于Union[X, None]在类型注解中,`Optional[X]`与`Union[X, None]`是等价的。它们都表示参数可以是类型`X`或者`None`。
例如:pythonfrom typing import Optional
def get_age(age: Optional[int]=None): if age is None: age=18 print(fYour age is: {age})
get_age() # 输出: Your age is: 18get_age(25) # 输出: Your age is: 25
带默认值的参数在Python中,函数或类的方法参数可以带有默认值。如果调用时未提供该参数,它将使用默认值。
例如:pythonclass Person: def __init__(self, name: str=Guest): self.name=name
person=Person()print(person.name) # 输出: Guest
person_with_name=Person(Alice)print(person_with_name.name) # 输出: Alice
文章目录
- 带默认值的参数
- Typing.Optional类
- Optional[X]等价于Union[X, None]
带默认值的参数
在Python中的类或者函数中,若参数在声明时附带了它的默认值,则在实例化或调用时,可以选择性地为该参数赋值,例如:
#默认值参数def foo_v1(a: int, b: int = 1):
print(a + b)
#未给b传入实参时,采用默认值
foo_v1(2)
# 输出
# >>> 3
Typing.Optional类
可选类型,作用几乎和带默认值的参数等价,不同的是使用Optional会告诉你的IDE或者框架:这个参数除了给定的默认值外还可以是None,而且使用有些静态检查工具如mypy时,对 a: int =None这样类似的声明可能会提示报错,但使用a :Optional[int] = None不会。
Optional[X]等价于Union[X, None]
看个例子:
from typing import Optional
def foo_v2(a: int, b: Optional[int] = None):
if b:
print(a + b)
else:
print("parameter b is a NoneType!")
#只传入a位置的实参
foo_v2(2)
# 输出
>>> parameter b is a NoneType!
当你给Optional参数的默认值不为None时,看看Optional为IDE的带来的提示:
这意味着在这个函数中b是一个可选参数,并且提示你它的默认值可以为None。

