微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不同的格式方法在 Python 中表现不同?

如何解决为什么不同的格式方法在 Python 中表现不同?

我作为初学者学习 Python。最近学习了格式化方法,字典等。目前正在学习for循环,发现了一个函数叫enumerate(可能和问题无关)。我通过混合所有东西来应用我到目前为止学到的知识。突然我发现两种格式方法的行为不同!!这是如何以及为什么发生的?请解释。

方法一:

nameAgeDictionary = {'Jack': 38,'John': 51,'Alex': 13,'Alvin': 'Not Available'}

for index,name in enumerate(nameAgeDictionary):
    print('(%d) Name = %s,Age = %s' % (index+1,name,nameAgeDictionary[name]))  # Format_Method_1

输出

(1) 姓名 = 杰克,年龄 = 38

(2) 姓名 = 约翰,年龄 = 51

(3) 姓名 = Alex,年龄 = 13

(4) 姓名 = Alvin,年龄 = 不可用

方法二:

nameAgeDictionary = {'Jack': 38,name in enumerate(nameAgeDictionary):
    print('({0:d}) Name = {1:s},Age = {2:s}'.format(index+1,nameAgeDictionary[name])) # Format_Method_2

输出

回溯(最近一次调用最后一次): 文件“PATH_to_File.py”,第 3 行,

print('({0:d}) Name = {1:s},Age = {2:s}'.format(

ValueError: UnkNown format code 's' for type 'int' 对象

我尝试将 d 放在 s 的位置,在这种情况下,它会打印前 3 行并卡在最后一行(例如不可用)。

解决方法

由于年龄的类型是混合的(strint),所以不要指定类型。

for index,name in enumerate(nameAgeDictionary):
    print('({0:d}) Name = {1:s},Age = {2}'.format(index+1,name,nameAgeDictionary[name])) # Format_Method_2

通过执行此操作,应调用输入的 __str__,从而将 int 安全地转换为 str。结果是:

(1) Name = Jack,Age = 38
(2) Name = John,Age = 51
(3) Name = Alex,Age = 13
(4) Name = Alvin,Age = Not Available

我假设(但我不完全确定)与 .format() 相比,% 格式调用 __str__ 作为后备。

更新

以下是 % 格式化调用 __str__ 的证据:

class test():
     def __str__(self):
         return 'bar'
 
foo = test()
print('%s'%(foo))

印刷品

bar

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?