1
ZZ74 81 天前 via Android 1
python 啥时候用分号换行了
不都是靠空格和游标卡尺么 |
2
tuobashao OP |
3
zictos 81 天前
说明包含了 if 就不能用分号了,你直接写在 python 代码中执行也会报错。
你可以用 base64 编码后再解码并用 exec 执行 |
5
zictos 81 天前
@zictos #3
python -c"import base64; exec(base64.b64decode('CjE9PTEKaWYgMT09MToKICAgIHByaW50KCcxMjEnKQo=').decode())" |
6
nagisaushio 81 天前 via Android 3
楼上没说到点上
https://docs.python.org/3/reference/compound_stmts.html#grammar-token-python-grammar-statement python 中有个 simple_stmt 的概念,只有 simple_stmt 才能用分号隔开,但 if 不是 |
7
nagisaushio 81 天前 via Android
|
8
tuobashao OP @nagisaushio 感谢大佬,👍
|
9
zictos 81 天前
@zictos #3 刚又试了下,其实用 exec 后不用 base64 也行,用\n 换行,把所有的换行和缩进都模拟真实的多行代码。
python -c "exec('''1 == 1\nif 1 == 1:\n print('121')''')" |
10
nagisaushio 81 天前 via Android
@zictos 这绕到不知道什么地方去了。Bash 的单引号本来就支持多行字符串,再不济也可以用 heredoc 也就是<<EOF 这种,或者 prtintf ... | python ,完全没必要绕
|
11
zictos 81 天前
@nagisaushio #10 只是写成一行的方法,楼主似乎还是很想写成一行的,不然他可能都不会提这个问题。
prtintf ... | python 其实也并没有简单到哪里去,跟我的例子也差不了太多,我确实一开始不知道这种用法。 |
12
hutoer 81 天前
当 if 前面有语句时,格式是:语句 if 条件 else 语句。
这样就可以了: python -c "1==1; print('121') if 1==1 else print()" |
13
iorilu 81 天前
为什么有这种需求呢, 从 bash 执行字符串代码?
|
14
zictos 81 天前 1
@hutoer #12 这其实只是简单例子,实际情况可能更复杂,比如有 for 循环或 while 循环或 if 嵌套。
也可以平时简单代码用分号,在遇到 if 等情况时就用 exec 。 python -c "1 == 1; exec('''if 1 == 1:\n print('121')'''); 2 == 2" |
16
noahlias 76 天前
这是要把 python 当 bash 使用吗哈哈 总觉得这么执行怪怪的
|