%s在python格式字符串中的含义是什么?

Tyl*_*ler 157 python

%sPython的意思是什么?以下代码的作用是什么?

例如...

 if len(sys.argv) < 2:
     sys.exit('Usage: %s database-name' % sys.argv[0])

 if not os.path.exists(sys.argv[1]):
     sys.exit('ERROR: Database %s was not found!' % sys.argv[1])
Run Code Online (Sandbox Code Playgroud)

And*_*are 188

它是一种字符串格式化语法(它从C借用).

请参阅"PyFormat":

Python支持将值格式化为字符串.虽然这可能包含非常复杂的表达式,但最基本的用法是使用%s占位符将值插入到字符串中.

编辑:这是一个非常简单的例子:

#Python2
name = raw_input("who are you?")
print "hello %s" % (name,)

#Python3+
name = raw_input("who are you?")
print("hello %s" % (name,))
Run Code Online (Sandbox Code Playgroud)

%s令牌允许我插入(和潜在的格式)的字符串.请注意,%s令牌被替换为%符号后传递给字符串的任何内容.另请注意,我在这里也使用了一个元组(当你只有一个使用元组的字符串是可选的时)来说明可以在一个语句中插入和格式化多个字符串.

  • 请注意,这种字符串插值不推荐使用更强大的`str.format`方法. (10认同)
  • 在python3中,raw_input()现在只是输入(),适合那些自己尝试的人. (6认同)
  • 为什么是“(name,)”,而不仅仅是“name”? (5认同)

sqr*_*ram 106

安德鲁的答案很好.

而且只是为了帮助你多一点,这里是你如何在一个字符串中使用多个格式

"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".
Run Code Online (Sandbox Code Playgroud)

如果您使用的是in而不是string,请使用%d而不是%s.

"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12
Run Code Online (Sandbox Code Playgroud)

  • @user391339 代表十进制 :) 他们都在这里 https://docs.python.org/2/library/stdtypes.html#string-formatting-operations (3认同)
  • 不错.%d使您免于转换str(int).知道%s和%d代表什么?我想我会记住它们是字符串和数字. (2认同)

dan*_*lmo 27

format方法是在Python 2.6中引入的.它更强大,使用起来也不困难:

>>> "Hello {}, my name is {}".format('john', 'mike')
'Hello john, my name is mike'.

>>> "{1}, {0}".format('world', 'Hello')
'Hello, world'

>>> "{greeting}, {}".format('world', greeting='Hello')
'Hello, world'

>>> '%s' % name
"{'s1': 'hello', 's2': 'sibal'}"
>>> '%s' %name['s1']
'hello'
Run Code Online (Sandbox Code Playgroud)

  • 如果它解释了问题中的语法是格式化文本而_then_演示了更新的方法,那么这个答案会有所改进.这样它就可以独立存在.提供一个与问题中的示例相同的示例也是一个优点. (11认同)

Bra*_*lor 13

%s表示一个转换类型的字符串使用Python的字符串格式化功能时.更具体地说,%s使用该str()函数将指定值转换为字符串.将此与%r使用repr()函数进行值转换的转换类型进行比较.

查看字符串格式文档.


Om *_*Sao 8

%s并且%d是用于格式化字符串/小数/浮点等的格式说明符或占位符。

常用的格式说明符:

%s :字符串

%d : 小数点

%f :浮动

自我解释代码:

name = "Gandalf"
extendedName = "the Grey"
age = 84
IQ = 149.9
print('type(name):', type(name)) #type(name): <class 'str'>
print('type(age):', type(age))   #type(age): <class 'int'>   
print('type(IQ):', type(IQ))     #type(IQ): <class 'float'>   

print('%s %s\'s age is %d with incredible IQ of %f ' %(name, extendedName, age, IQ)) #Gandalf the Grey's age is 84 with incredible IQ of 149.900000 

#Same output can be printed in following ways:


print ('{0} {1}\'s age is {2} with incredible IQ of {3} '.format(name, extendedName, age, IQ))          # with help of older method
print ('{} {}\'s age is {} with incredible IQ of {} '.format(name, extendedName, age, IQ))          # with help of older method

print("Multiplication of %d and %f is %f" %(age, IQ, age*IQ)) #Multiplication of 84 and 149.900000 is 12591.600000          

#storing formattings in string

sub1 = "python string!"
sub2 = "an arg"

a = "i am a %s" % sub1
b = "i am a {0}".format(sub1)

c = "with %(kwarg)s!" % {'kwarg':sub2}
d = "with {kwarg}!".format(kwarg=sub2)

print(a)    # "i am a python string!"
print(b)   # "i am a python string!"
print(c)    # "with an arg!"
print(d)   # "with an arg!"
Run Code Online (Sandbox Code Playgroud)


ber*_*nie 6

回答你的第二个问题:这段代码做了什么?...

这是接受命令行参数的Python脚本的相当标准的错误检查代码.

所以第一个if声明转换为:如果你没有通过我的论证,我会告诉你将来如何通过我的论证,例如你会在屏幕上看到这个:

Usage: myscript.py database-name
Run Code Online (Sandbox Code Playgroud)

下一个if语句检查您传递给脚本的'database-name'是否实际存在于文件系统中.如果没有,你会收到这样的消息:

ERROR: Database database-name was not found!
Run Code Online (Sandbox Code Playgroud)

文档:

argv [0]是脚本名称(无论这是否是完整路径名,它依赖于操作系统).如果使用解释器的-c命令行选项执行命令,则将argv [0]设置为字符串'-c'.如果没有脚本名称传递给Python解释器,则argv [0]为空字符串.