Python之函数-形参和返回值
形参
- 可以有缺省值,定义时,如果没有提供该参数,动用缺省值. 缺省值的定义往后放
- 5种
- 1、普通形参:可以有缺省值,2种传实参方式都可以用
- 2、*args 可变仅位置形参,只能接收按照位置传入的实参,可以接收0个或任意个,没有缺省值
- 3、**kwargs 可变仅关键字形参,只能接收关键字传入的实参,可以接收0个或任意个. 形参的最后一个, 没有缺省值
- 4、keyword-only形参,args,或,之后出现的,只仅仅接收关键字传入实参. 缺省值,无所谓前后
- 5、positional-only形参,/之前,仅仅接受位置传入参数
除了可变参数外,都可以有缺省值,定义时,如果没有提供该参数,动用缺省值.
仅位置和普通参数,一起算,缺省值的定义往后放
仅关键字参数,缺省值无所谓先后文章来源地址https://www.toymoban.com/news/detail-735333.html
- keyword-only形参
def foo(*args, x, y):
print(x, y, args)
foo(y=6, x=4), foo(x=4, y=6), foo(1, x=4, y=8), foo(1, 2, 3, 4, y=3, x=3)
# 返回结果:4 6 ()
# 返回结果:4 6 ()
# 返回结果:4 8 (1,)
# 返回结果:3 3 (1, 2, 3, 4)
# 返回结果:(None, None, None, None)
def foo(*args, x, y, **kwargs):
print(x, y, args, kwargs)
foo(a=100, b=2, y=6, x=4), foo(1, 2, x=4, a=100, y=5)
# 返回结果:4 6 () {'a': 100, 'b': 2}
# 返回结果:4 5 (1, 2) {'a': 100}
# 返回结果:(None, None)
def foo(x, *args, y):
print(x, args, y)
foo(1, 2, 3, y=10), foo(y=6, x=7)
# 返回结果:1 (2, 3) 10
# 返回结果:7 () 6
# 返回结果:(None, None)
def foo(x, *args, y):
print(x, args, y)
- positional-only形参,/之前,仅仅接受位置传入参数
def fn(a, b, /):
print(a, b)
fn(1, 2)
# 返回结果:1 2
def bar(a, b, /, c, d=10, *args, m, n, **kwargs):
print(a, b, c, d, '|', m, n, args, kwargs)
# 函数形参5种形参方式都展现出来了。
bar(1, 2, 3, 4, 5, m=6, n=7)
# 返回结果:1 2 3 4 | 6 7 (5,) {}
def config(host, username='Runaway', password='123', port=3306, **options):
connstr = "mysql://{}:{}@{}:{}".format(username, password, host, port)
print(connstr)
# 定义函数时,把重要的参数列在外面,最常改变的参数尽量往前放
config('192.168.1.1'), config('192.168.1.1', 'root', 'root', 2206)
# 返回结果:mysql://Runaway:123@192.168.1.1:3306
# 返回结果:mysql://root:root@192.168.1.1:2206
# 返回结果:(None, None)
参数解构
* 对容器解构,按照位置传实参,字典取的是key
** 只用于mapping(字典),按照kv对实现关键字传参,key要和形参对应
def add(*nums):
s = 0
for i in nums:
s += i
return s
# 求和函数
add(1, 4, 5)
# 返回结果:10
add(*range(5))
# 对range(5)解构
# 返回结果:10
add(*[1, 2]), add(*(1, 2)), add(*{1, 2}), add(*{'a':1, 'b':2}.values())
# 获取字典的value值在解构就可以了。
# 返回结果:(3, 3, 3, 3)
报错
def foo(*args, x, y):
print(x, y, args)
foo(), foo(1, 2, 3, 4, 5), foo(x=7, z=5, y=8)
# 报错原因:x和y没有给值
# 报错内容:TypeError: foo() missing 2 required keyword-only arguments: 'x' and 'y'
def foo(x, *args, y):
print(x, args, y)
foo(1, 2, 3, x=100, y=200)
# 报错原因:# x的值给了2次
# 报错内容:TypeError: foo() got multiple values for argument 'x'
def fn(*, x, y):
print(x, y)
fn()
# 报错原因:星后面的是仅关键字参数,必须指定,上面的函数是定义了一个keyword形参,只能接收仅关键字参数
# 报错内容:TypeError: fn() missing 2 required keyword-only arguments: 'x' and 'y'
def fn(a, b, /):
print(a, b)
fn()
# 报错原因:没有传参
# 报错内容:TypeError: fn() got some positional-only arguments passed as keyword arguments: 'a, b'
fn(1), fn(a=1, b=2)
# 报错原因:/前面仅接受位置传参
# 报错内容:TypeError: fn() missing 2 required positional arguments: 'a' and 'b'
文章来源:https://www.toymoban.com/news/detail-735333.html
到了这里,关于Python之函数-形参和返回值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!