代码之家  ›  专栏  ›  技术社区  ›  Léo Léopold Hertz 준영

无法准确理解一行python代码

  •  1
  • Léo Léopold Hertz 준영  · 技术社区  · 15 年前

    Alex's answer 翻译成英语时有以下几行

    print "%2d. %8.2f %8.2f %8.2f" % (    
                i, payment, interest, monthPayment)
    

    我对这条线不确定

    "%2d. %8.2f %8.2f %8.2f" %         #Why do we need the last % here?
    

    这似乎意味着

    1. 应用%2d
    2. 将%8.2f应用于付款
    3. 将%8.2f应用于利息
    4. 将%8.2f应用于每月付款

    这个词的意思是

    1. %2d.:两位小数的十进制表示法。

      2-4。%8.2f:两位小数的浮点表示法

    我不知道为什么我们要使用8.2f中的8。

    你如何理解这条充满挑战的路线?

    6 回复  |  直到 15 年前
        1
  •  7
  •   Martin Beckett    15 年前

    8.2中的8是宽度
    “要打印的最小字符数。如果要打印的值小于此数字,则结果将用空格填充。即使结果更大,该值也不会被截断。”
    2是小数位数

    最后的%只是将格式字符串(引号)与参数列表(括号中)链接起来。 他们选择了一个百分比来做这件事,这有点令人困惑——这可能是一些深层次的Python原因。

    编辑:显然“%”的使用仅仅是因为“%”在格式中使用,这是愚蠢的,并保证会导致混淆。就像在浮点数的末尾需要一个额外的点来表示它是浮点数!

        2
  •  4
  •   Kathy Van Stone    15 年前

    最后%是一个运算符,它接受前面的字符串和后面的元组,并按照您的说明应用格式。见 Python tutorial 了解更多详细信息。

        3
  •  1
  •   Calum    15 年前

    %是生成格式字符串的运算符。一个简单的例子是:

    "%s is %s" % ( "Alice", "Happy" )
    

    它将对字符串进行计算 "Alice is Happy" .提供的格式字符串定义了如何将传递的值放入字符串中;语法可用 here . 简而言之 d 是“视为十进制数”,并且 8.2 是“填充到8个字符,四舍五入到2个小数位”。从本质上讲,它看起来特别像是使用了这种格式,这样当以单空格字体查看答案时,答案就会排成一行。:)

    在我的代码示例中, s 表示“作为字符串处理”。

        4
  •  1
  •   Martin P. Hellwig    15 年前

    字符串后的百分比指示python尝试填充 “%”运算符,其中项位于“%”运算符右侧的列表中。

    “%”运算符知道通过在字符串中查找以%开头的字符来查找字符串中的变量。

    您的困惑是您认为字符串中的%运算符和%字符是相同的。

    试着这样看,字符串%外是一个运算符,字符串内可能是替换的模板。

        5
  •  1
  •   gimel    15 年前

    像往常一样,需要对文档进行报价- string-formatting :

    字符串和Unicode对象有一个唯一的内置操作: %运算符 (模)。这也被称为 字符串格式 插值运算符 . 给定格式%值(其中格式是字符串或Unicode对象),格式中的%转换规范将替换为零个或多个值元素。其效果类似于在C语言中使用sprintf。

    以及要解释的转换说明符的描述 %8.2f

    转换说明符包含两个或多个字符,并具有以下组件,这些组件必须按此顺序出现:

    1. 标记说明符开头的“%”字符。
    2. 映射键(可选),由带括号的字符序列组成(例如,(somename))。
    3. 转换标志(可选),影响某些转换类型的结果。
    4. 最小字段宽度(可选)。如果指定为“*”(星号),则从值中的元组的下一个元素读取实际宽度,要转换的对象位于最小字段宽度和可选精度之后。
    5. 精度(可选),以“.”(点)表示,后跟精度 . 如果指定为“*”(星号),则从值中的元组的下一个元素读取实际宽度,要转换的值在精度之后。
    6. 长度修改器(可选)。
    7. 转换类型。

    当右参数是字典(或其他映射类型)时,格式字符串包括映射键(2)。将示例分为两个步骤,我们有一个字典和一个包含字典中键的格式(即 # 是一个关键):

    >>> mydict = {'language':'python', '#':2}
    >>> '%(language)s has %(#)03d quote types.' % mydict
    'python has 002 quote types.'
    >>> 
    
        6
  •  0
  •   Victor    15 年前

    %8.2f意味着允许8个字符的空格保留由保持浮点的相应变量给定的数字,然后具有2的十进制精度。