lambda <args>:<expression>
<expression>必须是单个表达式,不能是多个由;分割的表达式
- 使用exec函数
b=1 p=lambda v:exec("global b;b+=1;print(v+b)") print(p(1)) print(p(2))
此种方式返回值为exec的返回值None
- 把<expression>包装成tuple,list,dict,set等
p=lambda :(print(1),print(2),3)[-1] print(p())
但是此种方式依然不能包含赋值等语句
- 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多行语句
-
python -c "for b in range(3):print('vbnm')"
引入分号后,出现错误
解决办法-
echo -e "import sys\nfor b in range(3):print('vbnm')" | python
-
python -c "exec('import sys\nfor b in range(3):print(999)')"
-
python - <<-eof import sys for b in range(3): print('zxx') eof
-
(echo "import sys";echo "for b in range(3):print('vbnm')")|python