鱼C论坛

 找回密码
 立即注册
查看: 3114|回复: 7

[已解决]tab和\t的区别?expandtabs的正确用法?

[复制链接]
发表于 2022-8-22 09:38:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
查了很多资料,电脑键盘上面的tab键和程序里面的\t应该是同一个东西,但是:

print("a\tb")
a        b
print("a    b")
a    b

上面那个用的\t,输出后两字母间距长度为8空格
下面两个字母之间我是用的电脑键盘上的tab键,输出却只有4空格

我的编辑器里设置的默认值也是4,那为何两个相同的东西输出的空格数目却不一样嘞?




第二个问题:
str="a\tb"
print(str.expandtabs(10))   
a         b

str="a  b"                            #这个间距是电脑键盘敲出来的tab
print(str.expandtabs(10))
a  b

为何expandtabs他只对\t起作用啊?对电脑键盘敲出来的tab却不起作用?




第三个问题:
str='a  b'        #两字母间距为俩个空格
ad='a   b'      #两字母间距为三空格
a='a    b'      #两字母间距为四空格
但是这三个字符串相邻字母间我都是用键盘敲出来的tab键,为何会出现这种长度不一致的情况?
最佳答案
2022-8-22 11:20:09
本帖最后由 kishere 于 2022-8-22 11:24 编辑
因为菜所以卷 发表于 2022-8-22 11:09
首先谢谢您的回答

针对您的解答,我是这样理解的:



看这张图, 我设置的是tab长度为4, abc之前的都是tab, 所以tab会尝试自动对齐到4的整数倍的地方, 比如int 后面的第一个tab对齐到了4(长度只占了1), 第二个就占了4, 第二行char后面的tab也占了4, 第三行, string一共6个字符, 这时按tab, tab会尝试对齐到6之后的第一个4的整数倍的地方:8, 至此, abc三个变量在垂直方向上就对齐了, 也就是说tab本来就不是固定长度的, 他只会按照设定的长度值自动调整自己的长度, 以对齐文本到指定的长度值的整数倍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-22 10:21:22 | 显示全部楼层
tab 制表符, 以前没有excel, 但是人们又有制作表格的需求, 所tab出现了, 在不同长度的两行后面打上tab, 它会自动将两行对齐到同一个位置, 因此tab是没有固定长度的字符, a \t b是告诉系统在ab之间输出一个tab, 但是直接printf("a    b");  你在编辑器设置的4空格, 编辑器会直接在你按下tab时改成4个空格, 但实际上tab和空格是不一样的, 某些编辑器可以显示tab和空格, 空格一般是 · tab是 ->
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-22 10:27:57 | 显示全部楼层
python对缩进的要求比较严格, 缩进和空格混用会导致程序报错, 所以VSCode等编辑器都会让你设置Tab Size, 以保证你每次打出来的tab都是一样的, 但是像C++等语言, 对于缩进的要求并不严格, 通常变量类型又偏偏不一样长, 这时候打上tab可以让后面的变量名对齐提高代码可读性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-22 10:35:01 | 显示全部楼层
我的pycharm正常
"C:\d\Program Files\python3\python.exe" C:/d/test/tab_test.py
97
9  # 9是tab的ascii码
98
a        b
====================================================================================================
97
9
98
a        b
s = 'a        b'
for i in s:
    print(ord(i))
print(s)
print('=' * 100)

s = 'a\tb'
for i in s:
    print(ord(i))
print(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-22 10:36:45 | 显示全部楼层
python 3.10的 shell 帮自动转成空格,其他的IDLE不太清楚。
要不你试试逐个print ord检测一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-22 11:09:15 | 显示全部楼层
kishere 发表于 2022-8-22 10:21
tab 制表符, 以前没有excel, 但是人们又有制作表格的需求, 所tab出现了, 在不同长度的两行后面打上tab, 它 ...

首先谢谢您的回答

针对您的解答,我是这样理解的:
1)在电脑中默认\t占据空间为八个空格(这个默认值无法修改),所以在字符串中出现\t时,print的表现为8空格,这就解释了第一个问题
2)但是电脑键盘上的tab键在编辑器中是可以修改的,而且在IDLE中会把tab键自动转化成为对应的空格数,而不是以tab的形式存在于程序中,因此这也解释了为何在第二个问题中expandtabs为何无法响应电脑键盘上输入的tab键

但是针对第三个问题,为何命名字符串名称的长短不一样,会使a,b两个字母间tab表现的空格数目也不一样啊?我还是很疑惑

请您指正,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-22 11:12:47 | 显示全部楼层
suchocolate 发表于 2022-8-22 10:36
python 3.10的 shell 帮自动转成空格,其他的IDLE不太清楚。
要不你试试逐个print ord检测一下。

谢谢您的解答

我根据您的想法测试了一下,发现确实在IDLE里他把tab直接在程序中以空格的方式存在了,而\t是以tab的形式存在的,这解答了我的前两个问题,但面对第三个问题我依旧没有头绪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-22 11:20:09 | 显示全部楼层    本楼为最佳答案   
本帖最后由 kishere 于 2022-8-22 11:24 编辑
因为菜所以卷 发表于 2022-8-22 11:09
首先谢谢您的回答

针对您的解答,我是这样理解的:



看这张图, 我设置的是tab长度为4, abc之前的都是tab, 所以tab会尝试自动对齐到4的整数倍的地方, 比如int 后面的第一个tab对齐到了4(长度只占了1), 第二个就占了4, 第二行char后面的tab也占了4, 第三行, string一共6个字符, 这时按tab, tab会尝试对齐到6之后的第一个4的整数倍的地方:8, 至此, abc三个变量在垂直方向上就对齐了, 也就是说tab本来就不是固定长度的, 他只会按照设定的长度值自动调整自己的长度, 以对齐文本到指定的长度值的整数倍
微信截图_20220822112048.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 14:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表