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