|
发表于 2021-1-29 21:50:03
|
显示全部楼层
本帖最后由 Stubborn 于 2021-1-29 21:51 编辑
- # -*- coding: utf-8 -*-
- # !/usr/bin/python3
- """
- @ version: ??
- @ author: Alex
- """
- def function(val, val_type=None):
- """
- 如果默认值是 可变类型容器,例如 list,dict,set
- 那么应该把默认值设置为None,其代码这样写。
- """
- # if not val_type: 应该使用is None , 避免其他的参数,如 0、空集合、空列表被当做False误判
- if val_type is None:
- val_type = []
- _no_value = object()
- def function_one(val, val_type=_no_value):
- """
- 如果不打算提供一个默认值
- 只想检测可选参数是否被赋予了特定的值,其代码这样写。
- """
- if val_type is _no_value: # Note that _no_value is a global variable
- print("No val_type value supplied")
复制代码
对默认参数的赋值,只在函数定义的时候绑定一次,例如上面 function_one 的默认参数,在定义的时候 val_type 已经指向了 object 对象,对 _no_value 的值修改,影响不到 val_type ,只会影响 if 判断。所以给参数的默认是应该总是:不可变对象、比如True,False,字符串,数字。 |
|