python可变参数详解以及lambda函数

def hhh(a,b) :
    print("老师真漂亮")
hhh(1,2)
hhh(a=1,b=2)
"""
    普通函数传参时一般就两种:
    1.默认位置匹配
    2.形参作关键字参数的键,后面接传入的值
    def fack(a,b):
    print(a)
    print(b)
    fack(args=(1,2))也报错,普通定义函数不能像多进程多线程那里“可变参数形式”传参
 """

 可变元组形参

# 可变元组形参


def fack(*a):#这里我没设普通参数
    print(a)

args=(1,2)
args1=[1,2]
args2="我爱你直到海枯石烂,地老天荒"
#直接fack(*args=(1,2))报错,fack(args=(1,2))也报错
fack(*args)
fack(*args1)
fack(*args2)
fack(args)
fack(args1)
fack(args2)
fack((1,2))
fack(*(1,2))
fack([1,2])
fack(*[1,2])
fack("我爱你直到海枯石烂,地老天荒")
fack(*"我爱你直到海枯石烂,地老天荒")
"""
(1, 2)
(1, 2)
('我', '爱', '你', '直', '到', '海', '枯', '石', '烂', ',', '地', '老', '天', '荒')
((1, 2),)
([1, 2],)
('我爱你直到海枯石烂,地老天荒',)
((1, 2),)
(1, 2)
([1, 2],)
(1, 2)
('我爱你直到海枯石烂,地老天荒',)
('我', '爱', '你', '直', '到', '海', '枯', '石', '烂', ',', '地', '老', '天', '荒')

这种输出说明可变元组参数形参定义的函数传入某容器实参时如果没星号就会当成一个容器元素传入可变元组前面的普通形参或者可变元组形参中

有单星号就会按照位置搜索容器里面的元素解包,之后传入函数按照位置匹配(这个时候如果可变元组形参前面有普通形参就会先匹配),
剩下未匹配元素组成新元组(默认的和可变元组形参都是从左向右按位置匹配),可变元组形参会直接指向新元组

这个容器可以是三种序列,应该还可以是别的可迭代对象...
这个单星号解包容器不是可变元组形参特有的,普通形参(普通函数)也可以接收解包后各元素的位置参数匹配
传入一个单星号解包的容器等效于传入一堆离散的位置匹配参数
传入一个双星号解包的字典等效于传入一堆 ”键等于值对“,这玩意也叫“关键字参数”

"""

可变字典形参

#可变字典形参


def printStr(first, **dict):
    print(str(first) + "\n")
    print(dict)


printDic = {"name": "tyson", "age": "99"}
printStr(100, **printDic)
# 等同于
printStr(100, name="tyson", age="99")

"""
第一个printStr会把printDic字典解包成  name="tyson", age="99"这俩关键字参数(应该是可变字典参数不能直接传入键值对,只能关键字参数,不是会报错),
然后传入函数后,普通形参按照位置匹配完后,就由可变字典形参转换成新字典,然后可变字典参数指向它

"""

 当lambda函数遇上可变元组参数:

f=lambda *args:print(args.__class__.__name__)
f(1,2,3,4)

输出:tuple
说明这个*args就是可变元组参数,args这个局部变量指向的是位置匹配后剩下未匹配的1 2 3 4四个元素组成的新元组

 

 

 

更详细请见:

Python可变参数(任意参数)的理解-CSDN博客

 

lambda函数详解:

 需要简单函数作为某函数参数或者返回值(嵌套函数)的时候常用lambda函数

Python中的lambda函数用法_python lambda_sweettea~的博客-CSDN博客 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值