跳至主要內容

纯表达式(迷惑行为)

小于 1 分钟

纯表达式(迷惑行为)

python在3.8版本增加了海象运算符:=,就是赋值语句的表达式版本

自此,除了with和异常处理之外,所有的操作都可以在表达式中完成了

# 赋值
(a:=1)
# 顺序执行
[print(1),print(2),print(3)]
# 条件语句
[1 if x else 2]
# for循环
[print(i) for i in [1,2,3]]
# 函数定义
(f:=lambda x:x**2)
# 函数及其返回值
(f:=lambda x:[(y:=x**2),y].pop())
# 递归函数
(f:=lambda x:1 if x==1 else x*f(x-1))
# 列表/字典赋值
(lst.__setitem__(0,2))
# 切片赋值
(lst.__setitem__(slice(0,2),[1,2,3,4,5,6]))
# 属性赋值
(a.__setattr__('b',var))
# +=之类的运算
(a.__iadd__(233))
# 类定义
# class A(baseA):
#     a = 1
#     def __init__(self,var):
#         self.b = var
(A:=type('A',(),{'a':1,'__init__':(lambda self,var:(self.__setattr__('b',var)))}))
# while 循环
[
    (until:=type('R',(),{
        '__init__':lambda self, f:self.__setattr__('f',f),
        '__iter__':lambda self: self,
        '__next__':lambda self: None if self.f() else next(i for i in [])})),
    (i:=0),
    [[print(i), i:=i+1] for _ in until(lambda:i<10)],
]

写一个reduce函数并运行

[
(f := (lambda f,objs:[
    (r:=objs.pop(0)),
    [(r:=f(r,o)) for o in objs],
    r
    ].pop())),
(result := f(int.__add__,[2,3,3,3])),
print(result),
]

输出是

11
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.0.0-alpha.10