python中lambda实现赋值和多语句 & 单行命令行中执行多语句

  

lambda <args>:<expression>

<expression>必须是单个表达式,不能是多个由;分割的表达式

  1. 使用exec函数
    b=1
    p=lambda v:exec("global b;b+=1;print(v+b)")
    print(p(1))
    print(p(2))
    

     

     此种方式返回值为exec的返回值None

     

  2. 把<expression>包装成tuple,list,dict,set等
    p=lambda :(print(1),print(2),3)[-1]
    print(p())
    

     

     但是此种方式依然不能包含赋值等语句

     

  3. lambda中<expression>不能使用;
    import sys
    p=lambda :sys.stdout.write('first');sys.stdout.write('second')
    p()
    

     

     

    import sys
    p=lambda :[None,sys.stdout.write('first'),sys.stdout.write('second')][0]
    print(p())

    依然不能在列表中出现return

在单行命令行中执行Python多行语句

  1. python -c "for b in range(3):print('vbnm')"

     

     

  2.  

     引入分号后,出现错误
    解决办法

  3. echo -e "import sys\nfor b in range(3):print('vbnm')" | python

     

  4. python -c "exec('import sys\nfor b in range(3):print(999)')"

     

  5. python - <<-eof
    import sys
    for b in range(3):
        print('zxx')
    eof

     

  6. (echo "import sys";echo "for b in range(3):print('vbnm')")|python

     

posted @ 2020-10-02 18:08  ascertain  阅读(3379)  评论(0编辑  收藏  举报