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