关于Python中expandtabs的用法
先说几个在论坛里面看到的比如dlnb526 老哥讲解的
>>>str1 = 'i\tam\thapp1232y\thahaahha'
>>>str1.expandtabs(5)
'i am happ1232y hahaahha'
这段代码中\t的转换方法是因为\t前面的字符数是9,而给定参数为5,所以按dlnb526老哥的解释是因为python的内置机制当参数小于前面字符数时默认按倍数来,即5*2-9,happ1232y后面空一格,而给定参数
大于字符数时,比如
>>>str1 = 'i\tam\thappy'
>>> str1.expandtabs(5)
'i am happy'
给出的解释i后面的\t转换的字符数5-1=4,m后面的\t为5-2=3
上述两例似乎能够完美解答疑惑,但是在我多次测试后又发现问题了,比如下面的程序
>>> str1='i want goto\tschool'
>>> str1.expandtabs()
'i want goto school'
goto后面的空格数是5,怎么数都是5,按照前面的方法8-4=4才对呀,但是这里偏偏是5,完全懵圈了。。。。。。。
可能是我点子背吧,又连着试了好几个,比如下面的
>>> str1='i want gotothe\tschool'
>>> str1.expandtabs(3)
'i want gotothe school'
>>> str1.expandtabs(8)
'i want gototheschool'
>>> str1.expandtabs(16)
'i want gototheschool'
>>> str1.expandtabs(28)
'i want gotothe school'
>>> str1.expandtabs(32)
'i want gotothe school'
参数3的时候the后面1个空格,参数8的时候2个空格,参数28的时候14个空格,参数32的时候18个空格,彻底懵圈了。。。。。。。。
有没有人能帮忙看看,是不是我理解出了问题,为什么会出现这样的情况?叩谢!!!!!!!
'i want goto' 的长度是 11,默认不指定参数是 expandtabs(8),添加 5 个空格就能凑成 16 个字符(8 的倍数)。其他的同理 zltzlt 发表于 2020-8-14 15:35
'i want goto' 的长度是 11,默认不指定参数是 expandtabs(8),添加 5 个空格就能凑成 16 个字符(8 的倍数 ...
>>> str1='i want gotothe\tschool'
>>> str1.expandtabs()
默认8的时候,前面字符数11,按照你所说的取8的倍数就是16,中间空格应该是5才对,实际是2呀?这咋回事?我被整懵圈了。。。。。。。折腾了一天。。。。 额,这个问题我之前也碰到过,但是后来一想,反正用到这个的时候基本也是制表之类的,都是多个\t的时候才用到,就没太纠结了。
只要多个\t能实现,每个之间相同的空格字符就好了。没必要纠结吧? jackshi70 发表于 2020-8-14 15:54
>>> str1='i want gotothe\tschool'
>>> str1.expandtabs()
默认8的时候,前面字符数11,按照你所说的 ...
'i want gotothe' 是 14 个字符。。。 zltzlt 发表于 2020-8-14 16:02
'i want gotothe' 是 14 个字符。。。
大恩不言谢,兄弟啊,你让我今晚能睡个安稳觉了{:5_110:} jackshi70 发表于 2020-8-14 16:09
大恩不言谢,兄弟啊,你让我今晚能睡个安稳觉了
{:10_297:}客气了~ 整明白了,顺便附上一个地址https://blog.csdn.net/SinclairWang/article/details/87031903?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159739285819724811813957%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159739285819724811813957&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v4-9-87031903.first_rank_ecpm_v3_pc_rank_v4&utm_term=expandtabs&spm=1018.2118.3001.4187,他的解释也挺好的 yhhpf 发表于 2020-8-14 15:59
额,这个问题我之前也碰到过,但是后来一想,反正用到这个的时候基本也是制表之类的,都是多个\t的时候才用 ...
我一般习惯于先纠结一阵。。。。。,不过现在应该已经解决了。。。。。哈哈哈 zltzlt 发表于 2020-8-14 16:02
'i want gotothe' 是 14 个字符。。。
>>> s = str1.expandtabs(4)
>>> s
'i want gototheschool'
>>> s = str1.expandtabs(5)
>>> s
'i want gotothe school'
额,仔细看了下,我和他碰到的问题不一样,参数4和5,反而4比5多了个空格。不过没太纠结- - jackshi70 发表于 2020-8-14 16:24
我一般习惯于先纠结一阵。。。。。,不过现在应该已经解决了。。。。。哈哈哈
那你看下我楼下发你的这个,哈哈哈哈,要不要再纠结会儿? jackshi70 发表于 2020-8-14 16:24
我一般习惯于先纠结一阵。。。。。,不过现在应该已经解决了。。。。。哈哈哈
对了,还有个,不同编译器,肉眼看到的结果还可能不一样,会对不齐,哈哈,反正这玩意感觉不太好用。
IDLE和pycharm结果就不一样(肉眼看到的结果) yhhpf 发表于 2020-8-14 16:25
额,仔细看了下,我和他碰到的问题不一样,参数4和5,反而4比5多了个空格。不过没太纠结- -
好吧!就让我充当一次大佬给你解惑了{:5_97:},i want gotothe是14个字符,你参数为4的时候,因为参数字符数少于\t前面的字符数,而python的机制是当参数字符数少于实际字符数的时候按照8,16这种倍数机制来,引用一段转自CSDN的程序段:print("第一行为基准")
print("123456789012345678901")
s1 = "123456\t7890\t123"
print(s1)
print(s1.expandtabs(6))
print(s1.expandtabs(7))
print(s1.expandtabs(8))
print(s1.expandtabs(9))
s2 = "\t12\t345678\t123"
print(s2)
print(s2.expandtabs())
显示如下:第一行为基准
123456789012345678901
123456 7890 123
123456 7890123
123456 7890 123
1234567890 123
123456 7890 123
12 345678 123
12 345678123
所以对于你说的为啥输入4反而比5多一个空格,原因就是4*4-14=2,5*3-14=1;
咋样?还可以吧。。。。。 yhhpf 发表于 2020-8-14 16:34
对了,还有个,不同编译器,肉眼看到的结果还可能不一样,会对不齐,哈哈,反正这玩意感觉不太好用。
ID ...
对不齐是输入法的问题吧 jackshi70 发表于 2020-8-14 16:41
对不齐是输入法的问题吧
反正我这台机子装了两个中文输入法,每次切换不同的输入法写的代码字都不一样大更别提对齐了。。。。 zltzlt 发表于 2020-8-14 16:11
客气了~
兄弟,我又有问题了。。。。,如果expandtabs参数值跟\t前面的字符数相等是不是默认一个空格? jackshi70 发表于 2020-8-14 16:38
好吧!就让我充当一次大佬给你解惑了,i want gotothe是14个字符,你参数为4的时候,因为参数 ...
额,优秀~~~
还好我是不纠结的人,哈哈 jackshi70 发表于 2020-8-14 16:41
对不齐是输入法的问题吧
不是输入法,
比如:一 和 1,他的宽度是不一样的,而代码不考虑你显示的宽度,只看字符,所以会有出入。不同编译器宽度不一样,所以结果也不一样,总之,这玩意不好用- - yhhpf 发表于 2020-8-14 17:21
不是输入法,
比如:一 和 1,他的宽度是不一样的,而代码不考虑你显示的宽度,只看字符,所以会有出入 ...
好吧,鉴于我还是萌新,后面应该会遇到,暂时不再考虑。。。。。 jackshi70 发表于 2020-8-14 16:59
兄弟,我又有问题了。。。。,如果expandtabs参数值跟\t前面的字符数相等是不是默认一个空格?
我已经试出来了,expandtabs的参数值为1时,不论\t前面多少字符,都只有一个空格,当expandtabs的参数大于1时,增加一个倍数相减
页:
[1]