常用的字符串格式化方法有哪些,字符串输入格式

文章目录1 .老式字符串格式2 .新型字符串格式3 .字符串插值法(python 3.6 ) —— f-string4. Template Strings我应该选择哪种字符串格式方法?

参考:

《Python Tricks: A Buffet of Awesome Python Features》

1 .过时的字符串格式errno=50159747054 name=’ bob ‘ ‘ hello,%s’ % name’Hello,Bob’ ‘%x’ % errno #整数转换为十六进制数字,字符串’ badc 0f

如果对一个字符串执行多个替换,则“早期版本”字符串的格式语法将略有更改。 % -运算符只接受一个参数,因此必须将右侧封装在一个元组中

‘ Hey %s,there is a0x%x error!’ %(name,errno ) ‘ Hey Bob,there is a0xbadc0ffee error!’ 将映射传递给% -运算符时,也可以在格式字符串中用名称引用变量替换

‘ hey%(name ) s,thereisa0x% ) Errno ) x error!’ % {. ‘name’: name,’ errno’: errno }’Hey Bob,there is a0xbadc0ffee error!’ 参考:

打印样式字符串格式

2 .新的字符串格式使用格式设置字符串格式

‘ Hello,{}’.format(name ) Hello,bob ) format支持将变量赋值到指定位置

‘ Hey {name},there is a0x{errno:x} error!’ . format(name=name,errno=errno ) Hey Bob,there is a0xbadc0ffee error! ‘在格式中,即使交换了错误和名称的位置,仍然可以输出正确的结果

‘ Hey {name},there is a0x{errno:x} error!’ . format(Errno=Errno,name=name ) ) Hey Bob,there is a0xbadc0ffee error! ‘ errno后面的:x表示输出十六进制

‘ int: {0:d}; hex: {0:x}; oct: {0:o}; GDDWN:{0:b}.format(42 ) int: 42; hex: 2a; oct: 52; gddwn: 101010’ # with0x,0o,or0bas prefix : ‘ int : { 0: d }; hex: {0:#x}; oct: {0:#o}; GDDWN:{0:#b}.format(42 ) int: 42; hex:0x2a; oct: 0o52; gddwn: 0b101010 ‘参考:

str.format

字符串格式

格式字符串同步

3 .为字符串插值法(python 3.6 ) —— f-string python3.6添加了一种格式化字符串的新方法。 此方法允许在字符串常量中嵌入python表达式。

f’Hello,{name}!’ “你好,鲍勃! ”这个方法可以嵌入python表达式,所以也可以用于内联运算。

a=5b=10f ‘ fiveplustenis { ab } and not {2* (ab ) }.’ fiveplustenis 15 and not 30.’ defgreet (name,question ) 3360 how ‘ . greet(‘Bob ‘,’ going ‘ ) ‘ Hello,Bob! How’s it going?’ 那么这个函数怎么做呢? 实际上,f这个字符串执行了以下操作

defgreet(name,question ) :return ) ) Hello,’ name )! How’s it ‘ question ‘? ‘)要在f-字符串中输出其他二进制数字(如十六进制数字),请在:后加上#x。 官网上写着:#0x,打印后效果相同。

f’Hey {name},there’s a {errno:#x} error! ‘ ‘ Hey Bob,there’s a0xbadc0ffee error!’ f’Hey {name},there’s a {errno:#0x} error! ‘ ‘ Hey Bob,there’s a0xbadc0ffee error!’ 参考:

格式化字符串写入

4.templatestringstemplatestrings,简单。

fromstringimporttemplatet=template (‘ hey,$name!’ (t.substitute(name=name )、Hey、Bob! ‘需要的是从python内置的string库读取Template,定义字符串,将该字符串放入Template () ),然后执行substitute ) )方法。

templ_string=’Hey $name,there is a $error error!’ template(templ_string ).substitute ) name=name,error=hex(errno ) ) Hey Bob,there is a0xbadc0ffee error! 应用’ Template Strings的最好示例是当wrdy处理用户生成的字符串时。

例如,用户可以通过设置字符串的格式来获得程序中的任何变量。 这意味着,如果恶意用户可以提供格式化字符串,则还可以泄露密钥和其他敏感信息。

themorecomplexformattingmini -语言语言软件转换器格式-

tingtechniquesmightintroducesecurityvulnerabilitiestoyourpro –

grams. For example,it’spossibleforformatstringstoaccessarbitrary

在your program中启用变量。

That means,ifamalicioususercansupplyaformatstringtheycan

alsopotentiallyleaksecretkeysandothersensibleinformation!

here’sasimpleproofofconceptofhowthisattackmightbeused :

secret=’ this-is-a-secret ‘ classerror 3360 . def _ init _ (self ) : passerr=error (_ user _ inpuinpuing uh-oh . user _ input.format (error=err ) this-is-a-secret )

user _ input=’ $ { error._ _ init _._ _ globals _ [ secret ] } ‘ template (user _ input ).substitute )。 如果格式化字符串是用户提供的,请使用模板字符串。 为了避免安全问题,如果使用的是python 3.6,请使用字符串插值。 如果使用的是python 3.6之前的版本,请使用第二种,即新的字符串格式化方法

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注