问题:%s在python格式字符串中是什么意思?
%s
在Python 中是什么意思?下面的代码有什么作用?
例如…
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])
What does %s
mean in Python? And what does the following bit of code do?
For instance…
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])
回答 0
这是一种字符串格式语法(它是从C借用的)。
请参阅“ PyFormat”:
Python支持将值格式化为字符串。尽管这可能包含非常复杂的表达式,但最基本的用法是使用%s
占位符将值插入字符串。
编辑:这是一个非常简单的示例:
#Python2
name = raw_input("who are you? ")
print "hello %s" % (name,)
#Python3+
name = input("who are you? ")
print("hello %s" % (name,))
该%s
令牌允许我插入(和潜在的格式)的字符串。请注意,%s
令牌被替换为%
符号后传递给字符串的任何内容。还要注意,我也在这里使用一个元组(当您只有一个字符串时,使用元组是可选的),以说明可以在一个语句中插入多个字符串并设置其格式。
It is a string formatting syntax (which it borrows from C).
Please see “PyFormat”:
Python supports formatting values into
strings. Although this can include
very complicated expressions, the most
basic usage is to insert values into a
string with the %s
placeholder.
Edit: Here is a really simple example:
#Python2
name = raw_input("who are you? ")
print "hello %s" % (name,)
#Python3+
name = input("who are you? ")
print("hello %s" % (name,))
The %s
token allows me to insert (and potentially format) a string. Notice that the %s
token is replaced by whatever I pass to the string after the %
symbol. Notice also that I am using a tuple here as well (when you only have one string using a tuple is optional) to illustrate that multiple strings can be inserted and formatted in one statement.
回答 1
安德鲁的答案很好。
为了进一步帮助您,以下是在一个字符串中使用多种格式的方法
"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".
如果使用整数而不是字符串,请使用%d代替%s。
"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12
Andrew’s answer is good.
And just to help you out a bit more, here’s how you use multiple formatting in one string
"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".
If you are using ints instead of string, use %d instead of %s.
"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12
回答 2
该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'
The format
method was introduced in Python 2.6. It is more capable and not much more difficult to use:
>>> "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'
回答 3
%s
表示一个转换类型的字符串使用Python的字符串格式化功能时。更具体地说,%s
使用该str()
函数将指定值转换为字符串。将此与%r
使用该repr()
函数进行值转换的转换类型进行比较。
看一下用于字符串格式化的文档。
%s
indicates a conversion type of string when using python’s string formatting capabilities. More specifically, %s
converts a specified value to a string using the str()
function. Compare this with the %r
conversion type that uses the repr()
function for value conversion.
Take a look at the docs for string formatting.
回答 4
%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!"
%s
and %d
are Format Specifiers or placeholders for formatting strings/decimals/floats etc.
MOST common used Format specifier:
%s
: string
%d
: decimals
%f
: float
Self explanatory code:
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!"
回答 5
在回答您的第二个问题:此代码有什么作用?…
这是用于接受命令行参数的Python脚本的相当标准的错误检查代码。
因此,第一个if
语句的意思是:如果您还没有给我一个论点,我将告诉您将来应该如何给我一个论点,例如,您将在屏幕上看到以下内容:
Usage: myscript.py database-name
下if
一条语句检查以查看传递给脚本的“数据库名称”在文件系统上是否实际存在。如果没有,您将收到以下消息:
ERROR: Database database-name was not found!
从文档中:
argv [0]是脚本名称(是否为完整路径名取决于操作系统)。如果命令是使用解释器的-c命令行选项执行的,则argv [0]设置为字符串’-c’。如果没有脚本名称传递给Python解释器,则argv [0]为空字符串。
In answer to your second question: What does this code do?…
This is fairly standard error-checking code for a Python script that accepts command-line arguments.
So the first if
statement translates to: if you haven’t passed me an argument, I’m going to tell you how you should pass me an argument in the future, e.g. you’ll see this on-screen:
Usage: myscript.py database-name
The next if
statement checks to see if the ‘database-name’ you passed to the script actually exists on the filesystem. If not, you’ll get a message like this:
ERROR: Database database-name was not found!
From the documentation:
argv[0] is the script name (it is
operating system dependent whether
this is a full pathname or not). If
the command was executed using the -c
command line option to the
interpreter, argv[0] is set to the
string ‘-c’. If no script name was
passed to the Python interpreter,
argv[0] is the empty string.
回答 6
这是Python3中的一个很好的例子。
>>> a = input("What is your name?")
What is your name?Peter
>>> b = input("Where are you from?")
Where are you from?DE
>>> print("So you are %s of %s" % (a, b))
So you are Peter of DE
Here is a good example in Python3.
>>> a = input("What is your name?")
What is your name?Peter
>>> b = input("Where are you from?")
Where are you from?DE
>>> print("So you are %s of %s" % (a, b))
So you are Peter of DE