【问题标题】:What's the difference between %s and %d in Python string formatting?Python 字符串格式化中的 %s 和 %d 有什么区别?
【发布时间】:2011-05-16 09:29:30
【问题描述】:

我不明白 %s%d 做什么以及它们是如何工作的。

【问题讨论】:

    标签: python string-formatting


    【解决方案1】:

    它们用于格式化字符串。 %s 充当字符串的占位符,而 %d 充当数字的占位符。它们的关联值通过使用 % 运算符的元组传入。

    name = 'marcog'
    number = 42
    print '%s %d' % (name, number)
    

    将打印marcog 42。请注意,name 是一个字符串 (%s),number 是一个整数(%d 表示十进制)。

    详情请见https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting

    在 Python 3 中,示例如下:

    print('%s %d' % (name, number))
    

    【讨论】:

    • 在 Google Chrome 中:设置 >> 搜索 >> 管理搜索引擎...注意 %s 如何与搜索引擎配置一起使用。 Chrome 使用%s 替换地址栏中输入的关键字。 Python 以类似的方式使用%s。在print('description: %s' % descrip) 中,%s 运算符将替换为存储在descrip 变量中的文本字符串。圆括号可防止 Python 3 中出现错误消息。
    • 你怎么称呼这些 %s、%d 等等?
    • @Chaine 它们被称为占位符,它们是可替换的变量
    • @Leo 谢谢!
    【解决方案2】:

    来自python 3 doc

    %d 是十进制整数

    %s 用于通用字符串或对象,如果是对象,它将转换为字符串

    考虑下面的代码

    name ='giacomo'
    number = 4.3
    print('%s %s %d %f %g' % (name, number, number, number, number))
    

    输出将是

    贾科莫 4.3 4 4.300000 4.3

    如您所见,%d 将截断为整数,%s 将保持格式,%f 将打印为浮点数,%g 用于通用数字

    显然

    print('%d' % (name))
    

    会产生异常;您不能将字符串转换为数字

    【讨论】:

    • 这值得更多的支持。它解释了如果将%s 用于数字会发生什么。
    • %d 和 %i 有什么区别,如果两者都转换为整数? %d 与 %i 和 %f 相比如何?
    【解决方案3】:

    %s 用作要注入格式化字符串的字符串值的占位符。

    %d 用作数字或十进制值的占位符。

    例如(对于 python 3)

    print ('%s is %d years old' % ('Joe', 42))
    

    会输出

    Joe is 42 years old
    

    【讨论】:

    • 真的不能解释问题吗?我不是在解释问题,而是在为问题提供一个简洁的答案。该问题专门询问了 %s 和 %d 的用途。
    • 你知道 %i 和 %d 的区别吗? python支持%i吗?
    【解决方案4】:

    这些都是信息丰富的答案,但没有一个能够完全理解%s%d 之间区别的核心。

    %s 告诉格式化程序在参数上调用str() 函数,并且由于我们根据定义强制转换为字符串,%s 本质上只是在执行str(arg)

    另一方面,%d 在调用str() 之前在参数上调用int(),如str(int(arg)),这将导致int 强制以及str 强制。

    例如,我可以将十六进制值转换为十进制,

    >>> '%d' % 0x15
    '21'
    

    或截断浮点数。

    >>> '%d' % 34.5
    '34'
    

    但如果参数不是数字,该操作将引发异常。

    >>> '%d' % 'thirteen'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: %d format: a number is required, not str
    

    因此,如果意图只是调用str(arg),那么%s 就足够了,但如果您需要额外的格式(如格式化浮点小数位)或其他强制,则需要其他格式符号。

    使用f-string 表示法,当您不使用格式化程序时,默认值为str

    >>> a = 1
    >>> f'{a}'
    '1'
    >>> f'{a:d}'
    '1'
    >>> a = '1'
    >>> f'{a:d}'
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: Unknown format code 'd' for object of type 'str'
    

    string.format 也是如此;默认为str

    >>> a = 1
    >>> '{}'.format(a)
    '1'
    >>> '{!s}'.format(a)
    '1'
    >>> '{:d}'.format(a)
    '1'
    

    【讨论】:

    • 这应该是公认的答案。这是唯一真正解释差异的原因。
    • 鉴于我回答晚了 9 年,这是可以理解的。但是,我对答案不满意,所以我添加了一个。
    【解决方案5】:

    这些是占位符:

    例如:'Hi %s I have %d donuts' %('Alice', 42)

    这行代码将用 Alice (str) 替换 %s,用 42 替换 %d。

    输出:'Hi Alice I have 42 donuts'

    大多数情况下,这可以通过“+”来实现。为了更深入地了解您的问题,您可能还需要检查 {} / .format()。这是一个例子:Python string formatting: % vs. .format

    还可以在这里看到一个 google python 教程视频@40',它有一些解释 https://www.youtube.com/watch?v=tKTZoB2Vjuk

    【讨论】:

      【解决方案6】:

      %d%s 字符串格式化“命令”用于格式化字符串。 %d 用于数字,%s 用于字符串。

      举个例子:

      print("%s" % "hi")
      

      print("%d" % 34.6)
      

      传递多个参数:

      print("%s %s %s%d" % ("hi", "there", "user", 123456)) 将返回 hi there user123456

      【讨论】:

        【解决方案7】:

        %d%s 是占位符,它们用作可替换变量。例如,如果您创建 2 个变量

        variable_one = "Stackoverflow"
        variable_two = 45
        

        您可以使用变量的元组将这些变量分配给字符串中的句子。

        variable_3 = "I was searching for an answer in %s and found more than %d answers to my question"
        

        请注意,%s 适用于字符串,%d 适用于数字或十进制变量。

        如果你打印variable_3,它看起来像这样

        print(variable_3 % (variable_one, variable_two))
        

        我在 StackOverflow 中寻找答案,找到了超过 45 个问题的答案。

        【讨论】:

          【解决方案8】:

          它们是格式说明符。当您想要将 Python 表达式的值包含到字符串中时使用它们,并强制执行特定格式。

          比较详细的介绍见Dive into Python

          【讨论】:

            【解决方案9】:

            根据最新标准,应该这样做。

            print("My name is {!s} and my number is{:d}".format("Agnel Vishal",100))
            

            请检查python3.6 docssample program

            【讨论】:

              【解决方案10】:

              %s 用于为字符串保存空间 %d 用于为数字保留空间

              name = "Moses";
              age = 23
              print("My name is %s am CEO at MoTech Computers " %name)
              print("Current am %d years old" %age)
              print("So Am %s and am %d years old" %(name,age))
              

              Program output

              此视频深入介绍了该提示https://www.youtube.com/watch?v=4zN5YsuiqMA

              【讨论】:

              • 欢迎来到 Stack Overflow!你的答案与其他 12 个人有何不同?
              • 这些格式几乎都是一样的,但我只想举更多例子来加深理解
              • 太棒了!您可以通过将程序输出添加为文本而不是图像来改进您的答案。
              • 感谢您的关心,我会做一些改变,不客气
              【解决方案11】:

              如果你想避免 %s 或 %d 那么......

              name = 'marcog'
              number = 42
              print ('my name is',name,'and my age is:', number)
              

              输出:

              my name is marcog and my name is 42
              

              【讨论】:

              • 这个答案与问题有什么关系?提问者询问%s%d 的使用。
              • 顺便说一句,您显示的代码在 Python 3.5.1 中无效:print 是 Python 3 中的函数,而不是语句。
              • 我已经编辑了帖子...请看。实际上,我将其发布为一种替代方法。如果有人可能避免使用 %d 或 %s。感谢您的错误检测,..我​​已经编辑了代码。
              • 感谢您的编辑。不幸的是,这仍然不是问题的答案。
              【解决方案12】:

              说到这...
              python3.6 带有f-strings,这使得格式化更容易!
              现在,如果您的 python 版本大于 3.6,您可以使用以下可用方法格式化您的字符串:

              name = "python"
              
              print ("i code with %s" %name)          # with help of older method
              print ("i code with {0}".format(name))  # with help of format
              print (f"i code with {name}")           # with help of f-strings
              

              【讨论】:

                【解决方案13】:

                这里是演示 Python 字符串格式化的基本示例和一种新的方法。

                my_word = 'epic'
                my_number = 1
                
                print('The %s number is %d.' % (my_word, my_number))  # traditional substitution with % operator
                

                //史诗编号为1。

                print(f'The {my_word} number is {my_number}.')  # newer format string style
                

                //史诗编号为1。

                两者打印相同。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2019-06-13
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-07-07
                  • 1970-01-01
                  • 2022-04-08
                  • 2022-01-22
                  • 1970-01-01
                  相关资源
                  最近更新 更多