a;quot;&l;/span&g; &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;str&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;amp;&a;quot;&l;/span&g; &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;str&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;db = [&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; [&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;11111&a;quot;&l;/span&g;],&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; [&l;span class=\&q;string\&q;&g;&a;quot;smith&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;12345&a;quot;&l;/span&g;],&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; [&l;span class=\&q;string\&q;&g;&a;quot;frank&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;33331&a;quot;&l;/span&g;],&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; ]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;username = &l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;login:&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;password = &l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;passwd:&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; [username, password] &l;span class=\&q;keyword\&q;&g;in&l;/span&g; db:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Access granted&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Access denyed&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;列表\&q;&g;列表&l;a title=\&q;#列表\&q; href=\&q;#列表\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls[&l;span class=\&q;number\&q;&g;4&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls[-&l;span class=\&q;number\&q;&g;2&l;/span&g;:]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls[&l;span class=\&q;number\&q;&g;0&l;/span&g;] = &l;span class=\&q;string\&q;&g;&a;quot;test&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = &l;span class=\&q;built_in\&q;&g;list&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = &l;span class=\&q;string\&q;&g;&a;quot;&a;quot;&l;/span&g;.join(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 替换一个空切片, 相当于插入&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls[&l;span class=\&q;number\&q;&g;2&l;/span&g;:&l;span class=\&q;number\&q;&g;2&l;/span&g;] = &l;span class=\&q;string\&q;&g;&a;quot;hi&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls[&l;span class=\&q;number\&q;&g;2&l;/span&g; : &l;span class=\&q;number\&q;&g;4&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls2 = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;-&a;quot;&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;-&a;quot;&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls2[&l;span class=\&q;number\&q;&g;1&l;/span&g;:-&l;span class=\&q;number\&q;&g;1&l;/span&g;:&l;span class=\&q;number\&q;&g;2&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls2)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls_copy = ls.copy()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls.sort()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# sort方法返回None, 修改原序列&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;res = &l;span class=\&q;built_in\&q;&g;sorted&l;/span&g;(ls_copy)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(res)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls_copy)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# sorted() 返回新序列, 不该变原序列&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 高级排序&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x.sort(reverse=&l;span class=\&q;literal\&q;&g;True&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = [&l;span class=\&q;string\&q;&g;&a;quot;dfsd&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;sd&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;是非得失发&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;dsfdsfdsfdsfsdfsdf&a;quot;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s.sort(key=&l;span class=\&q;built_in\&q;&g;len&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 像C++中的比较器, 每次迭代器获得的值先传给len()函数处理再比较排序&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;max&l;/span&g;(&l;span class=\&q;built_in\&q;&g;set&l;/span&g;(ls), key=ls.count))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;元组\&q;&g;元组&l;a title=\&q;#元组\&q; href=\&q;#元组\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;与列表一样,元组也是序列,唯一的差别在于元组是&l;code&g;不能修改的&l;/code&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;t = &l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;span class=\&q;number\&q;&g;3&l;/span&g;,&l;span class=\&q;number\&q;&g;4&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(t)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 长度为1的元组&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;t = &l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(t)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;number\&q;&g;3&l;/span&g; * (&l;span class=\&q;number\&q;&g;1&l;/span&g;,&l;span class=\&q;string\&q;&g;&a;#x27;#&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;((&l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;span class=\&q;number\&q;&g;3&l;/span&g;)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;tuple&l;/span&g;([&l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;span class=\&q;number\&q;&g;3&l;/span&g;]))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;tuple&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;23&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;23&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;字符串\&q;&g;字符串&l;a title=\&q;#字符串\&q; href=\&q;#字符串\&q;&g;&l;/a&g;&l;/h3&g;\n&l;h4 id=\&q;设置格式\&q;&g;设置格式&l;a title=\&q;#设置格式\&q; href=\&q;#设置格式\&q;&g;&l;/a&g;&l;/h4&g;\n&l;ul&g;\n&l;li&g;way 1&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 设置字符串&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;%s, %.2f, %-5d, %x, %o&a;quot;&l;/span&g;%(&l;span class=\&q;string\&q;&g;&a;quot;hi&a;quot;&l;/span&g;, &l;span class=\&q;number\&q;&g;12.2345&l;/span&g;, &l;span class=\&q;number\&q;&g;11&l;/span&g;, -&l;span class=\&q;number\&q;&g;11&l;/span&g;, &l;span class=\&q;number\&q;&g;9&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# hi, 12.23, 11 , -b, 11&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;ul&g;\n&l;li&g;way 2&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; string &l;span class=\&q;keyword\&q;&g;import&l;/span&g; Template&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;templ = Template(&l;span class=\&q;string\&q;&g;&a;quot;You are the \\&l;svg xmlns:xlink=\&q;http://www.w3.org/1999/xlink\&q; width=\&q;10.74ex\&q; height=\&q;2.509ex\&q; style=\&q;vertical-align: -0.671ex;\&q; viewBox=\&q;0 -791.3 4624 1080.4\&q; role=\&q;img\&q; focusable=\&q;false\&q; xmlns=\&q;http://www.w3.org/2000/svg\&q; aria-labelledby=\&q;MathJax-SVG-1-Title\&q;&g;\n&l;title id=\&q;MathJax-SVG-1-Title\&q;&g;item in my \\&l;/title&g;\n&l;defs aria-hidden=\&q;true\&q;&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-69\&q; d=\&q;M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-74\&q; d=\&q;M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-65\&q; d=\&q;M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-6D\&q; d=\&q;M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-6E\&q; d=\&q;M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-79\&q; d=\&q;M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z\&q;&g;&l;/path&g;\n&l;/defs&g;\n&l;g stroke=\&q;currentColor\&q; fill=\&q;currentColor\&q; stroke-width=\&q;0\&q; transform=\&q;matrix(1 0 0 -1 0 0)\&q; aria-hidden=\&q;true\&q;&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-69\&q; x=\&q;0\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-74\&q; x=\&q;345\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-65\&q; x=\&q;707\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-6D\&q; x=\&q;1173\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-69\&q; x=\&q;2052\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-6E\&q; x=\&q;2397\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-6D\&q; x=\&q;2998\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-79\&q; x=\&q;3876\&q; y=\&q;0\&q;&g;&l;/use&g;\n&l;/g&g;\n&l;/svg&g;place&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = templ.substitute(item = &l;span class=\&q;string\&q;&g;&a;quot;shit&a;quot;&l;/span&g;, place = &l;span class=\&q;string\&q;&g;&a;quot;hand&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# You are the shit in my hand&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;ul&g;\n&l;li&g;way 3&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; pi&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;name&a;#125; is approximately &a;#123;value:.2f&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(name = &l;span class=\&q;string\&q;&g;&a;quot;pi&a;quot;&l;/span&g;, value = pi))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;str&l;/span&g; = &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;f&a;quot;&l;span class=\&q;subst\&q;&g;&a;#123;&l;span class=\&q;built_in\&q;&g;str&l;/span&g;&a;#125;&l;/span&g; will be somebody&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# python 3.6中, 变量与替换字段同名, 可以简写, 不用键值对, 相当于省略.format&a;#123;str=str&a;#125;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h5 id=\&q;完整版\&q;&g;完整版&l;a title=\&q;#完整版\&q; href=\&q;#完整版\&q;&g;&l;/a&g;&l;/h5&g;\n&l;p&g;替换字段由如下部分组成,其中每个部分都是可选的。&l;/p&g;\n&l;ul&g;\n&l;li&g;字段名:索引或标识符,指出要设置哪个值的格式并使用结果来替换该字段。除指定值外,还可指定值的特定部分,如列表的元素。&l;/li&g;\n&l;li&g;转换标志:跟在叹号后面的单个字符。当前支持的字符包括r(表示repr)、s(表示str)和a(表示ascii)。如果你指定了转换标志,将不使用对象本身的格式设置机制,而是使用指定的函数将对象转换为字符串,再做进一步的格式设置。&l;/li&g;\n&l;li&g;格式说明符:跟在冒号后面的表达式(这种表达式是使用微型格式指定语言表示的)。格式说明符让我们能够详细地指定最终的格式,包括格式类型(如字符串、浮点数或十六进制数),字段宽度和数的精度,如何显示符号和千位分隔符,以及各种对齐和填充方式。&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;a&a;#125;&a;#123;&a;#125;&a;#123;b&a;#125;&a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, a = &l;span class=\&q;number\&q;&g;1&l;/span&g;, b = &l;span class=\&q;number\&q;&g;3&l;/span&g;)) &l;span class=\&q;comment\&q;&g;# 1234&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; math &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;templ = &l;span class=\&q;string\&q;&g;&a;quot;The &a;#123;mod.__name__&a;#125; modeule defines the value &a;#123;mod.pi&a;#125; for π&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;res = templ.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(mod=math)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(res)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# The math modeule defines the value 3.141592653589793 for π&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = &l;span class=\&q;string\&q;&g;&a;quot;&a;#123;temp[1]&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(temp = &l;span class=\&q;string\&q;&g;&a;quot;abc&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s) &l;span class=\&q;comment\&q;&g;#b&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num:b&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;number\&q;&g;42&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num:c&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;number\&q;&g;0x6211&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num:e&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;number\&q;&g;23.45&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num:%&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;number\&q;&g;23.45&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num!a&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num!s&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num!r&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;101010&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;我&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;2.345000e+01&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;2345.000000%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;\\u6211&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;我&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;我&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;&l;img src=\&q;https://cdn.jsdelivr.net/gh/s1acr/PicGoLib@main/2023-9/202309241433482.png\&q; alt=\&q;\&q; loading=\&q;lazy\&q; class=\&q;φbp\&q;&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;One googol is &a;#123;:,&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;**&l;span class=\&q;number\&q;&g;100&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:010&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;3.14&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:+10&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;3.14&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:-&a;gt;10&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;3.14&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:$^12&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;WIN&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:+=12&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(-&l;span class=\&q;number\&q;&g;3.4&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#%%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:b&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;42&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:#b&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;42&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#%%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;One googol is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;0000003.14&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g; +3.14&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;------3.14&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;MATHJAX-SSR-58&l;svg xmlns:xlink=\&q;http://www.w3.org/1999/xlink\&q; width=\&q;1.162ex\&q; height=\&q;2.343ex\&q; style=\&q;vertical-align: -0.338ex;\&q; viewBox=\&q;0 -863.1 500.5 1008.6\&q; role=\&q;img\&q; focusable=\&q;false\&q; xmlns=\&q;http://www.w3.org/2000/svg\&q; aria-labelledby=\&q;MathJax-SVG-1-Title\&q;&g;\n&l;title id=\&q;MathJax-SVG-1-Title\&q;&g;l;/title&g;\n&l;defs aria-hidden=\&q;true\&q;&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMAIN-24\&q; d=\&q;M162 187Q162 164 146 149T109 133H103V130Q108 115 115 105Q122 92 131 82T150 64T170 52T190 44T206 40T220 37L227 36V313Q190 320 162 335Q116 358 86 404T55 508Q55 567 85 614T165 685Q186 696 225 704H227V750H273V704L286 703Q369 690 413 631Q441 588 444 531Q444 514 443 509Q439 490 425 479T391 468Q368 468 353 483T337 522Q337 546 353 560T390 575L394 576V578Q386 599 372 614T342 637T314 649T288 656L273 658V408L288 405Q329 394 355 376Q396 348 420 300T444 199Q444 130 408 76T313 1Q286 -9 276 -9H273V-56H227V-10H221Q202 -6 193 -4T155 11T108 41T74 94T55 176V182Q55 227 95 238Q103 240 108 240Q129 240 145 226T162 187ZM225 657Q219 657 204 651T169 632T135 594T121 538Q121 512 131 491T156 457T187 435T213 423T227 420V539Q227 657 225 657ZM378 169Q378 230 339 265T274 301Q273 301 273 169V37Q324 50 351 87T378 169Z\&q;&g;&l;/path&g;\n&l;/defs&g;\n&l;g stroke=\&q;currentColor\&q; fill=\&q;currentColor\&q; stroke-width=\&q;0\&q; transform=\&q;matrix(1 0 0 -1 0 0)\&q; aria-hidden=\&q;true\&q;&g;\n &l;use xlink:href=\&q;#E1-MJMAIN-24\&q; x=\&q;0\&q; y=\&q;0\&q;&g;&l;/use&g;\n&l;/g&g;\n&l;/svg&g;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;-++++++++3.4&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;101010&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;0b101010&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;width = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Please enter width: &a;#x27;&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;price_width = &l;span class=\&q;number\&q;&g;10&l;/span&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;item_width = width - price_width &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;header_fmt = &l;span class=\&q;string\&q;&g;&a;#x27;&a;#123;&a;#123;:&a;#123;&a;#125;&a;#125;&a;#125;&a;#123;&a;#123;:&a;gt;&a;#123;&a;#125;&a;#125;&a;#125;&a;#x27;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(item_width, price_width) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;fmt = &l;span class=\&q;string\&q;&g;&a;#x27;&a;#123;&a;#123;:&a;#123;&a;#125;&a;#125;&a;#125;&a;#123;&a;#123;:&a;gt;&a;#123;&a;#125;.2f&a;#125;&a;#125;&a;#x27;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(item_width, price_width) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 双大括号用于转义&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;=&a;#x27;&l;/span&g; * width) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(header_fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Item&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;Price&a;#x27;&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;-&a;#x27;&l;/span&g; * width) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Apples&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;0.4&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Pears&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;0.5&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Cantaloupes&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;1.92&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Dried Apricots (16 oz.)&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;8&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Prunes (4 lbs.)&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;12&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;=&a;#x27;&l;/span&g; * width)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;字符串方法\&q;&g;字符串方法&l;a title=\&q;#字符串方法\&q; href=\&q;#字符串方法\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;&l;img src=\&q;https://cdn.jsdelivr.net/gh/s1acr/PicGoLib@main/2023-9/202309241511185.png\&q; alt=\&q;\&q; loading=\&q;lazy\&q; class=\&q;φbp\&q;&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;dirs = &l;span class=\&q;string\&q;&g;&a;#x27;usr&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;bin&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;env&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;/&a;#x27;&l;/span&g;.join(dirs))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# join操作的序列必须是字符串&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;ASdsfd是&a;quot;&l;/span&g;.lower())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 词首大写&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;that&a;#x27;s all folks&a;quot;&l;/span&g;.title())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; string&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(string.capwords(&l;span class=\&q;string\&q;&g;&a;quot;that&a;#x27;s all folks&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 分隔, 默认是空白符 &l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;/usr/bin/env&a;quot;&l;/span&g;.split(&l;span class=\&q;string\&q;&g;&a;#x27;/&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;what the fuck&a;quot;&l;/span&g;.split())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 裁剪&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;###good###&a;quot;&l;/span&g;.strip(&l;span class=\&q;string\&q;&g;&a;#x27;#&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 替换 &l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;aaaabbb&a;quot;&l;/span&g;.replace(&l;span class=\&q;string\&q;&g;&a;#x27;a&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;b&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 转换&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;table = &l;span class=\&q;built_in\&q;&g;str&l;/span&g;.maketrans(&l;span class=\&q;string\&q;&g;&a;quot;abc&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;123&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(table)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 建立字符的转换表&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;abcabc&a;quot;&l;/span&g;.translate(table))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;ascii&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;电视&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Good&a;quot;&l;/span&g;.istitle())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;test&a;quot;&l;/span&g;.capitalize())&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;字典\&q;&g;字典&l;a title=\&q;#字典\&q; href=\&q;#字典\&q;&g;&l;/a&g;&l;/h2&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;items = [(&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;), (&l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;19&a;quot;&l;/span&g;)]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;dict&l;/span&g;(items)[&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &l;span class=\&q;built_in\&q;&g;dict&l;/span&g;(name = &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;, age = &l;span class=\&q;number\&q;&g;19&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d[&l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x[&l;span class=\&q;number\&q;&g;1&l;/span&g;] = &l;span class=\&q;string\&q;&g;&a;quot;a&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x[&l;span class=\&q;number\&q;&g;2&l;/span&g;] = &l;span class=\&q;string\&q;&g;&a;quot;b&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;numlist = &a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;:&a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;china&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;: &l;span class=\&q;number\&q;&g;19&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;muphy&a;quot;&l;/span&g;:&a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;england&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;:&l;span class=\&q;number\&q;&g;23&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;sakura&a;quot;&l;/span&g;:&a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;japan&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;:&l;span class=\&q;number\&q;&g;34&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;fmt = &a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;name = &l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Name:&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;request = &l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Country(c) or Age(a)?&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; request == &l;span class=\&q;string\&q;&g;&a;#x27;c&a;#x27;&l;/span&g; : key = &l;span class=\&q;string\&q;&g;&a;#x27;country&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; request == &l;span class=\&q;string\&q;&g;&a;#x27;a&a;#x27;&l;/span&g; : key = &l;span class=\&q;string\&q;&g;&a;#x27;age&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; name &l;span class=\&q;keyword\&q;&g;in&l;/span&g; numlist : &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;&a;#125;&a;#x27;s &a;#123;&a;#125; is &a;#123;&a;#125;.&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(name, fmt[key], numlist[name][key]))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;字符串设置功能用于字典\&q;&g;字符串设置功能用于字典&l;a title=\&q;#字符串设置功能用于字典\&q; href=\&q;#字符串设置功能用于字典\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;phonebook = &a;#123;&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;1234&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;brain&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;2341&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;vector&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;9990&a;quot;&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;#x27;s phone number is &a;#123;slacr&a;#125;&a;quot;&l;/span&g;.format_map(phonebook))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;字典方法\&q;&g;字典方法&l;a title=\&q;#字典方法\&q; href=\&q;#字典方法\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;48&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;49&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;50&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&a;#123;&a;#125;.fromkeys([&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;]))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;dict&l;/span&g;.fromkeys([&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;undefined&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d.get(&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 使用get()方法如果没有此key将返回None ,而使用索引则会抛出keyError异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&l;span class=\&q;string\&q;&g;&a;#x27;x&a;#x27;&l;/span&g;: &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;y&a;#x27;&l;/span&g;: &l;span class=\&q;number\&q;&g;2&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d.pop(&l;span class=\&q;string\&q;&g;&a;#x27;x&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d.popitem())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d.setdefault(&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;unknown&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d.setdefault(&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 没指定默认值None&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;title&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;#x27;Python Web Site&a;#x27;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;#x27;url&a;#x27;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;http://www.python.org&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;#x27;changed&a;#x27;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;June 3 22:13:10&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &a;#123;&l;span class=\&q;string\&q;&g;&a;quot;title&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;Python Language Website&a;quot;&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d.update(x)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 使用一个字典来更新另一个字典&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;Donald Trump&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;: &l;span class=\&q;number\&q;&g;82&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d.keys())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d.values())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 返回对应的列表视图&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;123&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;456&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;78&a;quot;&l;/span&g;, sep=&l;span class=\&q;string\&q;&g;&a;quot;&a;quot;&l;/span&g;, end=&l;span class=\&q;string\&q;&g;&a;quot;9&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;条件循环\&q;&g;条件循环&l;a title=\&q;#条件循环\&q; href=\&q;#条件循环\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;导包\&q;&g;导包&l;a title=\&q;#导包\&q; href=\&q;#导包\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; somemodule &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; somemodule &l;span class=\&q;keyword\&q;&g;import&l;/span&g; somefunction &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; somemodule &l;span class=\&q;keyword\&q;&g;import&l;/span&g; somefunction, anotherfunction, yetanotherfunction &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; somemodule &l;span class=\&q;keyword\&q;&g;import&l;/span&g; *&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; math &l;span class=\&q;keyword\&q;&g;as&l;/span&g; foobar&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; sqrt &l;span class=\&q;keyword\&q;&g;as&l;/span&g; foobar&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# as 添加别名, 可以用来区别不同包中的同名函数&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;赋值魔法\&q;&g;赋值魔法&l;a title=\&q;#赋值魔法\&q; href=\&q;#赋值魔法\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 序列解包&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x, y = &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x, y = y, x&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x, y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;jack&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;gfriend&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;rose&a;quot;&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;key, value = d.popitem()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(key, value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;a, b, *rest = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g; ,&l;span class=\&q;number\&q;&g;4&l;/span&g; ]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(rest)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 正常解包必须左右数目相同, 否则ValueError, *号能收集多余的值成为一个列表&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 链式赋值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = y = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;布尔值\&q;&g;布尔值&l;a title=\&q;#布尔值\&q; href=\&q;#布尔值\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;bool&l;/span&g;(&l;span class=\&q;literal\&q;&g;None&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;bool&l;/span&g;(&l;span class=\&q;number\&q;&g;0&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;literal\&q;&g;True&l;/span&g; == &l;span class=\&q;number\&q;&g;1&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;number\&q;&g;1&l;/span&g; &a;lt; &l;span class=\&q;number\&q;&g;2&l;/span&g; &a;lt; &l;span class=\&q;number\&q;&g;3&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;&l;img src=\&q;https://cdn.jsdelivr.net/gh/s1acr/PicGoLib@main/2023-9/202309242120115.png\&q; alt=\&q;\&q; loading=\&q;lazy\&q; class=\&q;φbp\&q;&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;y = z = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(y &l;span class=\&q;keyword\&q;&g;is&l;/span&g; z)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(y == z)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x &l;span class=\&q;keyword\&q;&g;is&l;/span&g; &l;span class=\&q;keyword\&q;&g;not&l;/span&g; y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; x[-&l;span class=\&q;number\&q;&g;1&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x == y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x &l;span class=\&q;keyword\&q;&g;is&l;/span&g; y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# is 判断是否为同一个对象&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 非数值的比较会比较ord()值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;ord&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;chr&l;/span&g;(&l;span class=\&q;built_in\&q;&g;ord&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;ascii&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;25105&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;我&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;\\u6211&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;断言\&q;&g;断言&l;a title=\&q;#断言\&q; href=\&q;#断言\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 断言&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;age = -&l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;assert&l;/span&g; &l;span class=\&q;number\&q;&g;0&l;/span&g; &a;lt; age &a;lt;= &l;span class=\&q;number\&q;&g;100&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;The age must be realistic&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;一些迭代\&q;&g;一些迭代&l;a title=\&q;#一些迭代\&q; href=\&q;#一些迭代\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;names = [&l;span class=\&q;string\&q;&g;&a;#x27;anne&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;beth&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;george&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;damon&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ages = [&l;span class=\&q;number\&q;&g;12&l;/span&g;, &l;span class=\&q;number\&q;&g;45&l;/span&g;, &l;span class=\&q;number\&q;&g;32&l;/span&g;, &l;span class=\&q;number\&q;&g;102&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;built_in\&q;&g;len&l;/span&g;(names)):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(names[i], &l;span class=\&q;string\&q;&g;&a;quot; is &a;quot;&l;/span&g;, ages[i], &l;span class=\&q;string\&q;&g;&a;quot;years old&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 并行迭代, range默认生成序列从0开始&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; name, age &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;zip&l;/span&g;(names, ages): &l;span class=\&q;comment\&q;&g;# 将序列缝合成多元组序列, 不等长时会取较短的&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(name, &l;span class=\&q;string\&q;&g;&a;quot; is &a;quot;&l;/span&g;, age, &l;span class=\&q;string\&q;&g;&a;quot;years old&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% 迭代时获取索引&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;strings = [&l;span class=\&q;string\&q;&g;&a;#x27;a&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;b&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;c&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;#&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; index, string &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;enumerate&l;/span&g;(strings):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; string == &l;span class=\&q;string\&q;&g;&a;#x27;#&a;#x27;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;del&l;/span&g; strings[index]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(strings)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% 反向迭代和排序后迭代&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;sorted&l;/span&g;((&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r = &l;span class=\&q;built_in\&q;&g;reversed&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(r)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;l = &l;span class=\&q;built_in\&q;&g;list&l;/span&g;(r)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(l)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;quot;&l;/span&g;.join(l))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# sorted返回一个列表,而reversed像zip那样返回一个可迭代对象。&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;循环中的-else\&q;&g;循环中的 else&l;a title=\&q;#循环中的-else\&q; href=\&q;#循环中的-else\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; sqrt&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; n &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;99&l;/span&g;, &l;span class=\&q;number\&q;&g;80&l;/span&g;, -&l;span class=\&q;number\&q;&g;1&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; root = sqrt(n)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; root == &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(root):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(n)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;break&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Didn&a;#x27;t find it!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 可以看到 添加了 else的循环语句, else部分与这个循环属于一个整体, 如果&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 循环中出现break, 那么会调出循环(不执行else), 而没出现break, else必执行&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 故else 可以用来判断一个循环是否出现了break, 是否正常执行结束&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;简单推导\&q;&g;简单推导&l;a title=\&q;#简单推导\&q; href=\&q;#简单推导\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。列表推导的工作原理非常简单,有点类似于for循环。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [x*x &l;span class=\&q;keyword\&q;&g;for&l;/span&g; x &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;, &l;span class=\&q;number\&q;&g;0&l;/span&g;, -&l;span class=\&q;number\&q;&g;1&l;/span&g;)]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [(x, y) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; x &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;3&l;/span&g;) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; y &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;3&l;/span&g;)]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;girls = [&l;span class=\&q;string\&q;&g;&a;#x27;alice&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;bernice&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;clarice&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;boys = [&l;span class=\&q;string\&q;&g;&a;#x27;chris&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;arnold&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;bob&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [(b, g) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; b &l;span class=\&q;keyword\&q;&g;in&l;/span&g; boys &l;span class=\&q;keyword\&q;&g;for&l;/span&g; g &l;span class=\&q;keyword\&q;&g;in&l;/span&g; girls &l;span class=\&q;keyword\&q;&g;if&l;/span&g; b[&l;span class=\&q;number\&q;&g;0&l;/span&g;] == g[&l;span class=\&q;number\&q;&g;0&l;/span&g;]]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 更高效的方法&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;girls.append(&l;span class=\&q;string\&q;&g;&a;quot;angella&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;letterGirls = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; girl &l;span class=\&q;keyword\&q;&g;in&l;/span&g; girls:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; letterGirls.setdefault(girl[&l;span class=\&q;number\&q;&g;0&l;/span&g;], []).append(girl)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 一对多的字典&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;([(b, g) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; b &l;span class=\&q;keyword\&q;&g;in&l;/span&g; boys &l;span class=\&q;keyword\&q;&g;for&l;/span&g; g &l;span class=\&q;keyword\&q;&g;in&l;/span&g; letterGirls[b[&l;span class=\&q;number\&q;&g;0&l;/span&g;]]])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 字典推导&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;squares = &a;#123;i:&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;&a;#125; squared is &a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(i, i**&l;span class=\&q;number\&q;&g;2&l;/span&g;) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;)&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(squares[&l;span class=\&q;number\&q;&g;7&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; string&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;capital = &a;#123;a: &l;span class=\&q;string\&q;&g;&a;quot;&a;#123;&a;#125; capitalizes is &a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(a, a.capitalize()) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; a &l;span class=\&q;keyword\&q;&g;in&l;/span&g; string.ascii_lowercase&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(capital[&l;span class=\&q;string\&q;&g;&a;#x27;r&a;#x27;&l;/span&g;])&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;pass-del-exec\&q;&g;pass del exec&l;a title=\&q;#pass-del-exec\&q; href=\&q;#pass-del-exec\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;48&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;49&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;50&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;51&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;52&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;53&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;54&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;55&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;name = &l;span class=\&q;string\&q;&g;&a;quot;&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; name == &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;please in&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;elif&l;/span&g; name.find(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;) != -&l;span class=\&q;number\&q;&g;1&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# ...&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# python 中代码块 不能为空, 修复这个问题, 只需添加一条pass 语句&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;fatal&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 对于你不再使用的对象,Python通常会将其删除(因为没有任何变量或数据结构成员指向它), GC&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 另一种方法是使用 del 函数&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; x&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [&l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;job&a;quot;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls2 = ls&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# del 只会删除引用&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;exec&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;print(&a;#x27;Hi~ o(* ̄▽ ̄*)ブ&a;#x27;)&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 然而,调用函数exec时只给它提供一个参数绝非好事。在大多数情况下,还应向它传递一个命名空间——用于放置变量的地方;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; sqrt&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# exec(&a;quot;sqrt = 1&a;quot;)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# sqrt(4)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 污染了原命名空间&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; sqrt&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 添加命名空间&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;exec&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;sqrt = 1&a;quot;&l;/span&g;, scope)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;len&l;/span&g;(scope))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(scope[&l;span class=\&q;string\&q;&g;&a;quot;sqrt&a;quot;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(sqrt(&l;span class=\&q;number\&q;&g;4&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 一个python 计算器&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Enter an arithmetic expression:&a;quot;&l;/span&g;)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 这也是不安全的, 传入了不可信任的代码, 可以注入脚本&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope[&l;span class=\&q;string\&q;&g;&a;#x27;x&a;#x27;&l;/span&g;] = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope[&l;span class=\&q;string\&q;&g;&a;#x27;y&a;#x27;&l;/span&g;] = &l;span class=\&q;number\&q;&g;2&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;x*y&a;#x27;&l;/span&g;,scope))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;因此,将eval用于不可信任的代码并不比使用exec安全。当前,在Python中执行不可信任的代码时,没有安全的办法。一种替代解决方案是使用Jython等Python实现,以使用Java沙箱等原生机制。&l;/p&g;\n&l;h2 id=\&q;抽象\&q;&g;抽象&l;a title=\&q;#抽象\&q; href=\&q;#抽象\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;自定义函数\&q;&g;自定义函数&l;a title=\&q;#自定义函数\&q; href=\&q;#自定义函数\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; math &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;y = math.sqrt&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;callable&l;/span&g;(x), &l;span class=\&q;built_in\&q;&g;callable&l;/span&g;(y))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 判断某个对象是否可调用&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;给函数写文档\&q;&g;给函数写文档&l;a title=\&q;#给函数写文档\&q; href=\&q;#给函数写文档\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;要给函数编写文档,以确保其他人能够理解,可添加注释(以#打头的内容)。还有另一种编写注释的方式,就是添加独立的字符串。在有些地方,如def语句后面(以及模块和类的开头,),添加这样的字符串很有用。放在函数开头的字符串称为&l;code&g;文档字符串(docstring)&l;/code&g;,将&l;code&g;作为函数的一部分存储起来&l;/code&g;。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;square&l;/span&g;(&l;span class=\&q;params\&q;&g;x&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;#x27;Calculates the square of the number x.&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; x*x&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(square.__doc__)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;help&l;/span&g;(square)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;特殊的内置函数&l;code&g;help&l;/code&g;很有用。在交互式解释器中,可使用它获取有关函数的信息,其中包含函数的文档字符串。&l;/p&g;\n&l;p&g;所有的函数都返回值。如果你没有告诉它们该返回什么,将返回None。&l;/p&g;\n&l;h4 id=\&q;收集参数\&q;&g;收集参数&l;a title=\&q;#收集参数\&q; href=\&q;#收集参数\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;print_params&l;/span&g;(&l;span class=\&q;params\&q;&g;title, *params&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(title)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(params)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;print_params(&l;span class=\&q;string\&q;&g;&a;quot;Params:&a;quot;&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;Params:&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;(1, 2, 3)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 收集参数可以不放在最后, 但需要使用名称来制定后续参数&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;in_the_middle&l;/span&g;(&l;span class=\&q;params\&q;&g;x, *y, z&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x, y, z)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;in_the_middle(&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, z=&l;span class=\&q;number\&q;&g;6&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;print_key_params&l;/span&g;(&l;span class=\&q;params\&q;&g;**params&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(params)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;print_key_params(a = &l;span class=\&q;number\&q;&g;1&l;/span&g;, b = &l;span class=\&q;number\&q;&g;2&l;/span&g;, sth = &l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#收集关键字参数要用两个 &a;#x27;*&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;分配参数\&q;&g;分配参数&l;a title=\&q;#分配参数\&q; href=\&q;#分配参数\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;add&l;/span&g;(&l;span class=\&q;params\&q;&g;x,y&l;/span&g;) :&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; x+y&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;params = (&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(add(*params))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 如果在定义和调用函数时都使用*或**,将只传递元组或字典。因此还不如不使用它们,还&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 可省却些麻烦。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;with_stars&l;/span&g;(&l;span class=\&q;params\&q;&g;**kwds&l;/span&g;): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(kwds[&l;span class=\&q;string\&q;&g;&a;#x27;name&a;#x27;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;is&a;#x27;&l;/span&g;, kwds[&l;span class=\&q;string\&q;&g;&a;#x27;age&a;#x27;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;years old&a;#x27;&l;/span&g;) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;without_stars&l;/span&g;(&l;span class=\&q;params\&q;&g;kwds&l;/span&g;): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(kwds[&l;span class=\&q;string\&q;&g;&a;#x27;name&a;#x27;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;is&a;#x27;&l;/span&g;, kwds[&l;span class=\&q;string\&q;&g;&a;#x27;age&a;#x27;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;years old&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;args = &a;#123;&l;span class=\&q;string\&q;&g;&a;#x27;name&a;#x27;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;#x27;Mr. Gumby&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;age&a;#x27;&l;/span&g;: &l;span class=\&q;number\&q;&g;42&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;with_stars(**args)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;without_stars(args)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 这两种做法的效果相同。因此,只有在定义函数(允&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 许可变数量的参数)或调用函数时(拆分字典或序列)使用,星号才能发挥作用。&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;作用域\&q;&g;作用域&l;a title=\&q;#作用域\&q; href=\&q;#作用域\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x, y = &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope = &l;span class=\&q;built_in\&q;&g;vars&l;/span&g;()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 返回当前作用域的字典&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(scope[&l;span class=\&q;string\&q;&g;&a;quot;scope&a;quot;&l;/span&g;][&l;span class=\&q;string\&q;&g;&a;quot;scope&a;quot;&l;/span&g;][&l;span class=\&q;string\&q;&g;&a;quot;x&a;quot;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# print(dir())&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 一般而言,不应修改vars返回的字典,因为根据Python官方文档的说法,这样做的结果是不确定的。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;combine&l;/span&g;(&l;span class=\&q;params\&q;&g;parameter&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(parameter + &l;span class=\&q;built_in\&q;&g;globals&l;/span&g;()[&l;span class=\&q;string\&q;&g;&a;#x27;parameter&a;#x27;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;locals&l;/span&g;())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;parameter = &l;span class=\&q;string\&q;&g;&a;quot;berry&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;combine(&l;span class=\&q;string\&q;&g;&a;quot;Shrub&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# globals(), locals() 分别返回全局/ 局部 变量的字典&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% &l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;change_global&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;global&l;/span&g; x&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = x + &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;change_global()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;作用域嵌套\&q;&g;作用域嵌套&l;a title=\&q;#作用域嵌套\&q; href=\&q;#作用域嵌套\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;multiplier&l;/span&g;(&l;span class=\&q;params\&q;&g;factor&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;multiplyByFactor&l;/span&g;(&l;span class=\&q;params\&q;&g;number&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; number * factor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; multiplyByFactor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;double = multiplier(&l;span class=\&q;number\&q;&g;2&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;triple = multiplier(&l;span class=\&q;number\&q;&g;3&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(double(&l;span class=\&q;number\&q;&g;3&l;/span&g;), triple(&l;span class=\&q;number\&q;&g;3&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(multiplier(&l;span class=\&q;number\&q;&g;3&l;/span&g;)(&l;span class=\&q;number\&q;&g;5&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#像multiplyByFactor这样存储其所在作用域的函数称为闭包。&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;通常,不能给外部作用域内的变量赋值,但如果一定要这样做,可使用&l;code&g;关键字nonlocal&l;/code&g;。这个关键字的用法与global很像,让你能够给外部作用域(非全局作用域)内的变量赋值。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;multiplier&l;/span&g;(&l;span class=\&q;params\&q;&g;factor&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; factor = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;multiplyByFactor&l;/span&g;(&l;span class=\&q;params\&q;&g;number&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;nonlocal&l;/span&g; factor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; factor = &l;span class=\&q;number\&q;&g;10&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; number * factor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; multiplyByFactor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(multiplier(&l;span class=\&q;number\&q;&g;3&l;/span&g;)(&l;span class=\&q;number\&q;&g;5&l;/span&g;))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;函数式编程\&q;&g;函数式编程&l;a title=\&q;#函数式编程\&q; href=\&q;#函数式编程\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;Python提供了一些有助于进行这种函数式编程的函数:&l;code&g;map、filter和reduce&l;/code&g;。在较新的Python版本中,函数map和filter的用途并不大,应该使用列表推导来替代它们。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(&l;span class=\&q;built_in\&q;&g;map&l;/span&g;(&l;span class=\&q;built_in\&q;&g;str&l;/span&g;, &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;))))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 与[str(i) for i in range(10)]等价&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;seq = [&l;span class=\&q;string\&q;&g;&a;quot;foo&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;x41&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;?!&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;***&a;quot;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(&l;span class=\&q;built_in\&q;&g;filter&l;/span&g;(&l;span class=\&q;built_in\&q;&g;str&l;/span&g;.isalnum, seq)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# [x for x in seq if x.isalnum()]&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;numbers = [&l;span class=\&q;number\&q;&g;72&l;/span&g;, &l;span class=\&q;number\&q;&g;101&l;/span&g;, &l;span class=\&q;number\&q;&g;108&l;/span&g;, &l;span class=\&q;number\&q;&g;108&l;/span&g;, &l;span class=\&q;number\&q;&g;111&l;/span&g;, &l;span class=\&q;number\&q;&g;44&l;/span&g;, &l;span class=\&q;number\&q;&g;32&l;/span&g;, &l;span class=\&q;number\&q;&g;119&l;/span&g;, &l;span class=\&q;number\&q;&g;111&l;/span&g;, &l;span class=\&q;number\&q;&g;114&l;/span&g;, &l;span class=\&q;number\&q;&g;108&l;/span&g;, &l;span class=\&q;number\&q;&g;100&l;/span&g;, &l;span class=\&q;number\&q;&g;33&l;/span&g;] &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; functools &l;span class=\&q;keyword\&q;&g;import&l;/span&g; reduce &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(reduce(&l;span class=\&q;keyword\&q;&g;lambda&l;/span&g; x, y: x + y, numbers))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;面向对象\&q;&g;面向对象&l;a title=\&q;#面向对象\&q; href=\&q;#面向对象\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;自定义类\&q;&g;自定义类&l;a title=\&q;#自定义类\&q; href=\&q;#自定义类\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Person&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;set_name&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.name = name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;get_name&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;greet&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Hello, world! I&a;#x27;m &a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(self.name))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo = Person()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo.set_name(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo.greet()&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;Python没有为私有属性提供直接的支持,而是要求程序员知道在什么情况下从外部修改属性是安全的。毕竟,你必须在知道如何使用对象之后才能使用它。然而,通过玩点小花招,可获得类似于私有属性的效果。&l;br&g;\n&l;code&g;要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可&l;/code&g;。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Person&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; money = &l;span class=\&q;number\&q;&g;100.3&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; __money = &l;span class=\&q;number\&q;&g;100.4&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;set_name&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.name = name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;get_name&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;greet&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Hello, world! I&a;#x27;m &a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(self.name))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo = Person()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo.set_name(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(foo.money)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# print(foo.__money)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Secretive&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__inaccessible&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Bet you can&a;#x27;t see me ...&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;accessible&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;The secret message is:&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.__inaccessible()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 现在从外部不能访问__inaccessible,但在类中(如accessible中)依然可以使用它。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = Secretive()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 在类定义中,对所有以两个下划线打头的名称都进行转换,即在开头加上一个下划线和类名。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(Secretive()._Secretive__inaccessible)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s._Secretive__inaccessible()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 只要知道这种幕后处理手法,就能从类外访问私有方法,然而不应这样做。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 如果你不希望名称被修改,又想发出不要从外部修改属性或方法的信号,可用一个下划线打&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 头。这虽然只是一种约定,但也有些作用。例如,from module import *不会导入以一个下划线&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 打头的名称。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;ul&g;\n&l;li&g;\n&l;p&g;以双下划线 __ 开头(但不以双下划线结尾)时,Python 会自动对方法名进行名称修饰(name mangling)。这是为了避免子类意外地覆盖父类的方法。&l;br&g;\n当类定义中的方法以双下划线开头时,Python 会将方法名修饰为 _ClassName__method 的形式。这样做的目的是在类的外部阻止对该方法的直接访问,从而提供一定程度的封装和保护。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;在 Python 中,以双下划线 __ 开头和结尾的方法是特殊的魔术方法(magic methods)或称为双下划线方法(dunder methods)。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;在 Python 中,以单个下划线 _ 开头的方法或属性被视为私有的。这是一种约定,用于表示该方法或属性是供内部使用的,不应在类的外部直接访问。&l;/p&g;\n&l;/li&g;\n&l;/ul&g;\n&l;h4 id=\&q;类的命名空间\&q;&g;类的命名空间&l;a title=\&q;#类的命名空间\&q; href=\&q;#类的命名空间\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MemberCounter&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; members = &l;span class=\&q;number\&q;&g;0&l;/span&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;init&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; MemberCounter.members += &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# MemberCounter.members 是一个类级的变量, 相当与java中静态变量/成员属性&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m1 = MemberCounter() &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m1.init() &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(MemberCounter.members) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m2 = MemberCounter() &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m2.init() &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(MemberCounter.members)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m1.members = &l;span class=\&q;string\&q;&g;&a;#x27;Two&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(m1.members) &l;span class=\&q;comment\&q;&g;# two&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 产生的实例对象的属性 遮盖了 类的属性&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(MemberCounter.members) &l;span class=\&q;comment\&q;&g;# 2&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;指定超类/父类\&q;&g;指定超类/父类&l;a title=\&q;#指定超类/父类\&q; href=\&q;#指定超类/父类\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Filter&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;init&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.blocked = []&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;filter&l;/span&g;(&l;span class=\&q;params\&q;&g;self, sequence&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; [x &l;span class=\&q;keyword\&q;&g;for&l;/span&g; x &l;span class=\&q;keyword\&q;&g;in&l;/span&g; sequence &l;span class=\&q;keyword\&q;&g;if&l;/span&g; x &l;span class=\&q;keyword\&q;&g;not&l;/span&g; &l;span class=\&q;keyword\&q;&g;in&l;/span&g; self.blocked]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;SPAMFilter&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Filter&l;/span&g;): &l;span class=\&q;comment\&q;&g;# SPAMFilter 是 Filter 的子类&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;init&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;): &l;span class=\&q;comment\&q;&g;# 重写&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.blocked = [&l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f = Filter()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f.init()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f.&l;span class=\&q;built_in\&q;&g;filter&l;/span&g;([&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = SPAMFilter()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s.init()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s.&l;span class=\&q;built_in\&q;&g;filter&l;/span&g;([&l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;eggs&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;bacon&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 判断一个类是否是另一个类的子类 使用内置方法issubclass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;issubclass&l;/span&g;(SPAMFilter, Filter))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 查看类的基类&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(SPAMFilter.__bases__)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(Filter.__bases__)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = SPAMFilter()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(s, SPAMFilter))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(s, Filter))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(s, &l;span class=\&q;built_in\&q;&g;object&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# True True True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;sss&a;quot;&l;/span&g;, &l;span class=\&q;built_in\&q;&g;str&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s.__class__)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h5 id=\&q;多个超类\&q;&g;多个超类&l;a title=\&q;#多个超类\&q; href=\&q;#多个超类\&q;&g;&l;/a&g;&l;/h5&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Calculator&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;calculate&l;/span&g;(&l;span class=\&q;params\&q;&g;self, expression&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.value = &l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(expression)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Talker&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Hi, my value is&a;#x27;&l;/span&g;, self.value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;TalkingCalculator&l;/span&g;(Calculator, Talker):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc = TalkingCalculator()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc.calculate(&l;span class=\&q;string\&q;&g;&a;#x27;1+2+2&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc.talk()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(TalkingCalculator.__bases__)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 如果多个超类以不同的方式实现了同一个方法(即有多个同名方法),必须在class语句中小心排列这些超类,因为位于前面的类的方法将覆盖位于后面&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 的类的方法。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;接口和内省\&q;&g;接口和内省&l;a title=\&q;#接口和内省\&q; href=\&q;#接口和内省\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;在Python中,不显式地指定对象必须包含哪些方法才能用作参数。例如,你不会像在Java中那样显式编写接口,而是假定对象能够完成你要求它完成的任务。如果不能完成,程序将失败。&l;br&g;\n通常,你要求对象遵循特定的接口(即实现特定的方法),但如果需要,也可非常灵活地提出要求:不是直接调用方法并期待一切顺利,而是检查所需的方法是否存在;如果不存在,就改弦易辙。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Calculator&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;calculate&l;/span&g;(&l;span class=\&q;params\&q;&g;self, expression&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.value = &l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(expression)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Talker&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Hi, my value is&a;#x27;&l;/span&g;, self.value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;TalkingCalculator&l;/span&g;(Calculator, Talker):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc = TalkingCalculator()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;hasattr&l;/span&g;(tc, &l;span class=\&q;string\&q;&g;&a;#x27;talk&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;callable&l;/span&g;(&l;span class=\&q;built_in\&q;&g;getattr&l;/span&g;(tc, &l;span class=\&q;string\&q;&g;&a;#x27;talk&a;#x27;&l;/span&g;, &l;span class=\&q;literal\&q;&g;None&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 设置对象属性&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;setattr&l;/span&g;(tc, &l;span class=\&q;string\&q;&g;&a;#x27;name&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;Mr. Gumby&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc.name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;dir&l;/span&g;(tc))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(tc.__dict__)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;要查看&l;code&g;对象中存储的所有值,可检查其__dict__属性&l;/code&g;。如果要确定对象是由什么组成的,应&l;br&g;\n研究模块inspect。这个模块主要供高级用户创建对象浏览器(让用户能够以图形方式浏览Python&l;br&g;\n对象的程序)以及其他需要这种功能的类似程序。&l;/p&g;\n&l;h3 id=\&q;抽象基类\&q;&g;抽象基类&l;a title=\&q;#抽象基类\&q; href=\&q;#抽象基类\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;然而,有比手工检查各个方法更好的选择。在历史上的大部分时间内,Python几乎都只依赖于鸭子类型,即假设所有对象都能完成其工作,同时偶尔使用hasattr来检查所需的方法是否存在。很多其他语言(如Java和Go)都采用&l;code&g;显式指定接口&l;/code&g;的理念,而有些第三方模块提供了这种理念的各种实现。最终,Python通过引入&l;code&g;模块abc&l;/code&g;提供了官方解决方案。这个模块为所谓的抽象基类提供了支持&l;/p&g;\n&l;p&g;一般而言,抽象类是不能(至少是不应该)实例化的类,其职责是定义子类应实现的一组抽象方法。&l;/p&g;\n&l;p&g;在常规类型中,我们能否在一个特定场景中使用某个对象取决于这个对象的类型,而在鸭子类型中,则取决于这个对象是否具有某种属性或者方法——即只要具备特定的属性或方法,能通过鸭子测试,就可以使用。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; abc &l;span class=\&q;keyword\&q;&g;import&l;/span&g; ABC, abstractclassmethod&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Talker&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;ABC&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @abstractclassmethod&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Knigget&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Talker&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Ni!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;k = Knigget()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(k, Talker))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;k.talk()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Herring&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Blub&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;h = Herring()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(h, Talker))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;sb&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; sb.talk()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;talk(Knigget())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;talk(Herring())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# Herring 不是基类的对象, 但能通过基类对象的检查&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; herring &l;span class=\&q;keyword\&q;&g;import&l;/span&g; Herring&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; abc &l;span class=\&q;keyword\&q;&g;import&l;/span&g; ABC, abstractclassmethod&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Talker&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;ABC&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @abstractclassmethod&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Knigget&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Talker&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Ni!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;Talker.register(Herring)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# register 方法注册为子类&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;h = Herring()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(h, Herring))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;h.talk()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 然而,这种做法存在一个缺点,就是直接从抽象类派生提供的保障没有了, 显示继承抽象类必须实现&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 其中的方法, 注册成为的子类则无法承诺实现了其中的方法.&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;异常\&q;&g;异常&l;a title=\&q;#异常\&q; href=\&q;#异常\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;raise-语句\&q;&g;raise 语句&l;a title=\&q;#raise-语句\&q; href=\&q;#raise-语句\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;要引发异常,可使用raise语句,并将一个类(必须是&l;code&g;Exception的子类&l;/code&g;)或实例作为参数。将类作为参数时,将自动创建一个实例。&l;br&g;\n&l;img src=\&q;https://cdn.jsdelivr.net/gh/s1acr/PicGoLib@main/2023-9/202309291919313.png\&q; alt=\&q;\&q; loading=\&q;lazy\&q;&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;48&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;49&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;50&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;51&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;52&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;53&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;54&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;55&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;56&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;57&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;raise&l;/span&g; Exception(&l;span class=\&q;string\&q;&g;&a;quot;suka blyat&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 产生异常, 和java 中的 throw 差不多&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x / y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; ZeroDivisionError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;The second number can&a;#x27;t be zero!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 捕获异常后,如果要重新引发它(即继续向上传播),可调用raise且不提供任何参数(也可&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 显式地提供捕获到的异常,&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MuffledCalculator&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; muffled = &l;span class=\&q;literal\&q;&g;False&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;calc&l;/span&g;(&l;span class=\&q;params\&q;&g;self, expr&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(expr)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; ZeroDivisionError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; self.muffled:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Division by zero is illegal&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;calculator = MuffledCalculator()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;calculator.calc(&l;span class=\&q;string\&q;&g;&a;#x27;10 / 2&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# calculator.calc(&a;#x27;10 / 0&a;#x27;)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 没启用抑制, 会向上层抛出, 控制台显示异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;calculator.muffled = &l;span class=\&q;literal\&q;&g;True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;calculator.calc(&l;span class=\&q;string\&q;&g;&a;#x27;10 / 0&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 启用抑制, 不向外层抛出异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;number\&q;&g;1&l;/span&g;/&l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; ZeroDivisionError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; ValueError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# raise 带参数, 引发别的异常, 在这种情况下,导致进入except子句的异常将被作为**异常上下文**存储起来,&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 并出现在最终的错误消息中&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 使用raise ... from ...语句来提供自己的异常上下文,也可使用None来禁用上下文&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;number\&q;&g;1&l;/span&g;/&l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; ZeroDivisionError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# raise ValueError from None&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# raise ValueError from TypeError&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;&l;code&g;异常上下文&l;/code&g;是指在处理异常时,可以将之前发生的异常信息与当前的异常关联起来,以提供更详细的异常追踪和调试信息。异常上下文允许开发人员在抛出一个新的异常时,指定之前发生的异常作为新异常的原因,从而形成一个&l;code&g;异常链&l;/code&g;。&l;/p&g;\n&l;h3 id=\&q;处理异常\&q;&g;处理异常&l;a title=\&q;#处理异常\&q; href=\&q;#处理异常\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;48&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;49&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;50&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;51&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;52&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;53&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;54&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;55&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;56&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x / y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; (ZeroDivisionError, TypeError, NameError, ValueError):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Your numbers were bogus ...&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x / y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; (ZeroDivisionError, ValueError) &l;span class=\&q;keyword\&q;&g;as&l;/span&g; e:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(e)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x / y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Something wrong happened ...&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 不指定参数会捕获全部异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;像这样捕获所有的异常很危险,因为这不仅会隐藏你有心理准备的错误,还会隐藏你没有考&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;虑过的错误。这还将捕获用户使用Ctrl + C终止执行的企图、调用函数sys.exit来终止执行的企图&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;等。在大多数情况下,更好的选择是使用except Exception as e并对异常对象进行检查。这样做&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;将让不是从Exception派生而来的为数不多的异常成为漏网之鱼,其中包括SystemExit和&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;KeyboardInterrupt,因为它们是从BaseException(Exception的超类)派生而来的。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% 使用else&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;while&l;/span&g; &l;span class=\&q;literal\&q;&g;True&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; value = x / y&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;x / y is&a;#x27;&l;/span&g;, value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; Exception &l;span class=\&q;keyword\&q;&g;as&l;/span&g; e:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Invalid input:&a;#x27;&l;/span&g;, e)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Please try again&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;break&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 发生异常, 程序中断不会执行else&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;number\&q;&g;1&l;/span&g; / &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Unknown variable&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;That went well!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;finally&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Cleaning up.&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;函数与异常\&q;&g;函数与异常&l;a title=\&q;#函数与异常\&q; href=\&q;#函数与异常\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;异常和函数有着天然的联系。如果不处理函数中引发的异常,它将向上传播到调用函数的地方。如果在那里也未得到处理,异常将继续传播,直至到达主程序(全局作用域)。如果主程序中也没有异常处理程序,程序将&l;code&g;终止并显示栈跟踪消息&l;/code&g;。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;faulty&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; Exception(&l;span class=\&q;string\&q;&g;&a;#x27;Something is wrong&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;ignore_exception&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; faulty()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;handle_exception&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; faulty()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Exception handled&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# ignore_exception()&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;handle_exception()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;faulty中引发的异常依次从faulty和ignore_exception向外传播,最终导致显示&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;一条栈跟踪消息。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;调用handle_exception时,异常最终传播到handle_exception,并被这里的&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;try/except语句处理。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;obj = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; obj.write&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; AttributeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;The object is not writeable&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;The object is writeable&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;不那么异常的情况\&q;&g;不那么异常的情况&l;a title=\&q;#不那么异常的情况\&q; href=\&q;#不那么异常的情况\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;如果你只想发出警告,指出情况偏离了正轨,可使用&l;code&g;模块warnings中的函数warn&l;/code&g;。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; warnings &l;span class=\&q;keyword\&q;&g;import&l;/span&g; filterwarnings&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; warnings &l;span class=\&q;keyword\&q;&g;import&l;/span&g; warn&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;cuka blyat!!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;filterwarnings(&l;span class=\&q;string\&q;&g;&a;quot;ignore&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;test&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;filterwarnings(&l;span class=\&q;string\&q;&g;&a;quot;error&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;bad&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;发出警告时,可指定将引发的异常(即警告类别),&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;但必须是Warning的子类。如果将警告转换为错误,将使用你指定的异常。另外,还可根据异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;来过滤掉特定类型的警告。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;filterwarnings(&l;span class=\&q;string\&q;&g;&a;quot;error&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;This function is really old...&a;quot;&l;/span&g;, DeprecationWarning)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;filterwarnings(&l;span class=\&q;string\&q;&g;&a;quot;ignore&a;quot;&l;/span&g;, category=DeprecationWarning)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;Another deprecation warning.&a;quot;&l;/span&g;, DeprecationWarning) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;Something else.&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;魔法方法、特性和迭代器\&q;&g;魔法方法、特性和迭代器&l;a title=\&q;#魔法方法、特性和迭代器\&q; href=\&q;#魔法方法、特性和迭代器\&q;&g;&l;/a&g;&l;/h2&g;\n&l;p&g;在Python中,有些名称很特别,开头和结尾都是两个下划线。如__future__。这样的拼写表示名称有特殊意义,因此绝不要在程序中创建这样的名称。在这样的名称中,很大一部分都是魔法(特殊)方法的名称。如果你的对象实现了这些方法,它们将在特定情况下(具体是哪种情况取决于方法的名称)被Python调用,而几乎不需要直接调用。&l;/p&g;\n&l;p&g;有些功能(如特性和函数super)不适用于旧式类, &l;code&g;__metaclass__ = type&l;/code&g; 能将旧类(Python3之前)转换为新式类, 即设置当前类的元类(metaclass), 元类是其他类所属的类. 或者手动继承自一个新式类, 如Object&l;/p&g;\n&l;h3 id=\&q;构造函数\&q;&g;构造函数&l;a title=\&q;#构造函数\&q; href=\&q;#构造函数\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;FooBar&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.somevar = &l;span class=\&q;number\&q;&g;42&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f = FooBar()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f.somevar&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;blockquote&g;\n&l;p&g;Python提供了魔法方法&l;code&g;__del__&l;/code&g;,也称作析构函数(destructor)。这个方法在对象被销毁&l;br&g;\n(作为垃圾被收集)前被调用,但鉴于你无法知道准确的调用时间,建议尽可能不要使用__del__。&l;/p&g;\n&l;/blockquote&g;\n&l;h3 id=\&q;super-调用超类构造函数\&q;&g;super 调用超类构造函数&l;a title=\&q;#super-调用超类构造函数\&q; href=\&q;#super-调用超类构造函数\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Bird&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.hungry = &l;span class=\&q;literal\&q;&g;True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;eat&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; self.hungry:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Aaaah ...&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.hungry = &l;span class=\&q;literal\&q;&g;False&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;No, thanks!&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;SongBird&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Bird&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;super&l;/span&g;().__init__()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 或者 Bird.__init__(self) # 调用未关联的超类的构造函数, 相当于一个指向父类的指针&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.sound = &l;span class=\&q;string\&q;&g;&a;#x27;Squawk!&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;sing&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(self.sound)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;sb = SongBird()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;sb.eat()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;SongBird2&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Bird&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; Bird.__init__(self) &l;span class=\&q;comment\&q;&g;# 调用未关联的超类的构造函数, 使得父类中初始化的hungry存在&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.sound = &l;span class=\&q;string\&q;&g;&a;#x27;Squawk!&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;sing&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(self.sound)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;sb = SongBird2()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;sb.eat()&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;元素访问\&q;&g;元素访问&l;a title=\&q;#元素访问\&q; href=\&q;#元素访问\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;基本的序列和映射协议非常简单,但要实现序列和映射的所有功能,需要实现很多魔法方法。&l;/p&g;\n&l;p&g;在Python中,&l;code&g;协议通常指的是规范行为的规则&l;/code&g;&l;br&g;\n在Python中,&l;code&g;多态仅仅基于对象的行为&l;/code&g;(而不基于祖先,如属于哪个类或其超类等, 所谓鸭子类型),因此这个概念很重要:其他的语言可能要求对象属于特定的类或实现了特定的接口,而Python通常只要求对象遵循特定的协议。&l;/p&g;\n&l;h4 id=\&q;基本的序列和映射协议\&q;&g;基本的序列和映射协议&l;a title=\&q;#基本的序列和映射协议\&q; href=\&q;#基本的序列和映射协议\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;序列和映射基本上是元素(item)的集合,要实现它们的基本行为(协议),不可变对象需要实现2个方法,而可变对象需要实现4个。&l;/p&g;\n&l;ul&g;\n&l;li&g;&l;strong&g;len&l;/strong&g;(self):这个方法应返回集合包含的项数,对序列来说为元素个数,对映射来说为键值对数。如果__len__返回零(且没有实现覆盖这种行为的__nonzero__),对象在布尔上下文中将被视为假(就像空的列表、元组、字符串和字典一样)。&l;/li&g;\n&l;li&g;&l;strong&g;getitem&l;/strong&g;(self, key):这个方法应返回与指定键相关联的值。对序列来说,键应该是0~n-1的整数(也可以是负数,这将在后面说明),其中n为序列的长度。对映射来说,键可以是任何类型。&l;/li&g;\n&l;li&g;&l;strong&g;setitem&l;/strong&g;(self, key, value):这个方法应以与键相关联的方式存储值,以便以后能够使用__getitem__来获取。当然,仅当对象可变时才需要实现这个方法。&l;/li&g;\n&l;li&g;&l;strong&g;delitem&l;/strong&g;(self, key):这个方法在对对象的组成部分使用__del__语句时被调用,应删除与key相关联的值。同样,仅当对象可变(且允许其项被删除)时,才需要实现这个方法。&l;/li&g;\n&l;/ul&g;\n&l;p&g;对于这些方法,还有一些额外的要求:&l;/p&g;\n&l;ul&g;\n&l;li&g;对于序列,如果键为负整数,应从末尾往前数。换而言之,x[-n]应与x[len(x)-n]等效。&l;/li&g;\n&l;li&g;如果键的类型不合适(如对序列使用字符串键),可能引发TypeError异常。&l;/li&g;\n&l;li&g;对于序列,如果索引的类型是正确的,但不在允许的范围内,应引发IndexError异常。&l;/li&g;\n&l;/ul&g;\n&l;p&g;要了解更复杂的接口和使用的抽象基类(Sequence),请参阅有关&l;code&g;模块collections&l;/code&g;的文档。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;check_index&l;/span&g;(&l;span class=\&q;params\&q;&g;key&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; &l;span class=\&q;keyword\&q;&g;not&l;/span&g; &l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(key, &l;span class=\&q;built_in\&q;&g;int&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; TypeError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; key &a;lt; &l;span class=\&q;number\&q;&g;0&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; IndexError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 无穷序列&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;ArithmeticSequence&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, start=&l;span class=\&q;number\&q;&g;0&l;/span&g;, step=&l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.start = start&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.step = step&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.changed = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__getitem__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, key&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; check_index(key)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.changed[key]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; KeyError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.start + key*self.step&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__settime__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, key, value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; check_index(key)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.changed[key] = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = ArithmeticSequence(&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s[&l;span class=\&q;number\&q;&g;4&l;/span&g;])&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;从-list、dict-和-str-派生\&q;&g;从 list、dict 和 str 派生&l;a title=\&q;#从-list、dict-和-str-派生\&q; href=\&q;#从-list、dict-和-str-派生\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 带计数器的list&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;CounterList&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;list&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, *args&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;super&l;/span&g;().__init__(*args)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.counter = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__getitem__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, index&l;/span&g;): &l;span class=\&q;comment\&q;&g;# 访问元素列表, counter++&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.counter += &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;built_in\&q;&g;super&l;/span&g;(CounterList, self).__getitem__(index)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;c1 = CounterList(&l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;c1.reverse()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; c1[&l;span class=\&q;number\&q;&g;3&l;/span&g;:&l;span class=\&q;number\&q;&g;6&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1.counter)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;c1[&l;span class=\&q;number\&q;&g;1&l;/span&g;]+c1[&l;span class=\&q;number\&q;&g;3&l;/span&g;]+c1[&l;span class=\&q;number\&q;&g;4&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1.counter)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;特性\&q;&g;特性&l;a title=\&q;#特性\&q; href=\&q;#特性\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;通过存取方法定义的属性通常称为特性(property)。&l;/p&g;\n&l;h4 id=\&q;函数-property\&q;&g;函数 property&l;a title=\&q;#函数-property\&q; href=\&q;#函数-property\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Rectangle&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.width = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.height = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;set_size&l;/span&g;(&l;span class=\&q;params\&q;&g;self, size&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.width, self.height = size&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;get_size&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.width, self.height&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; size = &l;span class=\&q;built_in\&q;&g;property&l;/span&g;(get_size, set_size)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 这些参数分别名为fget、fset、fdel和doc。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r = Rectangle()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r.width, r.height = &l;span class=\&q;number\&q;&g;10&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(r.size)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MyClass&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self._my_property = &l;span class=\&q;literal\&q;&g;None&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;get_my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的读取操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self._my_property&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;set_my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self, value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的设置操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self._my_property = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;del_my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的删除操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;del&l;/span&g; self._my_property&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; my_property = &l;span class=\&q;built_in\&q;&g;property&l;/span&g;(get_my_property, set_my_property,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; del_my_property, &l;span class=\&q;string\&q;&g;&a;quot;mydoc&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj = MyClass()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.my_property) &l;span class=\&q;comment\&q;&g;# 读取属性值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.my_property = &l;span class=\&q;number\&q;&g;42&l;/span&g; &l;span class=\&q;comment\&q;&g;# 设置属性值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.my_property) &l;span class=\&q;comment\&q;&g;# 读取属性值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; obj.my_property &l;span class=\&q;comment\&q;&g;# 删除属性&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;property提供了一种以属性访问器的方式对属性进行定义和操作的机制。它使您能够在属性访问过程中执行自定义的逻辑,提供更好的封装、控制和灵活性,同时保持代码的可读性和可维护性&l;/p&g;\n&l;p&g;通过装饰器来实现的另一种方法&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MyClass&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self._my_property = &l;span class=\&q;literal\&q;&g;None&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @property&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的读取操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self._my_property&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @my_property.setter&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self, value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的设置操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self._my_property = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @my_property.deleter&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的删除操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;del&l;/span&g; self._my_property&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj = MyClass()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.my_property)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.my_property = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.my_property)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; obj.my_property&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;静态方法,-类方法\&q;&g;静态方法, 类方法&l;a title=\&q;#静态方法,-类方法\&q; href=\&q;#静态方法,-类方法\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;静态方法和类方法在Python中具有一些不同的特点和用法。&l;/p&g;\n&l;p&g;静态方法(Static Method):&l;/p&g;\n&l;ul&g;\n&l;li&g;静态方法是属于类的方法,而不是属于类的实例的方法。&l;/li&g;\n&l;li&g;它们在类中定义,并且可以直接通过类名调用,无需创建类的实例。&l;/li&g;\n&l;li&g;静态方法没有对类或实例的隐式引用,因此它们无法访问类或实例的属性和方法。&l;/li&g;\n&l;li&g;静态方法通常用于实现与类相关的辅助功能,不需要访问类的状态或属性。&l;/li&g;\n&l;/ul&g;\n&l;p&g;类方法(Class Method):&l;/p&g;\n&l;ul&g;\n&l;li&g;类方法是属于类的方法,而不是属于类的实例的方法。&l;/li&g;\n&l;li&g;它们在类中定义,并且可以通过类名或类的实例调用。&l;/li&g;\n&l;li&g;类方法的第一个参数通常被命名为cls,它指向类本身而不是类的实例。&l;/li&g;\n&l;li&g;类方法可以访问和修改类级别的属性,也可以通过cls参数调用其他类方法。&l;/li&g;\n&l;/ul&g;\n&l;p&g;静态方法和类方法的区别在于它们的调用方式和对类或实例的引用方式。静态方法是通过类名直接调用的,没有对类或实例的引用;而类方法可以通过类名或类的实例调用,并且可以通过cls参数访问类级别的属性和方法。&l;/p&g;\n&l;p&g;使用静态方法和类方法可以更好地组织和管理代码,使其更具可读性和可维护性。静态方法适用于与类相关的辅助功能,而类方法适用于需要访问和操作类级别属性和方法的情况。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MyClass&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;smeth&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;This is a static method&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; smeth = &l;span class=\&q;built_in\&q;&g;staticmethod&l;/span&g;(smeth)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;cmeth&l;/span&g;(&l;span class=\&q;params\&q;&g;cls&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;This is a class method of&a;#x27;&l;/span&g;, cls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; cmeth = &l;span class=\&q;built_in\&q;&g;classmethod&l;/span&g;(cmeth)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj = MyClass()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;MyClass.smeth()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;MyClass.cmeth()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.cmeth()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 虽然可以, 但最好不要用实例来访问静态方法&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.smeth()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;静态方法的定义中没有参数self,可直接通过类来调用。类方法的定义中包含类似于self的参数,通常被命&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;名为cls。对于类方法,也可通过对象直接调用,但参数cls将自动关联到类。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MyClass&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @staticmethod&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;smeth&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;This is a static method&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @classmethod&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;cmeth&l;/span&g;(&l;span class=\&q;params\&q;&g;cls&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;This is a class method of&a;#x27;&l;/span&g;, cls)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;getattr,-setattr-等\&q;&g;&l;strong&g;getattr&l;/strong&g;, &l;strong&g;setattr&l;/strong&g; 等&l;a title=\&q;#getattr,-setattr-等\&q; href=\&q;#getattr,-setattr-等\&q;&g;&l;/a&g;&l;/h4&g;\n&l;ul&g;\n&l;li&g;&l;strong&g;getattribute&l;/strong&g;(self, name):在属性被访问时自动调用(只适用于新式类)。&l;/li&g;\n&l;li&g;&l;strong&g;getattr&l;/strong&g;(self, name):在属性被访问而对象没有这样的属性时自动调用。&l;/li&g;\n&l;li&g;&l;strong&g;setattr&l;/strong&g;(self, name, value):试图给属性赋值时自动调用。&l;/li&g;\n&l;li&g;&l;strong&g;delattr&l;/strong&g;(self, name):试图删除属性时自动调用。&l;/li&g;\n&l;/ul&g;\n&l;p&g;__getattribute__在属性被访问之前被调用,而__getattr__在属性访问失败后被调用&l;br&g;\n尽量使用property而不是这些特殊方法&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Rectangle&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.width = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.height = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__setattr__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name, value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; name == &l;span class=\&q;string\&q;&g;&a;#x27;size&a;#x27;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.width, self.height = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.__dict__[name] = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__getattr__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; name == &l;span class=\&q;string\&q;&g;&a;#x27;size&a;#x27;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.width, self.height&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; AttributeError()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__getattribute__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; name == &l;span class=\&q;string\&q;&g;&a;#x27;area&a;#x27;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.width * self.height&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;built_in\&q;&g;super&l;/span&g;().__getattribute__(name)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj = Rectangle()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.__setattr__(&l;span class=\&q;string\&q;&g;&a;#x27;size&a;#x27;&l;/span&g;, (&l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.__getattr__(&l;span class=\&q;string\&q;&g;&a;#x27;size&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.__getattribute__(&l;span class=\&q;string\&q;&g;&a;#x27;width&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.width)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.area)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;迭代器\&q;&g;迭代器&l;a title=\&q;#迭代器\&q; href=\&q;#迭代器\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;方法&l;code&g;__iter__返回一个迭代器&l;/code&g;,它是包含方法__next__的对象,而调用这个方法时可不提供&l;br&g;\n任何参数。当你调用方法__next__时,迭代器应返回其下一个值。如果迭代器没有可供返回的值,&l;br&g;\n应引发StopIteration异常。你还可使用内置的便利函数next,在这种情况下,next(it)与&l;br&g;\nit.&l;strong&g;next&l;/strong&g;()等效。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Fibs&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.a = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.b = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__next__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.a, self.b = self.b, self.a + self.b&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.a&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__iter__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;fibs = Fibs()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; f &l;span class=\&q;keyword\&q;&g;in&l;/span&g; fibs:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; f &a;lt; &l;span class=\&q;number\&q;&g;100&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(f)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;break&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;it = &l;span class=\&q;built_in\&q;&g;iter&l;/span&g;([&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 获得一个迭代器&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(it.__next__())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(it))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% 从迭代器创建序列&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;TestIterator&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; value = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__next__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.value += &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; self.value &a;gt; &l;span class=\&q;number\&q;&g;10&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; StopIteration&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__iter__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 更正规的定义是,实现了方法__iter__的对象是可迭代的,而实现了方法__next__的对象是迭代器。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# TestIterator 是一个迭代器, 这个类的对象是可迭代的, iter方法获取迭代器, next 方法进行迭代&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ti = TestIterator()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(ti))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;生成器\&q;&g;生成器&l;a title=\&q;#生成器\&q; href=\&q;#生成器\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;生成器(Generator)和迭代器(Iterator)是Python中用于处理可迭代对象的两种不同的概念。&l;/p&g;\n&l;p&g;迭代器(Iterator):&l;/p&g;\n&l;ul&g;\n&l;li&g;\n&l;p&g;迭代器是一种实现了迭代器协议的对象,可以通过iter()函数进行迭代。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;迭代器对象必须实现__iter__()方法和__next__()方法。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;&l;strong&g;iter&l;/strong&g;()方法返回迭代器对象本身,&l;strong&g;next&l;/strong&g;()方法返回迭代的下一个值。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;迭代器可以一次生成一个值,并且只能向前迭代,不能回溯或重复迭代。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;迭代器可以使用for循环进行迭代,也可以使用next()函数手动迭代。&l;br&g;\n生成器(Generator):&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;生成器是一种特殊的迭代器,使用函数或生成器表达式创建。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;生成器函数是一个包含yield关键字的函数,它可以暂停和恢复执行。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;每次调用生成器函数时,会返回一个生成器对象。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;生成器对象可以像迭代器一样进行迭代,每次迭代都会执行生成器函数中的代码,直到遇到yield语句并返回一个值。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;生成器可以生成多个值,并且可以灵活地控制生成的值。&l;/p&g;\n&l;/li&g;\n&l;/ul&g;\n&l;p&g;总结起来,迭代器是一种实现了迭代器协议的对象,它可以一次生成一个值并向前迭代。而生成器是一种特殊的迭代器,它使用函数或生成器表达式创建,并可以在每次迭代时生成多个值。&l;/p&g;\n&l;p&g;生成器相对于迭代器更加灵活和简洁,可以通过生成器函数来定义复杂的迭代逻辑,而不需要显式地实现__iter__()和__next__()方法。此外,生成器还可以使用yield语句来暂停和恢复执行,使得生成器在处理大量数据或无限序列时非常高效。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;nested = [[&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;], [&l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;], [&l;span class=\&q;number\&q;&g;5&l;/span&g;]]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;flatten&l;/span&g;(&l;span class=\&q;params\&q;&g;nested&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; sublist &l;span class=\&q;keyword\&q;&g;in&l;/span&g; nested:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; element &l;span class=\&q;keyword\&q;&g;in&l;/span&g; sublist:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; element&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 包含yield语句的函数都被称为生成器&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 生成器不是使用return返回一个&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 值,而是可以生成多个值,每次一个。每次使用yield生成一个值后,函数都将冻结,即在此停&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 止执行,等待被重新唤醒。被重新唤醒后,函数将从停止的地方开始继续执行。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(flatten(nested))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; num &l;span class=\&q;keyword\&q;&g;in&l;/span&g; flatten(nested):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(num)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 生成器推导(也叫生成器表达式)。其工作原理与列表推导相同,但不是创建一个列表(即不立即执行循环)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# ,而是返回一个生成器,让你能够逐步执行计算。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;g = (i**&l;span class=\&q;number\&q;&g;2&l;/span&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;0&l;/span&g;, &l;span class=\&q;number\&q;&g;10&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(g), &l;span class=\&q;built_in\&q;&g;next&l;/span&g;(g))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 直接在一对既有的圆括号内(如在函数调用中)使用生成器推导时,无需再添加一对圆括号。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;sum&l;/span&g;(i**&l;span class=\&q;number\&q;&g;2&l;/span&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;)))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;递归式生成器\&q;&g;递归式生成器&l;a title=\&q;#递归式生成器\&q; href=\&q;#递归式生成器\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;flatten&l;/span&g;(&l;span class=\&q;params\&q;&g;nested&l;/span&g;): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;: &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; sublist &l;span class=\&q;keyword\&q;&g;in&l;/span&g; nested: &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; element &l;span class=\&q;keyword\&q;&g;in&l;/span&g; flatten(sublist): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; element &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError: &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; nested&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;flatten&l;/span&g;(&l;span class=\&q;params\&q;&g;nested&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 不迭代类似于字符串的对象:&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; nested + &l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; TypeError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; sublist &l;span class=\&q;keyword\&q;&g;in&l;/span&g; nested:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; element &l;span class=\&q;keyword\&q;&g;in&l;/span&g; flatten(sublist):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; element&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; nested&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;res = &l;span class=\&q;built_in\&q;&g;list&l;/span&g;(flatten([[[&l;span class=\&q;number\&q;&g;1&l;/span&g;], &l;span class=\&q;number\&q;&g;2&l;/span&g;], &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, [&l;span class=\&q;number\&q;&g;5&l;/span&g;, [&l;span class=\&q;number\&q;&g;6&l;/span&g;, &l;span class=\&q;number\&q;&g;7&l;/span&g;]], &l;span class=\&q;number\&q;&g;8&l;/span&g;]))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(res)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(flatten([&l;span class=\&q;string\&q;&g;&a;#x27;foo&a;#x27;&l;/span&g;, [&l;span class=\&q;string\&q;&g;&a;#x27;bar&a;#x27;&l;/span&g;, [&l;span class=\&q;string\&q;&g;&a;#x27;baz&a;#x27;&l;/span&g;]]])))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;通用生成器\&q;&g;通用生成器&l;a title=\&q;#通用生成器\&q; href=\&q;#通用生成器\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;生成器是包含关键字yield的函数,但被调用时不会执行函数体内的代码,而是返回一个迭代器。每次请求值时,都将执行生成器的代码,直到遇到yield或return。yield意味着应生成一个值,而return意味着生成器应停止执行(即不再生成值;仅当在生成器调用return时,才能不提供任何参数)。&l;/p&g;\n&l;p&g;换而言之,生成器由两个单独的部分组成:生成器的函数和生成器的迭代器。生成器的函数是由def语句定义的,其中包含yield。生成器的迭代器是这个函数返回的结果。用不太准确的话说,这两个实体通常被视为一个,通称为生成器。&l;/p&g;\n&l;p&g;对于生成器的函数返回的迭代器,可以像使用其他迭代器一样使用它&l;/p&g;\n&l;h4 id=\&q;生成器的方法\&q;&g;生成器的方法&l;a title=\&q;#生成器的方法\&q; href=\&q;#生成器的方法\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;在生成器开始运行后,可使用生成器和外部之间的通信渠道向它提供值。这个通信渠道包含如下两个端点。&l;/p&g;\n&l;ul&g;\n&l;li&g;外部世界:外部世界可访问生成器的方法send,这个方法类似于next,但接受一个参数(要发送的“消息”,可以是任何对象)。&l;/li&g;\n&l;li&g;生成器:在挂起的生成器内部,yield可能用作表达式而不是语句。换而言之,当生成器重新运行时yield返回一个值——通过send从外部世界发送的值。如果使用的是next,yield将返回None&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;repeater&l;/span&g;(&l;span class=\&q;params\&q;&g;value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;while&l;/span&g; &l;span class=\&q;literal\&q;&g;True&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; new = (&l;span class=\&q;keyword\&q;&g;yield&l;/span&g; value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; new &l;span class=\&q;keyword\&q;&g;is&l;/span&g; &l;span class=\&q;keyword\&q;&g;not&l;/span&g; &l;span class=\&q;literal\&q;&g;None&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; value = new&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r = repeater(&l;span class=\&q;number\&q;&g;42&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(r)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(r))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r.send(&l;span class=\&q;string\&q;&g;&a;quot;hello world&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(r)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(r))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(r))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;生成器还包含另外两个方法。&l;br&g;\n方法throw:用于在生成器中(yield表达式处)引发异常,调用时可提供一个异常类型、一个可选值和一个traceback对象。&l;/p&g;\n&l;p&g;方法close:用于停止生成器,调用时无需提供任何参数。&l;br&g;\n方法close( 由Python垃圾收集器在需要时调用)也是基于异常的:在yield处引发&l;br&g;\nGeneratorExit异常。因此如果要在生成器中提供一些清理代码,可将yield放在一条try/finally&l;br&g;\n语句中。如果愿意,也可捕获GeneratorExit异常,但随后必须重新引发它(可能在清理后)、引&l;br&g;\n发其他异常或直接返回。对生成器调用close后,再试图从它那里获取值将导致RuntimeError异常。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 模拟生成器&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;flatten&l;/span&g;(&l;span class=\&q;params\&q;&g;nested&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; result = []&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 不迭代类似于字符串的对象:&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; nested + &l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; TypeError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; sublist &l;span class=\&q;keyword\&q;&g;in&l;/span&g; nested:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; element &l;span class=\&q;keyword\&q;&g;in&l;/span&g; flatten(sublist):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; result.append(element)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; result.append(nested)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; result&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 这无法模拟无穷生成器,因为显然不能将这种生成器的值都存储到一个列表中&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;八皇后问题\&q;&g;八皇后问题&l;a title=\&q;#八皇后问题\&q; href=\&q;#八皇后问题\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; random&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;conflict&l;/span&g;(&l;span class=\&q;params\&q;&g;state, nextX&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; nextY = &l;span class=\&q;built_in\&q;&g;len&l;/span&g;(state)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(nextY):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; &l;span class=\&q;built_in\&q;&g;abs&l;/span&g;(state[i]-nextX) &l;span class=\&q;keyword\&q;&g;in&l;/span&g; (&l;span class=\&q;number\&q;&g;0&l;/span&g;, nextY-i):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 如果下一个皇后和当前皇后的水平距离为0(在同一列)或与它们的垂直距离相等(位于一&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 条对角线上),这个表达式就为真;否则为假。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;literal\&q;&g;True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;literal\&q;&g;False&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;queens&l;/span&g;(&l;span class=\&q;params\&q;&g;num=&l;span class=\&q;number\&q;&g;8&l;/span&g;, state=(&l;span class=\&q;params\&q;&g;&l;/span&g;)&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; pos &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(num):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; &l;span class=\&q;keyword\&q;&g;not&l;/span&g; conflict(state, pos):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; &l;span class=\&q;built_in\&q;&g;len&l;/span&g;(state) == num-&l;span class=\&q;number\&q;&g;1&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g;(pos,)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; result &l;span class=\&q;keyword\&q;&g;in&l;/span&g; queens(num, state+(pos,)):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; (pos,)+result&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;prettyprint&l;/span&g;(&l;span class=\&q;params\&q;&g;solution&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;line&l;/span&g;(&l;span class=\&q;params\&q;&g;pos, length=&l;span class=\&q;built_in\&q;&g;len&l;/span&g;(&l;span class=\&q;params\&q;&g;solution&l;/span&g;)&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;string\&q;&g;&a;#x27;. &a;#x27;&l;/span&g; * (pos) + &l;span class=\&q;string\&q;&g;&a;#x27;X &a;#x27;&l;/span&g; + &l;span class=\&q;string\&q;&g;&a;#x27;. &a;#x27;&l;/span&g; * (length-pos-&l;span class=\&q;number\&q;&g;1&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; pos &l;span class=\&q;keyword\&q;&g;in&l;/span&g; solution:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(line(pos))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;prettyprint(random.choice(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(queens(&l;span class=\&q;number\&q;&g;8&l;/span&g;))))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;其他\&q;&g;其他&l;a title=\&q;#其他\&q; href=\&q;#其他\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;关于__name__-==-&s;main&s;\&q;&g;关于__name__ == ‘&l;strong&g;main&l;/strong&g;’&l;a title=\&q;#关于__name__-==-&s;main&s;\&q; href=\&q;#关于__name__-==-&s;main&s;\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;当执行当前模块, 全局变量__name__ == ‘&l;strong&g;main&l;/strong&g;’, 而引入的其他模块中的 &l;strong&g;name&l;/strong&g; 为其模块名. 这个布尔表达式可以用来判断执行的模块是否是主模块, 可以用来测试当前模块的函数(被主模块引入时值为False不会执行快中语句). 这也是由于python没有主函数, 每次会执行引入的所有语句, 故要区分不同模块中的函数调用, 就像其他语言中的规定入口函数只能有一个.&l;/p&g;\n&l;h3 id=\&q;dir()\&q;&g;dir()&l;a title=\&q;#dir()\&q; href=\&q;#dir()\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;dir() 函数是 Python 的一个内置函数,用于返回指定对象的所有属性和方法。当不带参数调用时,它会返回&l;code&g;当前范围内的变量、方法和定义的类型列表&l;/code&g;;当带参数调用时,它会返回&l;code&g;参数的属性和方法列表&l;/code&g;。&l;/p&g;\n&l;h3 id=\&q;repr()\&q;&g;repr()&l;a title=\&q;#repr()\&q; href=\&q;#repr()\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;将对象转换成字符串&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;repr&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;test&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;repr&l;/span&g;((&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;)) + &l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# &a;#x27;test&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#(1, 2, 3)good&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;str&l;/span&g;([&l;span class=\&q;number\&q;&g;1&l;/span&g;,&l;span class=\&q;number\&q;&g;2&l;/span&g;])+ &l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# [1, 2]good&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;字符串(以及数和元组)是不可变的(immutable)&l;/p&g;\n&l;p&g;&l;strong&g;参考&l;/strong&g;&l;/p&g;\n&l;ol&g;\n&l;li&g;&l;a href=\&q;\&q;&g;Fluent Python&l;/a&g;&l;/li&g;\n&l;li&g;&l;a href=\&q;\&q;&g;python核心编程&l;/a&g;&l;/li&g;\n&l;li&g;&l;a href=\&q;\&q;&g;python基础教程第三版&l;/a&g;&l;/li&g;\n&l;/ol&g;\n&q;,&q;prev&q;:{&q;title&q;:&q;[Python]文件&q;,&q;link&q;:&q;2023/09/07/[Python]文件&q;},&q;next&q;:{&q;title&q;:&q;[Vim]简单操作&q;,&q;link&q;:&q;2023/09/07/[Vim]简单操作&q;},&q;plink&q;:&q;https://www.slacr.site/2023/09/07/[Python]进阶/&q;,&q;toc&q;:[{&q;id&q;:&q;列表和元组&q;,&q;title&q;:&q;列表和元组&q;,&q;index&q;:&q;1&q;,&q;children&q;:[{&q;id&q;:&q;通用序列操作&q;,&q;title&q;:&q;通用序列操作&q;,&q;index&q;:&q;1.1&q;,&q;children&q;:[{&q;id&q;:&q;索引&q;,&q;title&q;:&q;索引&q;,&q;index&q;:&q;1.1.1&q;},{&q;id&q;:&q;切片e&q;,&q;title&q;:&q;切片E&q;,&q;index&q;:&q;1.1.2&q;},{&q;id&q;:&q;相加&a;乘法&q;,&q;title&q;:&q;相加&a;amp;乘法&q;,&q;index&q;:&q;1.1.3&q;},{&q;id&q;:&q;成员资格&q;,&q;title&q;:&q;成员资格&q;,&q;index&q;:&q;1.1.4&q;}]},{&q;id&q;:&q;列表&q;,&q;title&q;:&q;列表&q;,&q;index&q;:&q;1.2&q;},{&q;id&q;:&q;元组&q;,&q;title&q;:&q;元组&q;,&q;index&q;:&q;1.3&q;},{&q;id&q;:&q;字符串&q;,&q;title&q;:&q;字符串&q;,&q;index&q;:&q;1.4&q;,&q;children&q;:[{&q;id&q;:&q;设置格式&q;,&q;title&q;:&q;设置格式&q;,&q;index&q;:&q;1.4.1&q;},{&q;id&q;:&q;字符串方法&q;,&q;title&q;:&q;字符串方法&q;,&q;index&q;:&q;1.4.2&q;}]}]},{&q;id&q;:&q;字典&q;,&q;title&q;:&q;字典&q;,&q;index&q;:&q;2&q;,&q;children&q;:[{&q;id&q;:&q;字符串设置功能用于字典&q;,&q;title&q;:&q;字符串设置功能用于字典&q;,&q;index&q;:&q;2.1&q;},{&q;id&q;:&q;字典方法&q;,&q;title&q;:&q;字典方法&q;,&q;index&q;:&q;2.2&q;}]},{&q;id&q;:&q;条件循环&q;,&q;title&q;:&q;条件循环&q;,&q;index&q;:&q;3&q;,&q;children&q;:[{&q;id&q;:&q;导包&q;,&q;title&q;:&q;导包&q;,&q;index&q;:&q;3.1&q;},{&q;id&q;:&q;赋值魔法&q;,&q;title&q;:&q;赋值魔法&q;,&q;index&q;:&q;3.2&q;},{&q;id&q;:&q;布尔值&q;,&q;title&q;:&q;布尔值&q;,&q;index&q;:&q;3.3&q;},{&q;id&q;:&q;断言&q;,&q;title&q;:&q;断言&q;,&q;index&q;:&q;3.4&q;},{&q;id&q;:&q;一些迭代&q;,&q;title&q;:&q;一些迭代&q;,&q;index&q;:&q;3.5&q;},{&q;id&q;:&q;循环中的-else&q;,&q;title&q;:&q;循环中的 else&q;,&q;index&q;:&q;3.6&q;},{&q;id&q;:&q;简单推导&q;,&q;title&q;:&q;简单推导&q;,&q;index&q;:&q;3.7&q;},{&q;id&q;:&q;pass-del-exec&q;,&q;title&q;:&q;pass del exec&q;,&q;index&q;:&q;3.8&q;}]},{&q;id&q;:&q;抽象&q;,&q;title&q;:&q;抽象&q;,&q;index&q;:&q;4&q;,&q;children&q;:[{&q;id&q;:&q;自定义函数&q;,&q;title&q;:&q;自定义函数&q;,&q;index&q;:&q;4.1&q;,&q;children&q;:[{&q;id&q;:&q;给函数写文档&q;,&q;title&q;:&q;给函数写文档&q;,&q;index&q;:&q;4.1.1&q;},{&q;id&q;:&q;收集参数&q;,&q;title&q;:&q;收集参数&q;,&q;index&q;:&q;4.1.2&q;},{&q;id&q;:&q;分配参数&q;,&q;title&q;:&q;分配参数&q;,&q;index&q;:&q;4.1.3&q;}]},{&q;id&q;:&q;作用域&q;,&q;title&q;:&q;作用域&q;,&q;index&q;:&q;4.2&q;,&q;children&q;:[{&q;id&q;:&q;作用域嵌套&q;,&q;title&q;:&q;作用域嵌套&q;,&q;index&q;:&q;4.2.1&q;}]},{&q;id&q;:&q;函数式编程&q;,&q;title&q;:&q;函数式编程&q;,&q;index&q;:&q;4.3&q;}]},{&q;id&q;:&q;面向对象&q;,&q;title&q;:&q;面向对象&q;,&q;index&q;:&q;5&q;,&q;children&q;:[{&q;id&q;:&q;自定义类&q;,&q;title&q;:&q;自定义类&q;,&q;index&q;:&q;5.1&q;,&q;children&q;:[{&q;id&q;:&q;类的命名空间&q;,&q;title&q;:&q;类的命名空间&q;,&q;index&q;:&q;5.1.1&q;},{&q;id&q;:&q;指定超类/父类&q;,&q;title&q;:&q;指定超类&a;#x2F;父类&q;,&q;index&q;:&q;5.1.2&q;},{&q;id&q;:&q;接口和内省&q;,&q;title&q;:&q;接口和内省&q;,&q;index&q;:&q;5.1.3&q;}]},{&q;id&q;:&q;抽象基类&q;,&q;title&q;:&q;抽象基类&q;,&q;index&q;:&q;5.2&q;}]},{&q;id&q;:&q;异常&q;,&q;title&q;:&q;异常&q;,&q;index&q;:&q;6&q;,&q;children&q;:[{&q;id&q;:&q;raise-语句&q;,&q;title&q;:&q;raise 语句&q;,&q;index&q;:&q;6.1&q;},{&q;id&q;:&q;处理异常&q;,&q;title&q;:&q;处理异常&q;,&q;index&q;:&q;6.2&q;},{&q;id&q;:&q;函数与异常&q;,&q;title&q;:&q;函数与异常&q;,&q;index&q;:&q;6.3&q;},{&q;id&q;:&q;不那么异常的情况&q;,&q;title&q;:&q;不那么异常的情况&q;,&q;index&q;:&q;6.4&q;}]},{&q;id&q;:&q;魔法方法、特性和迭代器&q;,&q;title&q;:&q;魔法方法、特性和迭代器&q;,&q;index&q;:&q;7&q;,&q;children&q;:[{&q;id&q;:&q;构造函数&q;,&q;title&q;:&q;构造函数&q;,&q;index&q;:&q;7.1&q;},{&q;id&q;:&q;super-调用超类构造函数&q;,&q;title&q;:&q;super 调用超类构造函数&q;,&q;index&q;:&q;7.2&q;},{&q;id&q;:&q;元素访问&q;,&q;title&q;:&q;元素访问&q;,&q;index&q;:&q;7.3&q;,&q;children&q;:[{&q;id&q;:&q;基本的序列和映射协议&q;,&q;title&q;:&q;基本的序列和映射协议&q;,&q;index&q;:&q;7.3.1&q;},{&q;id&q;:&q;从-list、dict-和-str-派生&q;,&q;title&q;:&q;从 list、dict 和 str 派生&q;,&q;index&q;:&q;7.3.2&q;}]},{&q;id&q;:&q;特性&q;,&q;title&q;:&q;特性&q;,&q;index&q;:&q;7.4&q;,&q;children&q;:[{&q;id&q;:&q;函数-property&q;,&q;title&q;:&q;函数 property&q;,&q;index&q;:&q;7.4.1&q;},{&q;id&q;:&q;静态方法,-类方法&q;,&q;title&q;:&q;静态方法, 类方法&q;,&q;index&q;:&q;7.4.2&q;},{&q;id&q;:&q;getattr,-setattr-等&q;,&q;title&q;:&q;getattr, setattr 等&q;,&q;index&q;:&q;7.4.3&q;}]},{&q;id&q;:&q;迭代器&q;,&q;title&q;:&q;迭代器&q;,&q;index&q;:&q;7.5&q;},{&q;id&q;:&q;生成器&q;,&q;title&q;:&q;生成器&q;,&q;index&q;:&q;7.6&q;,&q;children&q;:[{&q;id&q;:&q;递归式生成器&q;,&q;title&q;:&q;递归式生成器&q;,&q;index&q;:&q;7.6.1&q;},{&q;id&q;:&q;通用生成器&q;,&q;title&q;:&q;通用生成器&q;,&q;index&q;:&q;7.6.2&q;},{&q;id&q;:&q;生成器的方法&q;,&q;title&q;:&q;生成器的方法&q;,&q;index&q;:&q;7.6.3&q;}]},{&q;id&q;:&q;八皇后问题&q;,&q;title&q;:&q;八皇后问题&q;,&q;index&q;:&q;7.7&q;}]},{&q;id&q;:&q;其他&q;,&q;title&q;:&q;其他&q;,&q;index&q;:&q;8&q;,&q;children&q;:[{&q;id&q;:&q;关于__name__-==-&s;main&s;&q;,&q;title&q;:&q;关于__name__ &a;#x3D;&a;#x3D; ‘main’&q;,&q;index&q;:&q;8.1&q;},{&q;id&q;:&q;dir()&q;,&q;title&q;:&q;dir()&q;,&q;index&q;:&q;8.2&q;},{&q;id&q;:&q;repr()&q;,&q;title&q;:&q;repr()&q;,&q;index&q;:&q;8.3&q;}]}],&q;reward&q;:true,&q;copyright&q;:{&q;author&q;:&q;slacr_&q;,&q;license&q;:&q;&l;a href=\&q;https://creativecommons.org/licenses/by-nc-sa/4.0/\&q; target=\&q;_blank\&q;&g;&l;img src = \&q;/lib/cc-by-nc-sa.svg\&q;&g;&l;/a&g;&q;,&q;published&q;:&q;September 7, 2023&q;,&q;updated&q;:&q;September 7, 2023&q;},&q;reading_time&q;:&q;12458 words in 83 min&q;}}
a;quot;&l;/span&g; &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;str&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;amp;&a;quot;&l;/span&g; &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;str&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;db = [&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; [&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;11111&a;quot;&l;/span&g;],&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; [&l;span class=\&q;string\&q;&g;&a;quot;smith&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;12345&a;quot;&l;/span&g;],&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; [&l;span class=\&q;string\&q;&g;&a;quot;frank&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;33331&a;quot;&l;/span&g;],&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; ]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;username = &l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;login:&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;password = &l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;passwd:&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; [username, password] &l;span class=\&q;keyword\&q;&g;in&l;/span&g; db:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Access granted&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Access denyed&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;列表\&q;&g;列表&l;a title=\&q;#列表\&q; href=\&q;#列表\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls[&l;span class=\&q;number\&q;&g;4&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls[-&l;span class=\&q;number\&q;&g;2&l;/span&g;:]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls[&l;span class=\&q;number\&q;&g;0&l;/span&g;] = &l;span class=\&q;string\&q;&g;&a;quot;test&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = &l;span class=\&q;built_in\&q;&g;list&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = &l;span class=\&q;string\&q;&g;&a;quot;&a;quot;&l;/span&g;.join(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 替换一个空切片, 相当于插入&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls[&l;span class=\&q;number\&q;&g;2&l;/span&g;:&l;span class=\&q;number\&q;&g;2&l;/span&g;] = &l;span class=\&q;string\&q;&g;&a;quot;hi&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls[&l;span class=\&q;number\&q;&g;2&l;/span&g; : &l;span class=\&q;number\&q;&g;4&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls2 = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;-&a;quot;&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;-&a;quot;&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls2[&l;span class=\&q;number\&q;&g;1&l;/span&g;:-&l;span class=\&q;number\&q;&g;1&l;/span&g;:&l;span class=\&q;number\&q;&g;2&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls2)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls_copy = ls.copy()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls.sort()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# sort方法返回None, 修改原序列&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;res = &l;span class=\&q;built_in\&q;&g;sorted&l;/span&g;(ls_copy)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(res)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls_copy)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# sorted() 返回新序列, 不该变原序列&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 高级排序&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x.sort(reverse=&l;span class=\&q;literal\&q;&g;True&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = [&l;span class=\&q;string\&q;&g;&a;quot;dfsd&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;sd&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;是非得失发&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;dsfdsfdsfdsfsdfsdf&a;quot;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s.sort(key=&l;span class=\&q;built_in\&q;&g;len&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 像C++中的比较器, 每次迭代器获得的值先传给len()函数处理再比较排序&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;max&l;/span&g;(&l;span class=\&q;built_in\&q;&g;set&l;/span&g;(ls), key=ls.count))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;元组\&q;&g;元组&l;a title=\&q;#元组\&q; href=\&q;#元组\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;与列表一样,元组也是序列,唯一的差别在于元组是&l;code&g;不能修改的&l;/code&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;t = &l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;span class=\&q;number\&q;&g;3&l;/span&g;,&l;span class=\&q;number\&q;&g;4&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(t)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 长度为1的元组&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;t = &l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(t)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;number\&q;&g;3&l;/span&g; * (&l;span class=\&q;number\&q;&g;1&l;/span&g;,&l;span class=\&q;string\&q;&g;&a;#x27;#&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;((&l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;span class=\&q;number\&q;&g;3&l;/span&g;)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;tuple&l;/span&g;([&l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;span class=\&q;number\&q;&g;3&l;/span&g;]))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;tuple&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;23&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;23&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;字符串\&q;&g;字符串&l;a title=\&q;#字符串\&q; href=\&q;#字符串\&q;&g;&l;/a&g;&l;/h3&g;\n&l;h4 id=\&q;设置格式\&q;&g;设置格式&l;a title=\&q;#设置格式\&q; href=\&q;#设置格式\&q;&g;&l;/a&g;&l;/h4&g;\n&l;ul&g;\n&l;li&g;way 1&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 设置字符串&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;%s, %.2f, %-5d, %x, %o&a;quot;&l;/span&g;%(&l;span class=\&q;string\&q;&g;&a;quot;hi&a;quot;&l;/span&g;, &l;span class=\&q;number\&q;&g;12.2345&l;/span&g;, &l;span class=\&q;number\&q;&g;11&l;/span&g;, -&l;span class=\&q;number\&q;&g;11&l;/span&g;, &l;span class=\&q;number\&q;&g;9&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# hi, 12.23, 11 , -b, 11&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;ul&g;\n&l;li&g;way 2&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; string &l;span class=\&q;keyword\&q;&g;import&l;/span&g; Template&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;templ = Template(&l;span class=\&q;string\&q;&g;&a;quot;You are the \\&l;svg xmlns:xlink=\&q;http://www.w3.org/1999/xlink\&q; width=\&q;10.74ex\&q; height=\&q;2.509ex\&q; style=\&q;vertical-align: -0.671ex;\&q; viewBox=\&q;0 -791.3 4624 1080.4\&q; role=\&q;img\&q; focusable=\&q;false\&q; xmlns=\&q;http://www.w3.org/2000/svg\&q; aria-labelledby=\&q;MathJax-SVG-1-Title\&q;&g;\n&l;title id=\&q;MathJax-SVG-1-Title\&q;&g;item in my \\&l;/title&g;\n&l;defs aria-hidden=\&q;true\&q;&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-69\&q; d=\&q;M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-74\&q; d=\&q;M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-65\&q; d=\&q;M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-6D\&q; d=\&q;M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-6E\&q; d=\&q;M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z\&q;&g;&l;/path&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMATHI-79\&q; d=\&q;M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z\&q;&g;&l;/path&g;\n&l;/defs&g;\n&l;g stroke=\&q;currentColor\&q; fill=\&q;currentColor\&q; stroke-width=\&q;0\&q; transform=\&q;matrix(1 0 0 -1 0 0)\&q; aria-hidden=\&q;true\&q;&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-69\&q; x=\&q;0\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-74\&q; x=\&q;345\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-65\&q; x=\&q;707\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-6D\&q; x=\&q;1173\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-69\&q; x=\&q;2052\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-6E\&q; x=\&q;2397\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-6D\&q; x=\&q;2998\&q; y=\&q;0\&q;&g;&l;/use&g;\n &l;use xlink:href=\&q;#E1-MJMATHI-79\&q; x=\&q;3876\&q; y=\&q;0\&q;&g;&l;/use&g;\n&l;/g&g;\n&l;/svg&g;place&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = templ.substitute(item = &l;span class=\&q;string\&q;&g;&a;quot;shit&a;quot;&l;/span&g;, place = &l;span class=\&q;string\&q;&g;&a;quot;hand&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# You are the shit in my hand&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;ul&g;\n&l;li&g;way 3&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; pi&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;name&a;#125; is approximately &a;#123;value:.2f&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(name = &l;span class=\&q;string\&q;&g;&a;quot;pi&a;quot;&l;/span&g;, value = pi))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;str&l;/span&g; = &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;f&a;quot;&l;span class=\&q;subst\&q;&g;&a;#123;&l;span class=\&q;built_in\&q;&g;str&l;/span&g;&a;#125;&l;/span&g; will be somebody&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# python 3.6中, 变量与替换字段同名, 可以简写, 不用键值对, 相当于省略.format&a;#123;str=str&a;#125;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h5 id=\&q;完整版\&q;&g;完整版&l;a title=\&q;#完整版\&q; href=\&q;#完整版\&q;&g;&l;/a&g;&l;/h5&g;\n&l;p&g;替换字段由如下部分组成,其中每个部分都是可选的。&l;/p&g;\n&l;ul&g;\n&l;li&g;字段名:索引或标识符,指出要设置哪个值的格式并使用结果来替换该字段。除指定值外,还可指定值的特定部分,如列表的元素。&l;/li&g;\n&l;li&g;转换标志:跟在叹号后面的单个字符。当前支持的字符包括r(表示repr)、s(表示str)和a(表示ascii)。如果你指定了转换标志,将不使用对象本身的格式设置机制,而是使用指定的函数将对象转换为字符串,再做进一步的格式设置。&l;/li&g;\n&l;li&g;格式说明符:跟在冒号后面的表达式(这种表达式是使用微型格式指定语言表示的)。格式说明符让我们能够详细地指定最终的格式,包括格式类型(如字符串、浮点数或十六进制数),字段宽度和数的精度,如何显示符号和千位分隔符,以及各种对齐和填充方式。&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;a&a;#125;&a;#123;&a;#125;&a;#123;b&a;#125;&a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, a = &l;span class=\&q;number\&q;&g;1&l;/span&g;, b = &l;span class=\&q;number\&q;&g;3&l;/span&g;)) &l;span class=\&q;comment\&q;&g;# 1234&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; math &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;templ = &l;span class=\&q;string\&q;&g;&a;quot;The &a;#123;mod.__name__&a;#125; modeule defines the value &a;#123;mod.pi&a;#125; for π&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;res = templ.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(mod=math)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(res)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# The math modeule defines the value 3.141592653589793 for π&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = &l;span class=\&q;string\&q;&g;&a;quot;&a;#123;temp[1]&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(temp = &l;span class=\&q;string\&q;&g;&a;quot;abc&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s) &l;span class=\&q;comment\&q;&g;#b&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num:b&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;number\&q;&g;42&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num:c&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;number\&q;&g;0x6211&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num:e&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;number\&q;&g;23.45&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num:%&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;number\&q;&g;23.45&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num!a&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num!s&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;num!r&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(num = &l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;101010&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;我&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;2.345000e+01&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;2345.000000%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;\\u6211&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;我&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;我&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;&l;img src=\&q;https://cdn.jsdelivr.net/gh/s1acr/PicGoLib@main/2023-9/202309241433482.png\&q; alt=\&q;\&q; loading=\&q;lazy\&q; class=\&q;φbp\&q;&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;One googol is &a;#123;:,&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;**&l;span class=\&q;number\&q;&g;100&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:010&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;3.14&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:+10&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;3.14&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:-&a;gt;10&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;3.14&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:$^12&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;WIN&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:+=12&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(-&l;span class=\&q;number\&q;&g;3.4&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#%%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:b&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;42&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;:#b&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;number\&q;&g;42&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#%%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;One googol is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;0000003.14&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g; +3.14&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;------3.14&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;MATHJAX-SSR-58&l;svg xmlns:xlink=\&q;http://www.w3.org/1999/xlink\&q; width=\&q;1.162ex\&q; height=\&q;2.343ex\&q; style=\&q;vertical-align: -0.338ex;\&q; viewBox=\&q;0 -863.1 500.5 1008.6\&q; role=\&q;img\&q; focusable=\&q;false\&q; xmlns=\&q;http://www.w3.org/2000/svg\&q; aria-labelledby=\&q;MathJax-SVG-1-Title\&q;&g;\n&l;title id=\&q;MathJax-SVG-1-Title\&q;&g;l;/title&g;\n&l;defs aria-hidden=\&q;true\&q;&g;\n&l;path stroke-width=\&q;1\&q; id=\&q;E1-MJMAIN-24\&q; d=\&q;M162 187Q162 164 146 149T109 133H103V130Q108 115 115 105Q122 92 131 82T150 64T170 52T190 44T206 40T220 37L227 36V313Q190 320 162 335Q116 358 86 404T55 508Q55 567 85 614T165 685Q186 696 225 704H227V750H273V704L286 703Q369 690 413 631Q441 588 444 531Q444 514 443 509Q439 490 425 479T391 468Q368 468 353 483T337 522Q337 546 353 560T390 575L394 576V578Q386 599 372 614T342 637T314 649T288 656L273 658V408L288 405Q329 394 355 376Q396 348 420 300T444 199Q444 130 408 76T313 1Q286 -9 276 -9H273V-56H227V-10H221Q202 -6 193 -4T155 11T108 41T74 94T55 176V182Q55 227 95 238Q103 240 108 240Q129 240 145 226T162 187ZM225 657Q219 657 204 651T169 632T135 594T121 538Q121 512 131 491T156 457T187 435T213 423T227 420V539Q227 657 225 657ZM378 169Q378 230 339 265T274 301Q273 301 273 169V37Q324 50 351 87T378 169Z\&q;&g;&l;/path&g;\n&l;/defs&g;\n&l;g stroke=\&q;currentColor\&q; fill=\&q;currentColor\&q; stroke-width=\&q;0\&q; transform=\&q;matrix(1 0 0 -1 0 0)\&q; aria-hidden=\&q;true\&q;&g;\n &l;use xlink:href=\&q;#E1-MJMAIN-24\&q; x=\&q;0\&q; y=\&q;0\&q;&g;&l;/use&g;\n&l;/g&g;\n&l;/svg&g;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;-++++++++3.4&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;101010&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;0b101010&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;width = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Please enter width: &a;#x27;&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;price_width = &l;span class=\&q;number\&q;&g;10&l;/span&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;item_width = width - price_width &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;header_fmt = &l;span class=\&q;string\&q;&g;&a;#x27;&a;#123;&a;#123;:&a;#123;&a;#125;&a;#125;&a;#125;&a;#123;&a;#123;:&a;gt;&a;#123;&a;#125;&a;#125;&a;#125;&a;#x27;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(item_width, price_width) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;fmt = &l;span class=\&q;string\&q;&g;&a;#x27;&a;#123;&a;#123;:&a;#123;&a;#125;&a;#125;&a;#125;&a;#123;&a;#123;:&a;gt;&a;#123;&a;#125;.2f&a;#125;&a;#125;&a;#x27;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(item_width, price_width) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 双大括号用于转义&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;=&a;#x27;&l;/span&g; * width) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(header_fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Item&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;Price&a;#x27;&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;-&a;#x27;&l;/span&g; * width) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Apples&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;0.4&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Pears&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;0.5&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Cantaloupes&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;1.92&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Dried Apricots (16 oz.)&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;8&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(fmt.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Prunes (4 lbs.)&a;#x27;&l;/span&g;, &l;span class=\&q;number\&q;&g;12&l;/span&g;)) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;=&a;#x27;&l;/span&g; * width)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;字符串方法\&q;&g;字符串方法&l;a title=\&q;#字符串方法\&q; href=\&q;#字符串方法\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;&l;img src=\&q;https://cdn.jsdelivr.net/gh/s1acr/PicGoLib@main/2023-9/202309241511185.png\&q; alt=\&q;\&q; loading=\&q;lazy\&q; class=\&q;φbp\&q;&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;dirs = &l;span class=\&q;string\&q;&g;&a;#x27;usr&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;bin&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;env&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;/&a;#x27;&l;/span&g;.join(dirs))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# join操作的序列必须是字符串&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;ASdsfd是&a;quot;&l;/span&g;.lower())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 词首大写&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;that&a;#x27;s all folks&a;quot;&l;/span&g;.title())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; string&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(string.capwords(&l;span class=\&q;string\&q;&g;&a;quot;that&a;#x27;s all folks&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 分隔, 默认是空白符 &l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;/usr/bin/env&a;quot;&l;/span&g;.split(&l;span class=\&q;string\&q;&g;&a;#x27;/&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;what the fuck&a;quot;&l;/span&g;.split())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 裁剪&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;###good###&a;quot;&l;/span&g;.strip(&l;span class=\&q;string\&q;&g;&a;#x27;#&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 替换 &l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;aaaabbb&a;quot;&l;/span&g;.replace(&l;span class=\&q;string\&q;&g;&a;#x27;a&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;b&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 转换&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;table = &l;span class=\&q;built_in\&q;&g;str&l;/span&g;.maketrans(&l;span class=\&q;string\&q;&g;&a;quot;abc&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;123&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(table)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 建立字符的转换表&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;abcabc&a;quot;&l;/span&g;.translate(table))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;ascii&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;电视&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Good&a;quot;&l;/span&g;.istitle())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;test&a;quot;&l;/span&g;.capitalize())&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;字典\&q;&g;字典&l;a title=\&q;#字典\&q; href=\&q;#字典\&q;&g;&l;/a&g;&l;/h2&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;items = [(&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;), (&l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;19&a;quot;&l;/span&g;)]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;dict&l;/span&g;(items)[&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &l;span class=\&q;built_in\&q;&g;dict&l;/span&g;(name = &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;, age = &l;span class=\&q;number\&q;&g;19&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d[&l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x[&l;span class=\&q;number\&q;&g;1&l;/span&g;] = &l;span class=\&q;string\&q;&g;&a;quot;a&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x[&l;span class=\&q;number\&q;&g;2&l;/span&g;] = &l;span class=\&q;string\&q;&g;&a;quot;b&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;numlist = &a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;:&a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;china&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;: &l;span class=\&q;number\&q;&g;19&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;muphy&a;quot;&l;/span&g;:&a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;england&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;:&l;span class=\&q;number\&q;&g;23&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;sakura&a;quot;&l;/span&g;:&a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;japan&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;:&l;span class=\&q;number\&q;&g;34&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;fmt = &a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;country&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;name = &l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Name:&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;request = &l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Country(c) or Age(a)?&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; request == &l;span class=\&q;string\&q;&g;&a;#x27;c&a;#x27;&l;/span&g; : key = &l;span class=\&q;string\&q;&g;&a;#x27;country&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; request == &l;span class=\&q;string\&q;&g;&a;#x27;a&a;#x27;&l;/span&g; : key = &l;span class=\&q;string\&q;&g;&a;#x27;age&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; name &l;span class=\&q;keyword\&q;&g;in&l;/span&g; numlist : &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;&a;#125;&a;#x27;s &a;#123;&a;#125; is &a;#123;&a;#125;.&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(name, fmt[key], numlist[name][key]))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;字符串设置功能用于字典\&q;&g;字符串设置功能用于字典&l;a title=\&q;#字符串设置功能用于字典\&q; href=\&q;#字符串设置功能用于字典\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;phonebook = &a;#123;&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;1234&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;brain&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;2341&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;vector&a;quot;&l;/span&g;:&l;span class=\&q;string\&q;&g;&a;quot;9990&a;quot;&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;#x27;s phone number is &a;#123;slacr&a;#125;&a;quot;&l;/span&g;.format_map(phonebook))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;字典方法\&q;&g;字典方法&l;a title=\&q;#字典方法\&q; href=\&q;#字典方法\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;48&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;49&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;50&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&a;#123;&a;#125;.fromkeys([&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;]))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;dict&l;/span&g;.fromkeys([&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;undefined&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d.get(&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 使用get()方法如果没有此key将返回None ,而使用索引则会抛出keyError异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&l;span class=\&q;string\&q;&g;&a;#x27;x&a;#x27;&l;/span&g;: &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;y&a;#x27;&l;/span&g;: &l;span class=\&q;number\&q;&g;2&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d.pop(&l;span class=\&q;string\&q;&g;&a;#x27;x&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d.popitem())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d.setdefault(&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;unknown&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d.setdefault(&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 没指定默认值None&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;quot;title&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;#x27;Python Web Site&a;#x27;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;#x27;url&a;#x27;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;http://www.python.org&a;quot;&l;/span&g;,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;#x27;changed&a;#x27;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;June 3 22:13:10&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &a;#123;&l;span class=\&q;string\&q;&g;&a;quot;title&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;Python Language Website&a;quot;&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d.update(x)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 使用一个字典来更新另一个字典&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;Donald Trump&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;age&a;quot;&l;/span&g;: &l;span class=\&q;number\&q;&g;82&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d.keys())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(d.values())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 返回对应的列表视图&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;123&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;456&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;78&a;quot;&l;/span&g;, sep=&l;span class=\&q;string\&q;&g;&a;quot;&a;quot;&l;/span&g;, end=&l;span class=\&q;string\&q;&g;&a;quot;9&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;条件循环\&q;&g;条件循环&l;a title=\&q;#条件循环\&q; href=\&q;#条件循环\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;导包\&q;&g;导包&l;a title=\&q;#导包\&q; href=\&q;#导包\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; somemodule &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; somemodule &l;span class=\&q;keyword\&q;&g;import&l;/span&g; somefunction &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; somemodule &l;span class=\&q;keyword\&q;&g;import&l;/span&g; somefunction, anotherfunction, yetanotherfunction &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; somemodule &l;span class=\&q;keyword\&q;&g;import&l;/span&g; *&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; math &l;span class=\&q;keyword\&q;&g;as&l;/span&g; foobar&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; sqrt &l;span class=\&q;keyword\&q;&g;as&l;/span&g; foobar&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# as 添加别名, 可以用来区别不同包中的同名函数&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;赋值魔法\&q;&g;赋值魔法&l;a title=\&q;#赋值魔法\&q; href=\&q;#赋值魔法\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 序列解包&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x, y = &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x, y = y, x&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x, y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;d = &a;#123;&l;span class=\&q;string\&q;&g;&a;quot;name&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;jack&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;gfriend&a;quot;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;quot;rose&a;quot;&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;key, value = d.popitem()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(key, value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;a, b, *rest = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g; ,&l;span class=\&q;number\&q;&g;4&l;/span&g; ]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(rest)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 正常解包必须左右数目相同, 否则ValueError, *号能收集多余的值成为一个列表&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 链式赋值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = y = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;布尔值\&q;&g;布尔值&l;a title=\&q;#布尔值\&q; href=\&q;#布尔值\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;bool&l;/span&g;(&l;span class=\&q;literal\&q;&g;None&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;bool&l;/span&g;(&l;span class=\&q;number\&q;&g;0&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;literal\&q;&g;True&l;/span&g; == &l;span class=\&q;number\&q;&g;1&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;number\&q;&g;1&l;/span&g; &a;lt; &l;span class=\&q;number\&q;&g;2&l;/span&g; &a;lt; &l;span class=\&q;number\&q;&g;3&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;&l;img src=\&q;https://cdn.jsdelivr.net/gh/s1acr/PicGoLib@main/2023-9/202309242120115.png\&q; alt=\&q;\&q; loading=\&q;lazy\&q; class=\&q;φbp\&q;&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;y = z = [&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(y &l;span class=\&q;keyword\&q;&g;is&l;/span&g; z)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(y == z)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x &l;span class=\&q;keyword\&q;&g;is&l;/span&g; &l;span class=\&q;keyword\&q;&g;not&l;/span&g; y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; x[-&l;span class=\&q;number\&q;&g;1&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x == y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x &l;span class=\&q;keyword\&q;&g;is&l;/span&g; y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# is 判断是否为同一个对象&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 非数值的比较会比较ord()值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;ord&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;chr&l;/span&g;(&l;span class=\&q;built_in\&q;&g;ord&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;ascii&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;我&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;25105&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;我&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;\\u6211&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;断言\&q;&g;断言&l;a title=\&q;#断言\&q; href=\&q;#断言\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 断言&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;age = -&l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;assert&l;/span&g; &l;span class=\&q;number\&q;&g;0&l;/span&g; &a;lt; age &a;lt;= &l;span class=\&q;number\&q;&g;100&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;The age must be realistic&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;一些迭代\&q;&g;一些迭代&l;a title=\&q;#一些迭代\&q; href=\&q;#一些迭代\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;names = [&l;span class=\&q;string\&q;&g;&a;#x27;anne&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;beth&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;george&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;damon&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ages = [&l;span class=\&q;number\&q;&g;12&l;/span&g;, &l;span class=\&q;number\&q;&g;45&l;/span&g;, &l;span class=\&q;number\&q;&g;32&l;/span&g;, &l;span class=\&q;number\&q;&g;102&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;built_in\&q;&g;len&l;/span&g;(names)):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(names[i], &l;span class=\&q;string\&q;&g;&a;quot; is &a;quot;&l;/span&g;, ages[i], &l;span class=\&q;string\&q;&g;&a;quot;years old&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 并行迭代, range默认生成序列从0开始&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; name, age &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;zip&l;/span&g;(names, ages): &l;span class=\&q;comment\&q;&g;# 将序列缝合成多元组序列, 不等长时会取较短的&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(name, &l;span class=\&q;string\&q;&g;&a;quot; is &a;quot;&l;/span&g;, age, &l;span class=\&q;string\&q;&g;&a;quot;years old&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% 迭代时获取索引&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;strings = [&l;span class=\&q;string\&q;&g;&a;#x27;a&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;b&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;c&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;#&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; index, string &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;enumerate&l;/span&g;(strings):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; string == &l;span class=\&q;string\&q;&g;&a;#x27;#&a;#x27;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;del&l;/span&g; strings[index]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(strings)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% 反向迭代和排序后迭代&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;sorted&l;/span&g;((&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r = &l;span class=\&q;built_in\&q;&g;reversed&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(r)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;l = &l;span class=\&q;built_in\&q;&g;list&l;/span&g;(r)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(l)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;&a;quot;&l;/span&g;.join(l))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# sorted返回一个列表,而reversed像zip那样返回一个可迭代对象。&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;循环中的-else\&q;&g;循环中的 else&l;a title=\&q;#循环中的-else\&q; href=\&q;#循环中的-else\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; sqrt&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; n &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;99&l;/span&g;, &l;span class=\&q;number\&q;&g;80&l;/span&g;, -&l;span class=\&q;number\&q;&g;1&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; root = sqrt(n)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; root == &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(root):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(n)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;break&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Didn&a;#x27;t find it!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 可以看到 添加了 else的循环语句, else部分与这个循环属于一个整体, 如果&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 循环中出现break, 那么会调出循环(不执行else), 而没出现break, else必执行&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 故else 可以用来判断一个循环是否出现了break, 是否正常执行结束&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;简单推导\&q;&g;简单推导&l;a title=\&q;#简单推导\&q; href=\&q;#简单推导\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。列表推导的工作原理非常简单,有点类似于for循环。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [x*x &l;span class=\&q;keyword\&q;&g;for&l;/span&g; x &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;, &l;span class=\&q;number\&q;&g;0&l;/span&g;, -&l;span class=\&q;number\&q;&g;1&l;/span&g;)]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [(x, y) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; x &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;3&l;/span&g;) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; y &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;3&l;/span&g;)]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;girls = [&l;span class=\&q;string\&q;&g;&a;#x27;alice&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;bernice&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;clarice&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;boys = [&l;span class=\&q;string\&q;&g;&a;#x27;chris&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;arnold&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;bob&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [(b, g) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; b &l;span class=\&q;keyword\&q;&g;in&l;/span&g; boys &l;span class=\&q;keyword\&q;&g;for&l;/span&g; g &l;span class=\&q;keyword\&q;&g;in&l;/span&g; girls &l;span class=\&q;keyword\&q;&g;if&l;/span&g; b[&l;span class=\&q;number\&q;&g;0&l;/span&g;] == g[&l;span class=\&q;number\&q;&g;0&l;/span&g;]]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 更高效的方法&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;girls.append(&l;span class=\&q;string\&q;&g;&a;quot;angella&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;letterGirls = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; girl &l;span class=\&q;keyword\&q;&g;in&l;/span&g; girls:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; letterGirls.setdefault(girl[&l;span class=\&q;number\&q;&g;0&l;/span&g;], []).append(girl)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 一对多的字典&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;([(b, g) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; b &l;span class=\&q;keyword\&q;&g;in&l;/span&g; boys &l;span class=\&q;keyword\&q;&g;for&l;/span&g; g &l;span class=\&q;keyword\&q;&g;in&l;/span&g; letterGirls[b[&l;span class=\&q;number\&q;&g;0&l;/span&g;]]])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 字典推导&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;squares = &a;#123;i:&l;span class=\&q;string\&q;&g;&a;quot;&a;#123;&a;#125; squared is &a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(i, i**&l;span class=\&q;number\&q;&g;2&l;/span&g;) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;)&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(squares[&l;span class=\&q;number\&q;&g;7&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; string&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;capital = &a;#123;a: &l;span class=\&q;string\&q;&g;&a;quot;&a;#123;&a;#125; capitalizes is &a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(a, a.capitalize()) &l;span class=\&q;keyword\&q;&g;for&l;/span&g; a &l;span class=\&q;keyword\&q;&g;in&l;/span&g; string.ascii_lowercase&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(capital[&l;span class=\&q;string\&q;&g;&a;#x27;r&a;#x27;&l;/span&g;])&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;pass-del-exec\&q;&g;pass del exec&l;a title=\&q;#pass-del-exec\&q; href=\&q;#pass-del-exec\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;48&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;49&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;50&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;51&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;52&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;53&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;54&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;55&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;name = &l;span class=\&q;string\&q;&g;&a;quot;&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;if&l;/span&g; name == &l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;please in&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;elif&l;/span&g; name.find(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;) != -&l;span class=\&q;number\&q;&g;1&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# ...&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# python 中代码块 不能为空, 修复这个问题, 只需添加一条pass 语句&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;fatal&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 对于你不再使用的对象,Python通常会将其删除(因为没有任何变量或数据结构成员指向它), GC&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 另一种方法是使用 del 函数&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; x&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls = [&l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;job&a;quot;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ls2 = ls&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; ls2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(ls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# del 只会删除引用&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;exec&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;print(&a;#x27;Hi~ o(* ̄▽ ̄*)ブ&a;#x27;)&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 然而,调用函数exec时只给它提供一个参数绝非好事。在大多数情况下,还应向它传递一个命名空间——用于放置变量的地方;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; sqrt&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# exec(&a;quot;sqrt = 1&a;quot;)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# sqrt(4)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 污染了原命名空间&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; math &l;span class=\&q;keyword\&q;&g;import&l;/span&g; sqrt&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 添加命名空间&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;exec&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;sqrt = 1&a;quot;&l;/span&g;, scope)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;len&l;/span&g;(scope))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(scope[&l;span class=\&q;string\&q;&g;&a;quot;sqrt&a;quot;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(sqrt(&l;span class=\&q;number\&q;&g;4&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 一个python 计算器&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Enter an arithmetic expression:&a;quot;&l;/span&g;)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 这也是不安全的, 传入了不可信任的代码, 可以注入脚本&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope[&l;span class=\&q;string\&q;&g;&a;#x27;x&a;#x27;&l;/span&g;] = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope[&l;span class=\&q;string\&q;&g;&a;#x27;y&a;#x27;&l;/span&g;] = &l;span class=\&q;number\&q;&g;2&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;x*y&a;#x27;&l;/span&g;,scope))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;因此,将eval用于不可信任的代码并不比使用exec安全。当前,在Python中执行不可信任的代码时,没有安全的办法。一种替代解决方案是使用Jython等Python实现,以使用Java沙箱等原生机制。&l;/p&g;\n&l;h2 id=\&q;抽象\&q;&g;抽象&l;a title=\&q;#抽象\&q; href=\&q;#抽象\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;自定义函数\&q;&g;自定义函数&l;a title=\&q;#自定义函数\&q; href=\&q;#自定义函数\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; math &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;y = math.sqrt&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;callable&l;/span&g;(x), &l;span class=\&q;built_in\&q;&g;callable&l;/span&g;(y))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 判断某个对象是否可调用&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;给函数写文档\&q;&g;给函数写文档&l;a title=\&q;#给函数写文档\&q; href=\&q;#给函数写文档\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;要给函数编写文档,以确保其他人能够理解,可添加注释(以#打头的内容)。还有另一种编写注释的方式,就是添加独立的字符串。在有些地方,如def语句后面(以及模块和类的开头,),添加这样的字符串很有用。放在函数开头的字符串称为&l;code&g;文档字符串(docstring)&l;/code&g;,将&l;code&g;作为函数的一部分存储起来&l;/code&g;。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;square&l;/span&g;(&l;span class=\&q;params\&q;&g;x&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;string\&q;&g;&a;#x27;Calculates the square of the number x.&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; x*x&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(square.__doc__)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;help&l;/span&g;(square)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;特殊的内置函数&l;code&g;help&l;/code&g;很有用。在交互式解释器中,可使用它获取有关函数的信息,其中包含函数的文档字符串。&l;/p&g;\n&l;p&g;所有的函数都返回值。如果你没有告诉它们该返回什么,将返回None。&l;/p&g;\n&l;h4 id=\&q;收集参数\&q;&g;收集参数&l;a title=\&q;#收集参数\&q; href=\&q;#收集参数\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;print_params&l;/span&g;(&l;span class=\&q;params\&q;&g;title, *params&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(title)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(params)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;print_params(&l;span class=\&q;string\&q;&g;&a;quot;Params:&a;quot;&l;/span&g;, &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;Params:&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;(1, 2, 3)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 收集参数可以不放在最后, 但需要使用名称来制定后续参数&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;in_the_middle&l;/span&g;(&l;span class=\&q;params\&q;&g;x, *y, z&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x, y, z)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;in_the_middle(&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;,&l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;, z=&l;span class=\&q;number\&q;&g;6&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;print_key_params&l;/span&g;(&l;span class=\&q;params\&q;&g;**params&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(params)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;print_key_params(a = &l;span class=\&q;number\&q;&g;1&l;/span&g;, b = &l;span class=\&q;number\&q;&g;2&l;/span&g;, sth = &l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#收集关键字参数要用两个 &a;#x27;*&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;分配参数\&q;&g;分配参数&l;a title=\&q;#分配参数\&q; href=\&q;#分配参数\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;add&l;/span&g;(&l;span class=\&q;params\&q;&g;x,y&l;/span&g;) :&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; x+y&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;params = (&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(add(*params))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 如果在定义和调用函数时都使用*或**,将只传递元组或字典。因此还不如不使用它们,还&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 可省却些麻烦。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;with_stars&l;/span&g;(&l;span class=\&q;params\&q;&g;**kwds&l;/span&g;): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(kwds[&l;span class=\&q;string\&q;&g;&a;#x27;name&a;#x27;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;is&a;#x27;&l;/span&g;, kwds[&l;span class=\&q;string\&q;&g;&a;#x27;age&a;#x27;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;years old&a;#x27;&l;/span&g;) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;without_stars&l;/span&g;(&l;span class=\&q;params\&q;&g;kwds&l;/span&g;): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(kwds[&l;span class=\&q;string\&q;&g;&a;#x27;name&a;#x27;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;is&a;#x27;&l;/span&g;, kwds[&l;span class=\&q;string\&q;&g;&a;#x27;age&a;#x27;&l;/span&g;], &l;span class=\&q;string\&q;&g;&a;#x27;years old&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;args = &a;#123;&l;span class=\&q;string\&q;&g;&a;#x27;name&a;#x27;&l;/span&g;: &l;span class=\&q;string\&q;&g;&a;#x27;Mr. Gumby&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;age&a;#x27;&l;/span&g;: &l;span class=\&q;number\&q;&g;42&l;/span&g;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;with_stars(**args)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;without_stars(args)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 这两种做法的效果相同。因此,只有在定义函数(允&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 许可变数量的参数)或调用函数时(拆分字典或序列)使用,星号才能发挥作用。&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;作用域\&q;&g;作用域&l;a title=\&q;#作用域\&q; href=\&q;#作用域\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x, y = &l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;scope = &l;span class=\&q;built_in\&q;&g;vars&l;/span&g;()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 返回当前作用域的字典&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(scope[&l;span class=\&q;string\&q;&g;&a;quot;scope&a;quot;&l;/span&g;][&l;span class=\&q;string\&q;&g;&a;quot;scope&a;quot;&l;/span&g;][&l;span class=\&q;string\&q;&g;&a;quot;x&a;quot;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# print(dir())&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 一般而言,不应修改vars返回的字典,因为根据Python官方文档的说法,这样做的结果是不确定的。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;combine&l;/span&g;(&l;span class=\&q;params\&q;&g;parameter&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(parameter + &l;span class=\&q;built_in\&q;&g;globals&l;/span&g;()[&l;span class=\&q;string\&q;&g;&a;#x27;parameter&a;#x27;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;locals&l;/span&g;())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;parameter = &l;span class=\&q;string\&q;&g;&a;quot;berry&a;quot;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;combine(&l;span class=\&q;string\&q;&g;&a;quot;Shrub&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# globals(), locals() 分别返回全局/ 局部 变量的字典&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% &l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;x = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;change_global&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;global&l;/span&g; x&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = x + &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;change_global()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;作用域嵌套\&q;&g;作用域嵌套&l;a title=\&q;#作用域嵌套\&q; href=\&q;#作用域嵌套\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;multiplier&l;/span&g;(&l;span class=\&q;params\&q;&g;factor&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;multiplyByFactor&l;/span&g;(&l;span class=\&q;params\&q;&g;number&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; number * factor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; multiplyByFactor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;double = multiplier(&l;span class=\&q;number\&q;&g;2&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;triple = multiplier(&l;span class=\&q;number\&q;&g;3&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(double(&l;span class=\&q;number\&q;&g;3&l;/span&g;), triple(&l;span class=\&q;number\&q;&g;3&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(multiplier(&l;span class=\&q;number\&q;&g;3&l;/span&g;)(&l;span class=\&q;number\&q;&g;5&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#像multiplyByFactor这样存储其所在作用域的函数称为闭包。&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;通常,不能给外部作用域内的变量赋值,但如果一定要这样做,可使用&l;code&g;关键字nonlocal&l;/code&g;。这个关键字的用法与global很像,让你能够给外部作用域(非全局作用域)内的变量赋值。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;multiplier&l;/span&g;(&l;span class=\&q;params\&q;&g;factor&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; factor = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;multiplyByFactor&l;/span&g;(&l;span class=\&q;params\&q;&g;number&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;nonlocal&l;/span&g; factor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; factor = &l;span class=\&q;number\&q;&g;10&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; number * factor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; multiplyByFactor&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(multiplier(&l;span class=\&q;number\&q;&g;3&l;/span&g;)(&l;span class=\&q;number\&q;&g;5&l;/span&g;))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;函数式编程\&q;&g;函数式编程&l;a title=\&q;#函数式编程\&q; href=\&q;#函数式编程\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;Python提供了一些有助于进行这种函数式编程的函数:&l;code&g;map、filter和reduce&l;/code&g;。在较新的Python版本中,函数map和filter的用途并不大,应该使用列表推导来替代它们。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(&l;span class=\&q;built_in\&q;&g;map&l;/span&g;(&l;span class=\&q;built_in\&q;&g;str&l;/span&g;, &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;))))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 与[str(i) for i in range(10)]等价&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;seq = [&l;span class=\&q;string\&q;&g;&a;quot;foo&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;x41&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;?!&a;quot;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;quot;***&a;quot;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(&l;span class=\&q;built_in\&q;&g;filter&l;/span&g;(&l;span class=\&q;built_in\&q;&g;str&l;/span&g;.isalnum, seq)))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# [x for x in seq if x.isalnum()]&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;numbers = [&l;span class=\&q;number\&q;&g;72&l;/span&g;, &l;span class=\&q;number\&q;&g;101&l;/span&g;, &l;span class=\&q;number\&q;&g;108&l;/span&g;, &l;span class=\&q;number\&q;&g;108&l;/span&g;, &l;span class=\&q;number\&q;&g;111&l;/span&g;, &l;span class=\&q;number\&q;&g;44&l;/span&g;, &l;span class=\&q;number\&q;&g;32&l;/span&g;, &l;span class=\&q;number\&q;&g;119&l;/span&g;, &l;span class=\&q;number\&q;&g;111&l;/span&g;, &l;span class=\&q;number\&q;&g;114&l;/span&g;, &l;span class=\&q;number\&q;&g;108&l;/span&g;, &l;span class=\&q;number\&q;&g;100&l;/span&g;, &l;span class=\&q;number\&q;&g;33&l;/span&g;] &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; functools &l;span class=\&q;keyword\&q;&g;import&l;/span&g; reduce &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(reduce(&l;span class=\&q;keyword\&q;&g;lambda&l;/span&g; x, y: x + y, numbers))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;面向对象\&q;&g;面向对象&l;a title=\&q;#面向对象\&q; href=\&q;#面向对象\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;自定义类\&q;&g;自定义类&l;a title=\&q;#自定义类\&q; href=\&q;#自定义类\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Person&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;set_name&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.name = name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;get_name&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;greet&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Hello, world! I&a;#x27;m &a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(self.name))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo = Person()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo.set_name(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo.greet()&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;Python没有为私有属性提供直接的支持,而是要求程序员知道在什么情况下从外部修改属性是安全的。毕竟,你必须在知道如何使用对象之后才能使用它。然而,通过玩点小花招,可获得类似于私有属性的效果。&l;br&g;\n&l;code&g;要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可&l;/code&g;。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Person&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; money = &l;span class=\&q;number\&q;&g;100.3&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; __money = &l;span class=\&q;number\&q;&g;100.4&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;set_name&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.name = name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;get_name&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;greet&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Hello, world! I&a;#x27;m &a;#123;&a;#125;&a;quot;&l;/span&g;.&l;span class=\&q;built_in\&q;&g;format&l;/span&g;(self.name))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo = Person()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;foo.set_name(&l;span class=\&q;string\&q;&g;&a;quot;slacr&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(foo.money)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# print(foo.__money)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Secretive&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__inaccessible&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Bet you can&a;#x27;t see me ...&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;accessible&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;The secret message is:&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.__inaccessible()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 现在从外部不能访问__inaccessible,但在类中(如accessible中)依然可以使用它。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = Secretive()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 在类定义中,对所有以两个下划线打头的名称都进行转换,即在开头加上一个下划线和类名。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(Secretive()._Secretive__inaccessible)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s._Secretive__inaccessible()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 只要知道这种幕后处理手法,就能从类外访问私有方法,然而不应这样做。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 如果你不希望名称被修改,又想发出不要从外部修改属性或方法的信号,可用一个下划线打&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 头。这虽然只是一种约定,但也有些作用。例如,from module import *不会导入以一个下划线&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 打头的名称。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;ul&g;\n&l;li&g;\n&l;p&g;以双下划线 __ 开头(但不以双下划线结尾)时,Python 会自动对方法名进行名称修饰(name mangling)。这是为了避免子类意外地覆盖父类的方法。&l;br&g;\n当类定义中的方法以双下划线开头时,Python 会将方法名修饰为 _ClassName__method 的形式。这样做的目的是在类的外部阻止对该方法的直接访问,从而提供一定程度的封装和保护。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;在 Python 中,以双下划线 __ 开头和结尾的方法是特殊的魔术方法(magic methods)或称为双下划线方法(dunder methods)。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;在 Python 中,以单个下划线 _ 开头的方法或属性被视为私有的。这是一种约定,用于表示该方法或属性是供内部使用的,不应在类的外部直接访问。&l;/p&g;\n&l;/li&g;\n&l;/ul&g;\n&l;h4 id=\&q;类的命名空间\&q;&g;类的命名空间&l;a title=\&q;#类的命名空间\&q; href=\&q;#类的命名空间\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MemberCounter&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; members = &l;span class=\&q;number\&q;&g;0&l;/span&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;init&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; MemberCounter.members += &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# MemberCounter.members 是一个类级的变量, 相当与java中静态变量/成员属性&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m1 = MemberCounter() &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m1.init() &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(MemberCounter.members) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m2 = MemberCounter() &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m2.init() &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(MemberCounter.members)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;m1.members = &l;span class=\&q;string\&q;&g;&a;#x27;Two&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(m1.members) &l;span class=\&q;comment\&q;&g;# two&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 产生的实例对象的属性 遮盖了 类的属性&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(MemberCounter.members) &l;span class=\&q;comment\&q;&g;# 2&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;指定超类/父类\&q;&g;指定超类/父类&l;a title=\&q;#指定超类/父类\&q; href=\&q;#指定超类/父类\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Filter&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;init&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.blocked = []&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;filter&l;/span&g;(&l;span class=\&q;params\&q;&g;self, sequence&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; [x &l;span class=\&q;keyword\&q;&g;for&l;/span&g; x &l;span class=\&q;keyword\&q;&g;in&l;/span&g; sequence &l;span class=\&q;keyword\&q;&g;if&l;/span&g; x &l;span class=\&q;keyword\&q;&g;not&l;/span&g; &l;span class=\&q;keyword\&q;&g;in&l;/span&g; self.blocked]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;SPAMFilter&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Filter&l;/span&g;): &l;span class=\&q;comment\&q;&g;# SPAMFilter 是 Filter 的子类&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;init&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;): &l;span class=\&q;comment\&q;&g;# 重写&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.blocked = [&l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f = Filter()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f.init()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f.&l;span class=\&q;built_in\&q;&g;filter&l;/span&g;([&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = SPAMFilter()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s.init()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s.&l;span class=\&q;built_in\&q;&g;filter&l;/span&g;([&l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;eggs&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;bacon&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;SPAM&a;#x27;&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 判断一个类是否是另一个类的子类 使用内置方法issubclass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;issubclass&l;/span&g;(SPAMFilter, Filter))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 查看类的基类&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(SPAMFilter.__bases__)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(Filter.__bases__)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = SPAMFilter()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(s, SPAMFilter))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(s, Filter))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(s, &l;span class=\&q;built_in\&q;&g;object&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# True True True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;sss&a;quot;&l;/span&g;, &l;span class=\&q;built_in\&q;&g;str&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s.__class__)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h5 id=\&q;多个超类\&q;&g;多个超类&l;a title=\&q;#多个超类\&q; href=\&q;#多个超类\&q;&g;&l;/a&g;&l;/h5&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Calculator&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;calculate&l;/span&g;(&l;span class=\&q;params\&q;&g;self, expression&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.value = &l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(expression)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Talker&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Hi, my value is&a;#x27;&l;/span&g;, self.value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;TalkingCalculator&l;/span&g;(Calculator, Talker):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc = TalkingCalculator()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc.calculate(&l;span class=\&q;string\&q;&g;&a;#x27;1+2+2&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc.talk()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(TalkingCalculator.__bases__)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 如果多个超类以不同的方式实现了同一个方法(即有多个同名方法),必须在class语句中小心排列这些超类,因为位于前面的类的方法将覆盖位于后面&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 的类的方法。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;接口和内省\&q;&g;接口和内省&l;a title=\&q;#接口和内省\&q; href=\&q;#接口和内省\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;在Python中,不显式地指定对象必须包含哪些方法才能用作参数。例如,你不会像在Java中那样显式编写接口,而是假定对象能够完成你要求它完成的任务。如果不能完成,程序将失败。&l;br&g;\n通常,你要求对象遵循特定的接口(即实现特定的方法),但如果需要,也可非常灵活地提出要求:不是直接调用方法并期待一切顺利,而是检查所需的方法是否存在;如果不存在,就改弦易辙。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Calculator&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;calculate&l;/span&g;(&l;span class=\&q;params\&q;&g;self, expression&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.value = &l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(expression)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Talker&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Hi, my value is&a;#x27;&l;/span&g;, self.value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;TalkingCalculator&l;/span&g;(Calculator, Talker):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc = TalkingCalculator()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;hasattr&l;/span&g;(tc, &l;span class=\&q;string\&q;&g;&a;#x27;talk&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;callable&l;/span&g;(&l;span class=\&q;built_in\&q;&g;getattr&l;/span&g;(tc, &l;span class=\&q;string\&q;&g;&a;#x27;talk&a;#x27;&l;/span&g;, &l;span class=\&q;literal\&q;&g;None&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 设置对象属性&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;setattr&l;/span&g;(tc, &l;span class=\&q;string\&q;&g;&a;#x27;name&a;#x27;&l;/span&g;, &l;span class=\&q;string\&q;&g;&a;#x27;Mr. Gumby&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;tc.name&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;dir&l;/span&g;(tc))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(tc.__dict__)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;要查看&l;code&g;对象中存储的所有值,可检查其__dict__属性&l;/code&g;。如果要确定对象是由什么组成的,应&l;br&g;\n研究模块inspect。这个模块主要供高级用户创建对象浏览器(让用户能够以图形方式浏览Python&l;br&g;\n对象的程序)以及其他需要这种功能的类似程序。&l;/p&g;\n&l;h3 id=\&q;抽象基类\&q;&g;抽象基类&l;a title=\&q;#抽象基类\&q; href=\&q;#抽象基类\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;然而,有比手工检查各个方法更好的选择。在历史上的大部分时间内,Python几乎都只依赖于鸭子类型,即假设所有对象都能完成其工作,同时偶尔使用hasattr来检查所需的方法是否存在。很多其他语言(如Java和Go)都采用&l;code&g;显式指定接口&l;/code&g;的理念,而有些第三方模块提供了这种理念的各种实现。最终,Python通过引入&l;code&g;模块abc&l;/code&g;提供了官方解决方案。这个模块为所谓的抽象基类提供了支持&l;/p&g;\n&l;p&g;一般而言,抽象类是不能(至少是不应该)实例化的类,其职责是定义子类应实现的一组抽象方法。&l;/p&g;\n&l;p&g;在常规类型中,我们能否在一个特定场景中使用某个对象取决于这个对象的类型,而在鸭子类型中,则取决于这个对象是否具有某种属性或者方法——即只要具备特定的属性或方法,能通过鸭子测试,就可以使用。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; abc &l;span class=\&q;keyword\&q;&g;import&l;/span&g; ABC, abstractclassmethod&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Talker&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;ABC&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @abstractclassmethod&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Knigget&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Talker&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Ni!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;k = Knigget()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(k, Talker))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;k.talk()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Herring&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Blub&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;h = Herring()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(h, Talker))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;sb&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; sb.talk()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;talk(Knigget())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;talk(Herring())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# Herring 不是基类的对象, 但能通过基类对象的检查&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; herring &l;span class=\&q;keyword\&q;&g;import&l;/span&g; Herring&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; abc &l;span class=\&q;keyword\&q;&g;import&l;/span&g; ABC, abstractclassmethod&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Talker&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;ABC&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @abstractclassmethod&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Knigget&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Talker&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;talk&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Ni!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;Talker.register(Herring)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# register 方法注册为子类&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;h = Herring()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(h, Herring))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;h.talk()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 然而,这种做法存在一个缺点,就是直接从抽象类派生提供的保障没有了, 显示继承抽象类必须实现&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 其中的方法, 注册成为的子类则无法承诺实现了其中的方法.&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;异常\&q;&g;异常&l;a title=\&q;#异常\&q; href=\&q;#异常\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;raise-语句\&q;&g;raise 语句&l;a title=\&q;#raise-语句\&q; href=\&q;#raise-语句\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;要引发异常,可使用raise语句,并将一个类(必须是&l;code&g;Exception的子类&l;/code&g;)或实例作为参数。将类作为参数时,将自动创建一个实例。&l;br&g;\n&l;img src=\&q;https://cdn.jsdelivr.net/gh/s1acr/PicGoLib@main/2023-9/202309291919313.png\&q; alt=\&q;\&q; loading=\&q;lazy\&q;&g;&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;48&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;49&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;50&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;51&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;52&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;53&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;54&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;55&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;56&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;57&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;raise&l;/span&g; Exception(&l;span class=\&q;string\&q;&g;&a;quot;suka blyat&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 产生异常, 和java 中的 throw 差不多&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x / y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; ZeroDivisionError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;The second number can&a;#x27;t be zero!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 捕获异常后,如果要重新引发它(即继续向上传播),可调用raise且不提供任何参数(也可&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 显式地提供捕获到的异常,&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MuffledCalculator&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; muffled = &l;span class=\&q;literal\&q;&g;False&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;calc&l;/span&g;(&l;span class=\&q;params\&q;&g;self, expr&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;built_in\&q;&g;eval&l;/span&g;(expr)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; ZeroDivisionError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; self.muffled:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Division by zero is illegal&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;calculator = MuffledCalculator()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;calculator.calc(&l;span class=\&q;string\&q;&g;&a;#x27;10 / 2&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# calculator.calc(&a;#x27;10 / 0&a;#x27;)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 没启用抑制, 会向上层抛出, 控制台显示异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;calculator.muffled = &l;span class=\&q;literal\&q;&g;True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;calculator.calc(&l;span class=\&q;string\&q;&g;&a;#x27;10 / 0&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 启用抑制, 不向外层抛出异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;number\&q;&g;1&l;/span&g;/&l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; ZeroDivisionError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; ValueError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# raise 带参数, 引发别的异常, 在这种情况下,导致进入except子句的异常将被作为**异常上下文**存储起来,&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 并出现在最终的错误消息中&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 使用raise ... from ...语句来提供自己的异常上下文,也可使用None来禁用上下文&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;number\&q;&g;1&l;/span&g;/&l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; ZeroDivisionError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# raise ValueError from None&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# raise ValueError from TypeError&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;&l;code&g;异常上下文&l;/code&g;是指在处理异常时,可以将之前发生的异常信息与当前的异常关联起来,以提供更详细的异常追踪和调试信息。异常上下文允许开发人员在抛出一个新的异常时,指定之前发生的异常作为新异常的原因,从而形成一个&l;code&g;异常链&l;/code&g;。&l;/p&g;\n&l;h3 id=\&q;处理异常\&q;&g;处理异常&l;a title=\&q;#处理异常\&q; href=\&q;#处理异常\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;48&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;49&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;50&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;51&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;52&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;53&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;54&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;55&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;56&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x / y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; (ZeroDivisionError, TypeError, NameError, ValueError):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Your numbers were bogus ...&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x / y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; (ZeroDivisionError, ValueError) &l;span class=\&q;keyword\&q;&g;as&l;/span&g; e:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(e)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(x / y)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Something wrong happened ...&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 不指定参数会捕获全部异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;像这样捕获所有的异常很危险,因为这不仅会隐藏你有心理准备的错误,还会隐藏你没有考&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;虑过的错误。这还将捕获用户使用Ctrl + C终止执行的企图、调用函数sys.exit来终止执行的企图&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;等。在大多数情况下,更好的选择是使用except Exception as e并对异常对象进行检查。这样做&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;将让不是从Exception派生而来的为数不多的异常成为漏网之鱼,其中包括SystemExit和&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;KeyboardInterrupt,因为它们是从BaseException(Exception的超类)派生而来的。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% 使用else&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;while&l;/span&g; &l;span class=\&q;literal\&q;&g;True&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; x = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the first number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; y = &l;span class=\&q;built_in\&q;&g;int&l;/span&g;(&l;span class=\&q;built_in\&q;&g;input&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Enter the second number: &a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; value = x / y&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;x / y is&a;#x27;&l;/span&g;, value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; Exception &l;span class=\&q;keyword\&q;&g;as&l;/span&g; e:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Invalid input:&a;#x27;&l;/span&g;, e)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Please try again&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;break&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 发生异常, 程序中断不会执行else&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;number\&q;&g;1&l;/span&g; / &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Unknown variable&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;That went well!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;finally&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;Cleaning up.&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;函数与异常\&q;&g;函数与异常&l;a title=\&q;#函数与异常\&q; href=\&q;#函数与异常\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;异常和函数有着天然的联系。如果不处理函数中引发的异常,它将向上传播到调用函数的地方。如果在那里也未得到处理,异常将继续传播,直至到达主程序(全局作用域)。如果主程序中也没有异常处理程序,程序将&l;code&g;终止并显示栈跟踪消息&l;/code&g;。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;faulty&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; Exception(&l;span class=\&q;string\&q;&g;&a;#x27;Something is wrong&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;ignore_exception&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; faulty()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;handle_exception&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; faulty()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Exception handled&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# ignore_exception()&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;handle_exception()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;faulty中引发的异常依次从faulty和ignore_exception向外传播,最终导致显示&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;一条栈跟踪消息。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;调用handle_exception时,异常最终传播到handle_exception,并被这里的&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;try/except语句处理。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;obj = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; obj.write&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;except&l;/span&g; AttributeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;The object is not writeable&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;The object is writeable&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;不那么异常的情况\&q;&g;不那么异常的情况&l;a title=\&q;#不那么异常的情况\&q; href=\&q;#不那么异常的情况\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;如果你只想发出警告,指出情况偏离了正轨,可使用&l;code&g;模块warnings中的函数warn&l;/code&g;。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; warnings &l;span class=\&q;keyword\&q;&g;import&l;/span&g; filterwarnings&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;from&l;/span&g; warnings &l;span class=\&q;keyword\&q;&g;import&l;/span&g; warn&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;cuka blyat!!&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;filterwarnings(&l;span class=\&q;string\&q;&g;&a;quot;ignore&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;test&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;filterwarnings(&l;span class=\&q;string\&q;&g;&a;quot;error&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;bad&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;发出警告时,可指定将引发的异常(即警告类别),&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;但必须是Warning的子类。如果将警告转换为错误,将使用你指定的异常。另外,还可根据异常&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;来过滤掉特定类型的警告。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;filterwarnings(&l;span class=\&q;string\&q;&g;&a;quot;error&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;This function is really old...&a;quot;&l;/span&g;, DeprecationWarning)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;filterwarnings(&l;span class=\&q;string\&q;&g;&a;quot;ignore&a;quot;&l;/span&g;, category=DeprecationWarning)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;Another deprecation warning.&a;quot;&l;/span&g;, DeprecationWarning) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;warn(&l;span class=\&q;string\&q;&g;&a;quot;Something else.&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;魔法方法、特性和迭代器\&q;&g;魔法方法、特性和迭代器&l;a title=\&q;#魔法方法、特性和迭代器\&q; href=\&q;#魔法方法、特性和迭代器\&q;&g;&l;/a&g;&l;/h2&g;\n&l;p&g;在Python中,有些名称很特别,开头和结尾都是两个下划线。如__future__。这样的拼写表示名称有特殊意义,因此绝不要在程序中创建这样的名称。在这样的名称中,很大一部分都是魔法(特殊)方法的名称。如果你的对象实现了这些方法,它们将在特定情况下(具体是哪种情况取决于方法的名称)被Python调用,而几乎不需要直接调用。&l;/p&g;\n&l;p&g;有些功能(如特性和函数super)不适用于旧式类, &l;code&g;__metaclass__ = type&l;/code&g; 能将旧类(Python3之前)转换为新式类, 即设置当前类的元类(metaclass), 元类是其他类所属的类. 或者手动继承自一个新式类, 如Object&l;/p&g;\n&l;h3 id=\&q;构造函数\&q;&g;构造函数&l;a title=\&q;#构造函数\&q; href=\&q;#构造函数\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;FooBar&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.somevar = &l;span class=\&q;number\&q;&g;42&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f = FooBar()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;f.somevar&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;blockquote&g;\n&l;p&g;Python提供了魔法方法&l;code&g;__del__&l;/code&g;,也称作析构函数(destructor)。这个方法在对象被销毁&l;br&g;\n(作为垃圾被收集)前被调用,但鉴于你无法知道准确的调用时间,建议尽可能不要使用__del__。&l;/p&g;\n&l;/blockquote&g;\n&l;h3 id=\&q;super-调用超类构造函数\&q;&g;super 调用超类构造函数&l;a title=\&q;#super-调用超类构造函数\&q; href=\&q;#super-调用超类构造函数\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Bird&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.hungry = &l;span class=\&q;literal\&q;&g;True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;eat&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; self.hungry:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;Aaaah ...&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.hungry = &l;span class=\&q;literal\&q;&g;False&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;No, thanks!&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;SongBird&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Bird&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;super&l;/span&g;().__init__()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 或者 Bird.__init__(self) # 调用未关联的超类的构造函数, 相当于一个指向父类的指针&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.sound = &l;span class=\&q;string\&q;&g;&a;#x27;Squawk!&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;sing&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(self.sound)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;sb = SongBird()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;sb.eat()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;SongBird2&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;Bird&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; Bird.__init__(self) &l;span class=\&q;comment\&q;&g;# 调用未关联的超类的构造函数, 使得父类中初始化的hungry存在&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.sound = &l;span class=\&q;string\&q;&g;&a;#x27;Squawk!&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;sing&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(self.sound)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;sb = SongBird2()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;sb.eat()&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;元素访问\&q;&g;元素访问&l;a title=\&q;#元素访问\&q; href=\&q;#元素访问\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;基本的序列和映射协议非常简单,但要实现序列和映射的所有功能,需要实现很多魔法方法。&l;/p&g;\n&l;p&g;在Python中,&l;code&g;协议通常指的是规范行为的规则&l;/code&g;&l;br&g;\n在Python中,&l;code&g;多态仅仅基于对象的行为&l;/code&g;(而不基于祖先,如属于哪个类或其超类等, 所谓鸭子类型),因此这个概念很重要:其他的语言可能要求对象属于特定的类或实现了特定的接口,而Python通常只要求对象遵循特定的协议。&l;/p&g;\n&l;h4 id=\&q;基本的序列和映射协议\&q;&g;基本的序列和映射协议&l;a title=\&q;#基本的序列和映射协议\&q; href=\&q;#基本的序列和映射协议\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;序列和映射基本上是元素(item)的集合,要实现它们的基本行为(协议),不可变对象需要实现2个方法,而可变对象需要实现4个。&l;/p&g;\n&l;ul&g;\n&l;li&g;&l;strong&g;len&l;/strong&g;(self):这个方法应返回集合包含的项数,对序列来说为元素个数,对映射来说为键值对数。如果__len__返回零(且没有实现覆盖这种行为的__nonzero__),对象在布尔上下文中将被视为假(就像空的列表、元组、字符串和字典一样)。&l;/li&g;\n&l;li&g;&l;strong&g;getitem&l;/strong&g;(self, key):这个方法应返回与指定键相关联的值。对序列来说,键应该是0~n-1的整数(也可以是负数,这将在后面说明),其中n为序列的长度。对映射来说,键可以是任何类型。&l;/li&g;\n&l;li&g;&l;strong&g;setitem&l;/strong&g;(self, key, value):这个方法应以与键相关联的方式存储值,以便以后能够使用__getitem__来获取。当然,仅当对象可变时才需要实现这个方法。&l;/li&g;\n&l;li&g;&l;strong&g;delitem&l;/strong&g;(self, key):这个方法在对对象的组成部分使用__del__语句时被调用,应删除与key相关联的值。同样,仅当对象可变(且允许其项被删除)时,才需要实现这个方法。&l;/li&g;\n&l;/ul&g;\n&l;p&g;对于这些方法,还有一些额外的要求:&l;/p&g;\n&l;ul&g;\n&l;li&g;对于序列,如果键为负整数,应从末尾往前数。换而言之,x[-n]应与x[len(x)-n]等效。&l;/li&g;\n&l;li&g;如果键的类型不合适(如对序列使用字符串键),可能引发TypeError异常。&l;/li&g;\n&l;li&g;对于序列,如果索引的类型是正确的,但不在允许的范围内,应引发IndexError异常。&l;/li&g;\n&l;/ul&g;\n&l;p&g;要了解更复杂的接口和使用的抽象基类(Sequence),请参阅有关&l;code&g;模块collections&l;/code&g;的文档。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;check_index&l;/span&g;(&l;span class=\&q;params\&q;&g;key&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; &l;span class=\&q;keyword\&q;&g;not&l;/span&g; &l;span class=\&q;built_in\&q;&g;isinstance&l;/span&g;(key, &l;span class=\&q;built_in\&q;&g;int&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; TypeError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; key &a;lt; &l;span class=\&q;number\&q;&g;0&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; IndexError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 无穷序列&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;ArithmeticSequence&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, start=&l;span class=\&q;number\&q;&g;0&l;/span&g;, step=&l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.start = start&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.step = step&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.changed = &a;#123;&a;#125;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__getitem__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, key&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; check_index(key)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.changed[key]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; KeyError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.start + key*self.step&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__settime__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, key, value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; check_index(key)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.changed[key] = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;s = ArithmeticSequence(&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(s[&l;span class=\&q;number\&q;&g;4&l;/span&g;])&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;从-list、dict-和-str-派生\&q;&g;从 list、dict 和 str 派生&l;a title=\&q;#从-list、dict-和-str-派生\&q; href=\&q;#从-list、dict-和-str-派生\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 带计数器的list&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;CounterList&l;/span&g;(&l;span class=\&q;title class_ inherited__\&q;&g;list&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, *args&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;super&l;/span&g;().__init__(*args)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.counter = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__getitem__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, index&l;/span&g;): &l;span class=\&q;comment\&q;&g;# 访问元素列表, counter++&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.counter += &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;built_in\&q;&g;super&l;/span&g;(CounterList, self).__getitem__(index)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;c1 = CounterList(&l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;c1.reverse()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; c1[&l;span class=\&q;number\&q;&g;3&l;/span&g;:&l;span class=\&q;number\&q;&g;6&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1.counter)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;c1[&l;span class=\&q;number\&q;&g;1&l;/span&g;]+c1[&l;span class=\&q;number\&q;&g;3&l;/span&g;]+c1[&l;span class=\&q;number\&q;&g;4&l;/span&g;]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(c1.counter)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;特性\&q;&g;特性&l;a title=\&q;#特性\&q; href=\&q;#特性\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;通过存取方法定义的属性通常称为特性(property)。&l;/p&g;\n&l;h4 id=\&q;函数-property\&q;&g;函数 property&l;a title=\&q;#函数-property\&q; href=\&q;#函数-property\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;34&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;35&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;36&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;37&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;38&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;39&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;40&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;41&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;42&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;43&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;44&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;45&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;46&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;47&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Rectangle&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.width = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.height = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;set_size&l;/span&g;(&l;span class=\&q;params\&q;&g;self, size&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.width, self.height = size&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;get_size&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.width, self.height&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; size = &l;span class=\&q;built_in\&q;&g;property&l;/span&g;(get_size, set_size)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 这些参数分别名为fget、fset、fdel和doc。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r = Rectangle()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r.width, r.height = &l;span class=\&q;number\&q;&g;10&l;/span&g;, &l;span class=\&q;number\&q;&g;5&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(r.size)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MyClass&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self._my_property = &l;span class=\&q;literal\&q;&g;None&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;get_my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的读取操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self._my_property&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;set_my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self, value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的设置操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self._my_property = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;del_my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的删除操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;del&l;/span&g; self._my_property&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; my_property = &l;span class=\&q;built_in\&q;&g;property&l;/span&g;(get_my_property, set_my_property,&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; del_my_property, &l;span class=\&q;string\&q;&g;&a;quot;mydoc&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj = MyClass()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.my_property) &l;span class=\&q;comment\&q;&g;# 读取属性值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.my_property = &l;span class=\&q;number\&q;&g;42&l;/span&g; &l;span class=\&q;comment\&q;&g;# 设置属性值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.my_property) &l;span class=\&q;comment\&q;&g;# 读取属性值&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; obj.my_property &l;span class=\&q;comment\&q;&g;# 删除属性&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;property提供了一种以属性访问器的方式对属性进行定义和操作的机制。它使您能够在属性访问过程中执行自定义的逻辑,提供更好的封装、控制和灵活性,同时保持代码的可读性和可维护性&l;/p&g;\n&l;p&g;通过装饰器来实现的另一种方法&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MyClass&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self._my_property = &l;span class=\&q;literal\&q;&g;None&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @property&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的读取操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self._my_property&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @my_property.setter&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self, value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的设置操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self._my_property = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @my_property.deleter&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;my_property&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 在这里定义属性的删除操作&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;del&l;/span&g; self._my_property&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj = MyClass()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.my_property)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.my_property = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.my_property)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;del&l;/span&g; obj.my_property&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;静态方法,-类方法\&q;&g;静态方法, 类方法&l;a title=\&q;#静态方法,-类方法\&q; href=\&q;#静态方法,-类方法\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;静态方法和类方法在Python中具有一些不同的特点和用法。&l;/p&g;\n&l;p&g;静态方法(Static Method):&l;/p&g;\n&l;ul&g;\n&l;li&g;静态方法是属于类的方法,而不是属于类的实例的方法。&l;/li&g;\n&l;li&g;它们在类中定义,并且可以直接通过类名调用,无需创建类的实例。&l;/li&g;\n&l;li&g;静态方法没有对类或实例的隐式引用,因此它们无法访问类或实例的属性和方法。&l;/li&g;\n&l;li&g;静态方法通常用于实现与类相关的辅助功能,不需要访问类的状态或属性。&l;/li&g;\n&l;/ul&g;\n&l;p&g;类方法(Class Method):&l;/p&g;\n&l;ul&g;\n&l;li&g;类方法是属于类的方法,而不是属于类的实例的方法。&l;/li&g;\n&l;li&g;它们在类中定义,并且可以通过类名或类的实例调用。&l;/li&g;\n&l;li&g;类方法的第一个参数通常被命名为cls,它指向类本身而不是类的实例。&l;/li&g;\n&l;li&g;类方法可以访问和修改类级别的属性,也可以通过cls参数调用其他类方法。&l;/li&g;\n&l;/ul&g;\n&l;p&g;静态方法和类方法的区别在于它们的调用方式和对类或实例的引用方式。静态方法是通过类名直接调用的,没有对类或实例的引用;而类方法可以通过类名或类的实例调用,并且可以通过cls参数访问类级别的属性和方法。&l;/p&g;\n&l;p&g;使用静态方法和类方法可以更好地组织和管理代码,使其更具可读性和可维护性。静态方法适用于与类相关的辅助功能,而类方法适用于需要访问和操作类级别属性和方法的情况。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MyClass&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;smeth&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;This is a static method&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; smeth = &l;span class=\&q;built_in\&q;&g;staticmethod&l;/span&g;(smeth)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;cmeth&l;/span&g;(&l;span class=\&q;params\&q;&g;cls&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;This is a class method of&a;#x27;&l;/span&g;, cls)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; cmeth = &l;span class=\&q;built_in\&q;&g;classmethod&l;/span&g;(cmeth)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj = MyClass()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;MyClass.smeth()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;MyClass.cmeth()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.cmeth()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 虽然可以, 但最好不要用实例来访问静态方法&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.smeth()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;静态方法的定义中没有参数self,可直接通过类来调用。类方法的定义中包含类似于self的参数,通常被命&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;名为cls。对于类方法,也可通过对象直接调用,但参数cls将自动关联到类。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;MyClass&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @staticmethod&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;smeth&l;/span&g;():&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;This is a static method&a;#x27;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;meta\&q;&g; @classmethod&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;cmeth&l;/span&g;(&l;span class=\&q;params\&q;&g;cls&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;#x27;This is a class method of&a;#x27;&l;/span&g;, cls)&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;getattr,-setattr-等\&q;&g;&l;strong&g;getattr&l;/strong&g;, &l;strong&g;setattr&l;/strong&g; 等&l;a title=\&q;#getattr,-setattr-等\&q; href=\&q;#getattr,-setattr-等\&q;&g;&l;/a&g;&l;/h4&g;\n&l;ul&g;\n&l;li&g;&l;strong&g;getattribute&l;/strong&g;(self, name):在属性被访问时自动调用(只适用于新式类)。&l;/li&g;\n&l;li&g;&l;strong&g;getattr&l;/strong&g;(self, name):在属性被访问而对象没有这样的属性时自动调用。&l;/li&g;\n&l;li&g;&l;strong&g;setattr&l;/strong&g;(self, name, value):试图给属性赋值时自动调用。&l;/li&g;\n&l;li&g;&l;strong&g;delattr&l;/strong&g;(self, name):试图删除属性时自动调用。&l;/li&g;\n&l;/ul&g;\n&l;p&g;__getattribute__在属性被访问之前被调用,而__getattr__在属性访问失败后被调用&l;br&g;\n尽量使用property而不是这些特殊方法&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;33&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Rectangle&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.width = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.height = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__setattr__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name, value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; name == &l;span class=\&q;string\&q;&g;&a;#x27;size&a;#x27;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.width, self.height = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.__dict__[name] = value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__getattr__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; name == &l;span class=\&q;string\&q;&g;&a;#x27;size&a;#x27;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.width, self.height&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; AttributeError()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__getattribute__&l;/span&g;(&l;span class=\&q;params\&q;&g;self, name&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; name == &l;span class=\&q;string\&q;&g;&a;#x27;area&a;#x27;&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.width * self.height&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;built_in\&q;&g;super&l;/span&g;().__getattribute__(name)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj = Rectangle()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;obj.__setattr__(&l;span class=\&q;string\&q;&g;&a;#x27;size&a;#x27;&l;/span&g;, (&l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.__getattr__(&l;span class=\&q;string\&q;&g;&a;#x27;size&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.__getattribute__(&l;span class=\&q;string\&q;&g;&a;#x27;width&a;#x27;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.width)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(obj.area)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;迭代器\&q;&g;迭代器&l;a title=\&q;#迭代器\&q; href=\&q;#迭代器\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;方法&l;code&g;__iter__返回一个迭代器&l;/code&g;,它是包含方法__next__的对象,而调用这个方法时可不提供&l;br&g;\n任何参数。当你调用方法__next__时,迭代器应返回其下一个值。如果迭代器没有可供返回的值,&l;br&g;\n应引发StopIteration异常。你还可使用内置的便利函数next,在这种情况下,next(it)与&l;br&g;\nit.&l;strong&g;next&l;/strong&g;()等效。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;Fibs&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__init__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.a = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.b = &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__next__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.a, self.b = self.b, self.a + self.b&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.a&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__iter__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;fibs = Fibs()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; f &l;span class=\&q;keyword\&q;&g;in&l;/span&g; fibs:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; f &a;lt; &l;span class=\&q;number\&q;&g;100&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(f)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;break&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;it = &l;span class=\&q;built_in\&q;&g;iter&l;/span&g;([&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;])&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 获得一个迭代器&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(it.__next__())&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(it))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %% 从迭代器创建序列&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;class&l;/span&g; &l;span class=\&q;title class_\&q;&g;TestIterator&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; value = &l;span class=\&q;number\&q;&g;0&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__next__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; self.value += &l;span class=\&q;number\&q;&g;1&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; self.value &a;gt; &l;span class=\&q;number\&q;&g;10&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; StopIteration&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self.value&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;__iter__&l;/span&g;(&l;span class=\&q;params\&q;&g;self&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; self&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 更正规的定义是,实现了方法__iter__的对象是可迭代的,而实现了方法__next__的对象是迭代器。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# TestIterator 是一个迭代器, 这个类的对象是可迭代的, iter方法获取迭代器, next 方法进行迭代&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;ti = TestIterator()&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(ti))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;生成器\&q;&g;生成器&l;a title=\&q;#生成器\&q; href=\&q;#生成器\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;生成器(Generator)和迭代器(Iterator)是Python中用于处理可迭代对象的两种不同的概念。&l;/p&g;\n&l;p&g;迭代器(Iterator):&l;/p&g;\n&l;ul&g;\n&l;li&g;\n&l;p&g;迭代器是一种实现了迭代器协议的对象,可以通过iter()函数进行迭代。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;迭代器对象必须实现__iter__()方法和__next__()方法。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;&l;strong&g;iter&l;/strong&g;()方法返回迭代器对象本身,&l;strong&g;next&l;/strong&g;()方法返回迭代的下一个值。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;迭代器可以一次生成一个值,并且只能向前迭代,不能回溯或重复迭代。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;迭代器可以使用for循环进行迭代,也可以使用next()函数手动迭代。&l;br&g;\n生成器(Generator):&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;生成器是一种特殊的迭代器,使用函数或生成器表达式创建。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;生成器函数是一个包含yield关键字的函数,它可以暂停和恢复执行。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;每次调用生成器函数时,会返回一个生成器对象。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;生成器对象可以像迭代器一样进行迭代,每次迭代都会执行生成器函数中的代码,直到遇到yield语句并返回一个值。&l;/p&g;\n&l;/li&g;\n&l;li&g;\n&l;p&g;生成器可以生成多个值,并且可以灵活地控制生成的值。&l;/p&g;\n&l;/li&g;\n&l;/ul&g;\n&l;p&g;总结起来,迭代器是一种实现了迭代器协议的对象,它可以一次生成一个值并向前迭代。而生成器是一种特殊的迭代器,它使用函数或生成器表达式创建,并可以在每次迭代时生成多个值。&l;/p&g;\n&l;p&g;生成器相对于迭代器更加灵活和简洁,可以通过生成器函数来定义复杂的迭代逻辑,而不需要显式地实现__iter__()和__next__()方法。此外,生成器还可以使用yield语句来暂停和恢复执行,使得生成器在处理大量数据或无限序列时非常高效。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;nested = [[&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;], [&l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;], [&l;span class=\&q;number\&q;&g;5&l;/span&g;]]&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;flatten&l;/span&g;(&l;span class=\&q;params\&q;&g;nested&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; sublist &l;span class=\&q;keyword\&q;&g;in&l;/span&g; nested:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; element &l;span class=\&q;keyword\&q;&g;in&l;/span&g; sublist:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; element&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 包含yield语句的函数都被称为生成器&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 生成器不是使用return返回一个&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 值,而是可以生成多个值,每次一个。每次使用yield生成一个值后,函数都将冻结,即在此停&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 止执行,等待被重新唤醒。被重新唤醒后,函数将从停止的地方开始继续执行。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(flatten(nested))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;for&l;/span&g; num &l;span class=\&q;keyword\&q;&g;in&l;/span&g; flatten(nested):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(num)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 生成器推导(也叫生成器表达式)。其工作原理与列表推导相同,但不是创建一个列表(即不立即执行循环)&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# ,而是返回一个生成器,让你能够逐步执行计算。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;g = (i**&l;span class=\&q;number\&q;&g;2&l;/span&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;0&l;/span&g;, &l;span class=\&q;number\&q;&g;10&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(g), &l;span class=\&q;built_in\&q;&g;next&l;/span&g;(g))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 直接在一对既有的圆括号内(如在函数调用中)使用生成器推导时,无需再添加一对圆括号。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;sum&l;/span&g;(i**&l;span class=\&q;number\&q;&g;2&l;/span&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(&l;span class=\&q;number\&q;&g;10&l;/span&g;)))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;递归式生成器\&q;&g;递归式生成器&l;a title=\&q;#递归式生成器\&q; href=\&q;#递归式生成器\&q;&g;&l;/a&g;&l;/h4&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;flatten&l;/span&g;(&l;span class=\&q;params\&q;&g;nested&l;/span&g;): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;: &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; sublist &l;span class=\&q;keyword\&q;&g;in&l;/span&g; nested: &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; element &l;span class=\&q;keyword\&q;&g;in&l;/span&g; flatten(sublist): &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; element &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError: &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; nested&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# %%&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;flatten&l;/span&g;(&l;span class=\&q;params\&q;&g;nested&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 不迭代类似于字符串的对象:&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; nested + &l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; TypeError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; sublist &l;span class=\&q;keyword\&q;&g;in&l;/span&g; nested:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; element &l;span class=\&q;keyword\&q;&g;in&l;/span&g; flatten(sublist):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; element&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; nested&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;res = &l;span class=\&q;built_in\&q;&g;list&l;/span&g;(flatten([[[&l;span class=\&q;number\&q;&g;1&l;/span&g;], &l;span class=\&q;number\&q;&g;2&l;/span&g;], &l;span class=\&q;number\&q;&g;3&l;/span&g;, &l;span class=\&q;number\&q;&g;4&l;/span&g;, [&l;span class=\&q;number\&q;&g;5&l;/span&g;, [&l;span class=\&q;number\&q;&g;6&l;/span&g;, &l;span class=\&q;number\&q;&g;7&l;/span&g;]], &l;span class=\&q;number\&q;&g;8&l;/span&g;]))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(res)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(flatten([&l;span class=\&q;string\&q;&g;&a;#x27;foo&a;#x27;&l;/span&g;, [&l;span class=\&q;string\&q;&g;&a;#x27;bar&a;#x27;&l;/span&g;, [&l;span class=\&q;string\&q;&g;&a;#x27;baz&a;#x27;&l;/span&g;]]])))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h4 id=\&q;通用生成器\&q;&g;通用生成器&l;a title=\&q;#通用生成器\&q; href=\&q;#通用生成器\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;生成器是包含关键字yield的函数,但被调用时不会执行函数体内的代码,而是返回一个迭代器。每次请求值时,都将执行生成器的代码,直到遇到yield或return。yield意味着应生成一个值,而return意味着生成器应停止执行(即不再生成值;仅当在生成器调用return时,才能不提供任何参数)。&l;/p&g;\n&l;p&g;换而言之,生成器由两个单独的部分组成:生成器的函数和生成器的迭代器。生成器的函数是由def语句定义的,其中包含yield。生成器的迭代器是这个函数返回的结果。用不太准确的话说,这两个实体通常被视为一个,通称为生成器。&l;/p&g;\n&l;p&g;对于生成器的函数返回的迭代器,可以像使用其他迭代器一样使用它&l;/p&g;\n&l;h4 id=\&q;生成器的方法\&q;&g;生成器的方法&l;a title=\&q;#生成器的方法\&q; href=\&q;#生成器的方法\&q;&g;&l;/a&g;&l;/h4&g;\n&l;p&g;在生成器开始运行后,可使用生成器和外部之间的通信渠道向它提供值。这个通信渠道包含如下两个端点。&l;/p&g;\n&l;ul&g;\n&l;li&g;外部世界:外部世界可访问生成器的方法send,这个方法类似于next,但接受一个参数(要发送的“消息”,可以是任何对象)。&l;/li&g;\n&l;li&g;生成器:在挂起的生成器内部,yield可能用作表达式而不是语句。换而言之,当生成器重新运行时yield返回一个值——通过send从外部世界发送的值。如果使用的是next,yield将返回None&l;/li&g;\n&l;/ul&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;repeater&l;/span&g;(&l;span class=\&q;params\&q;&g;value&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;while&l;/span&g; &l;span class=\&q;literal\&q;&g;True&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; new = (&l;span class=\&q;keyword\&q;&g;yield&l;/span&g; value)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; new &l;span class=\&q;keyword\&q;&g;is&l;/span&g; &l;span class=\&q;keyword\&q;&g;not&l;/span&g; &l;span class=\&q;literal\&q;&g;None&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; value = new&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r = repeater(&l;span class=\&q;number\&q;&g;42&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(r)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(r))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;r.send(&l;span class=\&q;string\&q;&g;&a;quot;hello world&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(r)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(r))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;next&l;/span&g;(r))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;生成器还包含另外两个方法。&l;br&g;\n方法throw:用于在生成器中(yield表达式处)引发异常,调用时可提供一个异常类型、一个可选值和一个traceback对象。&l;/p&g;\n&l;p&g;方法close:用于停止生成器,调用时无需提供任何参数。&l;br&g;\n方法close( 由Python垃圾收集器在需要时调用)也是基于异常的:在yield处引发&l;br&g;\nGeneratorExit异常。因此如果要在生成器中提供一些清理代码,可将yield放在一条try/finally&l;br&g;\n语句中。如果愿意,也可捕获GeneratorExit异常,但随后必须重新引发它(可能在清理后)、引&l;br&g;\n发其他异常或直接返回。对生成器调用close后,再试图从它那里获取值将导致RuntimeError异常。&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 模拟生成器&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;flatten&l;/span&g;(&l;span class=\&q;params\&q;&g;nested&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; result = []&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 不迭代类似于字符串的对象:&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;try&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; nested + &l;span class=\&q;string\&q;&g;&a;#x27;&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;pass&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;raise&l;/span&g; TypeError&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; sublist &l;span class=\&q;keyword\&q;&g;in&l;/span&g; nested:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; element &l;span class=\&q;keyword\&q;&g;in&l;/span&g; flatten(sublist):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; result.append(element)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;except&l;/span&g; TypeError:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; result.append(nested)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; result&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# 这无法模拟无穷生成器,因为显然不能将这种生成器的值都存储到一个列表中&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h3 id=\&q;八皇后问题\&q;&g;八皇后问题&l;a title=\&q;#八皇后问题\&q; href=\&q;#八皇后问题\&q;&g;&l;/a&g;&l;/h3&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;9&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;10&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;11&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;12&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;13&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;14&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;15&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;16&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;17&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;18&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;19&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;20&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;21&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;22&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;23&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;24&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;25&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;26&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;27&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;28&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;29&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;30&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;31&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;32&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;import&l;/span&g; random&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;conflict&l;/span&g;(&l;span class=\&q;params\&q;&g;state, nextX&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; nextY = &l;span class=\&q;built_in\&q;&g;len&l;/span&g;(state)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; i &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(nextY):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; &l;span class=\&q;built_in\&q;&g;abs&l;/span&g;(state[i]-nextX) &l;span class=\&q;keyword\&q;&g;in&l;/span&g; (&l;span class=\&q;number\&q;&g;0&l;/span&g;, nextY-i):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 如果下一个皇后和当前皇后的水平距离为0(在同一列)或与它们的垂直距离相等(位于一&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;comment\&q;&g;# 条对角线上),这个表达式就为真;否则为假。&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;literal\&q;&g;True&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;literal\&q;&g;False&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;queens&l;/span&g;(&l;span class=\&q;params\&q;&g;num=&l;span class=\&q;number\&q;&g;8&l;/span&g;, state=(&l;span class=\&q;params\&q;&g;&l;/span&g;)&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; pos &l;span class=\&q;keyword\&q;&g;in&l;/span&g; &l;span class=\&q;built_in\&q;&g;range&l;/span&g;(num):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; &l;span class=\&q;keyword\&q;&g;not&l;/span&g; conflict(state, pos):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;if&l;/span&g; &l;span class=\&q;built_in\&q;&g;len&l;/span&g;(state) == num-&l;span class=\&q;number\&q;&g;1&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g;(pos,)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;else&l;/span&g;:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; result &l;span class=\&q;keyword\&q;&g;in&l;/span&g; queens(num, state+(pos,)):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;yield&l;/span&g; (pos,)+result&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;prettyprint&l;/span&g;(&l;span class=\&q;params\&q;&g;solution&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;def&l;/span&g; &l;span class=\&q;title function_\&q;&g;line&l;/span&g;(&l;span class=\&q;params\&q;&g;pos, length=&l;span class=\&q;built_in\&q;&g;len&l;/span&g;(&l;span class=\&q;params\&q;&g;solution&l;/span&g;)&l;/span&g;):&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;return&l;/span&g; &l;span class=\&q;string\&q;&g;&a;#x27;. &a;#x27;&l;/span&g; * (pos) + &l;span class=\&q;string\&q;&g;&a;#x27;X &a;#x27;&l;/span&g; + &l;span class=\&q;string\&q;&g;&a;#x27;. &a;#x27;&l;/span&g; * (length-pos-&l;span class=\&q;number\&q;&g;1&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;keyword\&q;&g;for&l;/span&g; pos &l;span class=\&q;keyword\&q;&g;in&l;/span&g; solution:&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g; &l;span class=\&q;built_in\&q;&g;print&l;/span&g;(line(pos))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;prettyprint(random.choice(&l;span class=\&q;built_in\&q;&g;list&l;/span&g;(queens(&l;span class=\&q;number\&q;&g;8&l;/span&g;))))&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;h2 id=\&q;其他\&q;&g;其他&l;a title=\&q;#其他\&q; href=\&q;#其他\&q;&g;&l;/a&g;&l;/h2&g;\n&l;h3 id=\&q;关于__name__-==-&s;main&s;\&q;&g;关于__name__ == ‘&l;strong&g;main&l;/strong&g;’&l;a title=\&q;#关于__name__-==-&s;main&s;\&q; href=\&q;#关于__name__-==-&s;main&s;\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;当执行当前模块, 全局变量__name__ == ‘&l;strong&g;main&l;/strong&g;’, 而引入的其他模块中的 &l;strong&g;name&l;/strong&g; 为其模块名. 这个布尔表达式可以用来判断执行的模块是否是主模块, 可以用来测试当前模块的函数(被主模块引入时值为False不会执行快中语句). 这也是由于python没有主函数, 每次会执行引入的所有语句, 故要区分不同模块中的函数调用, 就像其他语言中的规定入口函数只能有一个.&l;/p&g;\n&l;h3 id=\&q;dir()\&q;&g;dir()&l;a title=\&q;#dir()\&q; href=\&q;#dir()\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;dir() 函数是 Python 的一个内置函数,用于返回指定对象的所有属性和方法。当不带参数调用时,它会返回&l;code&g;当前范围内的变量、方法和定义的类型列表&l;/code&g;;当带参数调用时,它会返回&l;code&g;参数的属性和方法列表&l;/code&g;。&l;/p&g;\n&l;h3 id=\&q;repr()\&q;&g;repr()&l;a title=\&q;#repr()\&q; href=\&q;#repr()\&q;&g;&l;/a&g;&l;/h3&g;\n&l;p&g;将对象转换成字符串&l;/p&g;\n&l;figure class=\&q;highlight py\&q;&g;&l;table&g;&l;tr&g;&l;td class=\&q;gutter\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;1&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;2&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;3&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;4&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;5&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;6&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;7&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;8&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;td class=\&q;code\&q;&g;&l;pre&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# -*- coding: utf-8 -*-&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;repr&l;/span&g;(&l;span class=\&q;string\&q;&g;&a;quot;test&a;quot;&l;/span&g;))&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;repr&l;/span&g;((&l;span class=\&q;number\&q;&g;1&l;/span&g;, &l;span class=\&q;number\&q;&g;2&l;/span&g;, &l;span class=\&q;number\&q;&g;3&l;/span&g;)) + &l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;) &l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# &a;#x27;test&a;#x27;&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;#(1, 2, 3)good&l;/span&g;&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;built_in\&q;&g;print&l;/span&g;(&l;span class=\&q;built_in\&q;&g;str&l;/span&g;([&l;span class=\&q;number\&q;&g;1&l;/span&g;,&l;span class=\&q;number\&q;&g;2&l;/span&g;])+ &l;span class=\&q;string\&q;&g;&a;quot;good&a;quot;&l;/span&g;)&l;/span&g;&l;br&g;&l;span class=\&q;line\&q;&g;&l;span class=\&q;comment\&q;&g;# [1, 2]good&l;/span&g;&l;/span&g;&l;br&g;&l;/pre&g;&l;/td&g;&l;/tr&g;&l;/table&g;&l;/figure&g;\n&l;p&g;字符串(以及数和元组)是不可变的(immutable)&l;/p&g;\n&l;p&g;&l;strong&g;参考&l;/strong&g;&l;/p&g;\n&l;ol&g;\n&l;li&g;&l;a href=\&q;\&q;&g;Fluent Python&l;/a&g;&l;/li&g;\n&l;li&g;&l;a href=\&q;\&q;&g;python核心编程&l;/a&g;&l;/li&g;\n&l;li&g;&l;a href=\&q;\&q;&g;python基础教程第三版&l;/a&g;&l;/li&g;\n&l;/ol&g;\n&q;,&q;prev&q;:{&q;title&q;:&q;[Python]文件&q;,&q;link&q;:&q;2023/09/07/[Python]文件&q;},&q;next&q;:{&q;title&q;:&q;[Vim]简单操作&q;,&q;link&q;:&q;2023/09/07/[Vim]简单操作&q;},&q;plink&q;:&q;https://www.slacr.site/2023/09/07/[Python]进阶/&q;,&q;toc&q;:[{&q;id&q;:&q;列表和元组&q;,&q;title&q;:&q;列表和元组&q;,&q;index&q;:&q;1&q;,&q;children&q;:[{&q;id&q;:&q;通用序列操作&q;,&q;title&q;:&q;通用序列操作&q;,&q;index&q;:&q;1.1&q;,&q;children&q;:[{&q;id&q;:&q;索引&q;,&q;title&q;:&q;索引&q;,&q;index&q;:&q;1.1.1&q;},{&q;id&q;:&q;切片e&q;,&q;title&q;:&q;切片E&q;,&q;index&q;:&q;1.1.2&q;},{&q;id&q;:&q;相加&a;乘法&q;,&q;title&q;:&q;相加&a;amp;乘法&q;,&q;index&q;:&q;1.1.3&q;},{&q;id&q;:&q;成员资格&q;,&q;title&q;:&q;成员资格&q;,&q;index&q;:&q;1.1.4&q;}]},{&q;id&q;:&q;列表&q;,&q;title&q;:&q;列表&q;,&q;index&q;:&q;1.2&q;},{&q;id&q;:&q;元组&q;,&q;title&q;:&q;元组&q;,&q;index&q;:&q;1.3&q;},{&q;id&q;:&q;字符串&q;,&q;title&q;:&q;字符串&q;,&q;index&q;:&q;1.4&q;,&q;children&q;:[{&q;id&q;:&q;设置格式&q;,&q;title&q;:&q;设置格式&q;,&q;index&q;:&q;1.4.1&q;},{&q;id&q;:&q;字符串方法&q;,&q;title&q;:&q;字符串方法&q;,&q;index&q;:&q;1.4.2&q;}]}]},{&q;id&q;:&q;字典&q;,&q;title&q;:&q;字典&q;,&q;index&q;:&q;2&q;,&q;children&q;:[{&q;id&q;:&q;字符串设置功能用于字典&q;,&q;title&q;:&q;字符串设置功能用于字典&q;,&q;index&q;:&q;2.1&q;},{&q;id&q;:&q;字典方法&q;,&q;title&q;:&q;字典方法&q;,&q;index&q;:&q;2.2&q;}]},{&q;id&q;:&q;条件循环&q;,&q;title&q;:&q;条件循环&q;,&q;index&q;:&q;3&q;,&q;children&q;:[{&q;id&q;:&q;导包&q;,&q;title&q;:&q;导包&q;,&q;index&q;:&q;3.1&q;},{&q;id&q;:&q;赋值魔法&q;,&q;title&q;:&q;赋值魔法&q;,&q;index&q;:&q;3.2&q;},{&q;id&q;:&q;布尔值&q;,&q;title&q;:&q;布尔值&q;,&q;index&q;:&q;3.3&q;},{&q;id&q;:&q;断言&q;,&q;title&q;:&q;断言&q;,&q;index&q;:&q;3.4&q;},{&q;id&q;:&q;一些迭代&q;,&q;title&q;:&q;一些迭代&q;,&q;index&q;:&q;3.5&q;},{&q;id&q;:&q;循环中的-else&q;,&q;title&q;:&q;循环中的 else&q;,&q;index&q;:&q;3.6&q;},{&q;id&q;:&q;简单推导&q;,&q;title&q;:&q;简单推导&q;,&q;index&q;:&q;3.7&q;},{&q;id&q;:&q;pass-del-exec&q;,&q;title&q;:&q;pass del exec&q;,&q;index&q;:&q;3.8&q;}]},{&q;id&q;:&q;抽象&q;,&q;title&q;:&q;抽象&q;,&q;index&q;:&q;4&q;,&q;children&q;:[{&q;id&q;:&q;自定义函数&q;,&q;title&q;:&q;自定义函数&q;,&q;index&q;:&q;4.1&q;,&q;children&q;:[{&q;id&q;:&q;给函数写文档&q;,&q;title&q;:&q;给函数写文档&q;,&q;index&q;:&q;4.1.1&q;},{&q;id&q;:&q;收集参数&q;,&q;title&q;:&q;收集参数&q;,&q;index&q;:&q;4.1.2&q;},{&q;id&q;:&q;分配参数&q;,&q;title&q;:&q;分配参数&q;,&q;index&q;:&q;4.1.3&q;}]},{&q;id&q;:&q;作用域&q;,&q;title&q;:&q;作用域&q;,&q;index&q;:&q;4.2&q;,&q;children&q;:[{&q;id&q;:&q;作用域嵌套&q;,&q;title&q;:&q;作用域嵌套&q;,&q;index&q;:&q;4.2.1&q;}]},{&q;id&q;:&q;函数式编程&q;,&q;title&q;:&q;函数式编程&q;,&q;index&q;:&q;4.3&q;}]},{&q;id&q;:&q;面向对象&q;,&q;title&q;:&q;面向对象&q;,&q;index&q;:&q;5&q;,&q;children&q;:[{&q;id&q;:&q;自定义类&q;,&q;title&q;:&q;自定义类&q;,&q;index&q;:&q;5.1&q;,&q;children&q;:[{&q;id&q;:&q;类的命名空间&q;,&q;title&q;:&q;类的命名空间&q;,&q;index&q;:&q;5.1.1&q;},{&q;id&q;:&q;指定超类/父类&q;,&q;title&q;:&q;指定超类&a;#x2F;父类&q;,&q;index&q;:&q;5.1.2&q;},{&q;id&q;:&q;接口和内省&q;,&q;title&q;:&q;接口和内省&q;,&q;index&q;:&q;5.1.3&q;}]},{&q;id&q;:&q;抽象基类&q;,&q;title&q;:&q;抽象基类&q;,&q;index&q;:&q;5.2&q;}]},{&q;id&q;:&q;异常&q;,&q;title&q;:&q;异常&q;,&q;index&q;:&q;6&q;,&q;children&q;:[{&q;id&q;:&q;raise-语句&q;,&q;title&q;:&q;raise 语句&q;,&q;index&q;:&q;6.1&q;},{&q;id&q;:&q;处理异常&q;,&q;title&q;:&q;处理异常&q;,&q;index&q;:&q;6.2&q;},{&q;id&q;:&q;函数与异常&q;,&q;title&q;:&q;函数与异常&q;,&q;index&q;:&q;6.3&q;},{&q;id&q;:&q;不那么异常的情况&q;,&q;title&q;:&q;不那么异常的情况&q;,&q;index&q;:&q;6.4&q;}]},{&q;id&q;:&q;魔法方法、特性和迭代器&q;,&q;title&q;:&q;魔法方法、特性和迭代器&q;,&q;index&q;:&q;7&q;,&q;children&q;:[{&q;id&q;:&q;构造函数&q;,&q;title&q;:&q;构造函数&q;,&q;index&q;:&q;7.1&q;},{&q;id&q;:&q;super-调用超类构造函数&q;,&q;title&q;:&q;super 调用超类构造函数&q;,&q;index&q;:&q;7.2&q;},{&q;id&q;:&q;元素访问&q;,&q;title&q;:&q;元素访问&q;,&q;index&q;:&q;7.3&q;,&q;children&q;:[{&q;id&q;:&q;基本的序列和映射协议&q;,&q;title&q;:&q;基本的序列和映射协议&q;,&q;index&q;:&q;7.3.1&q;},{&q;id&q;:&q;从-list、dict-和-str-派生&q;,&q;title&q;:&q;从 list、dict 和 str 派生&q;,&q;index&q;:&q;7.3.2&q;}]},{&q;id&q;:&q;特性&q;,&q;title&q;:&q;特性&q;,&q;index&q;:&q;7.4&q;,&q;children&q;:[{&q;id&q;:&q;函数-property&q;,&q;title&q;:&q;函数 property&q;,&q;index&q;:&q;7.4.1&q;},{&q;id&q;:&q;静态方法,-类方法&q;,&q;title&q;:&q;静态方法, 类方法&q;,&q;index&q;:&q;7.4.2&q;},{&q;id&q;:&q;getattr,-setattr-等&q;,&q;title&q;:&q;getattr, setattr 等&q;,&q;index&q;:&q;7.4.3&q;}]},{&q;id&q;:&q;迭代器&q;,&q;title&q;:&q;迭代器&q;,&q;index&q;:&q;7.5&q;},{&q;id&q;:&q;生成器&q;,&q;title&q;:&q;生成器&q;,&q;index&q;:&q;7.6&q;,&q;children&q;:[{&q;id&q;:&q;递归式生成器&q;,&q;title&q;:&q;递归式生成器&q;,&q;index&q;:&q;7.6.1&q;},{&q;id&q;:&q;通用生成器&q;,&q;title&q;:&q;通用生成器&q;,&q;index&q;:&q;7.6.2&q;},{&q;id&q;:&q;生成器的方法&q;,&q;title&q;:&q;生成器的方法&q;,&q;index&q;:&q;7.6.3&q;}]},{&q;id&q;:&q;八皇后问题&q;,&q;title&q;:&q;八皇后问题&q;,&q;index&q;:&q;7.7&q;}]},{&q;id&q;:&q;其他&q;,&q;title&q;:&q;其他&q;,&q;index&q;:&q;8&q;,&q;children&q;:[{&q;id&q;:&q;关于__name__-==-&s;main&s;&q;,&q;title&q;:&q;关于__name__ &a;#x3D;&a;#x3D; ‘main’&q;,&q;index&q;:&q;8.1&q;},{&q;id&q;:&q;dir()&q;,&q;title&q;:&q;dir()&q;,&q;index&q;:&q;8.2&q;},{&q;id&q;:&q;repr()&q;,&q;title&q;:&q;repr()&q;,&q;index&q;:&q;8.3&q;}]}],&q;reward&q;:true,&q;copyright&q;:{&q;author&q;:&q;slacr_&q;,&q;license&q;:&q;&l;a href=\&q;https://creativecommons.org/licenses/by-nc-sa/4.0/\&q; target=\&q;_blank\&q;&g;&l;img src = \&q;/lib/cc-by-nc-sa.svg\&q;&g;&l;/a&g;&q;,&q;published&q;:&q;September 7, 2023&q;,&q;updated&q;:&q;September 7, 2023&q;},&q;reading_time&q;:&q;12458 words in 83 min&q;}}
列表和元组
python内置了许多种序列, 如列表, 元组, 字符串. 他们有许多相似的操作也有各自的特殊性质.
Python支持一种数据结构的基本概念,名为容器(container)。容器基本上就是可包含其他对象的对象。两种主要的容器是序列(如列表和元组)和映射(如字典)。在序列中,每个元素都有编号,而在映射中,每个元素都有名称(也叫键)。
有几种操作适用于所有序列,包括索引、切片、相加、相乘、迭代和成员资格检查
通用序列操作
索引
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 months = [ 'Jan' , 'Feb' , 'Mar' , 'Apr' , 'May' , 'Jun' , 'Jul' , 'Aug' , 'Sep' , 'Oct' , 'Nov' , 'Dec' ] endings = ['st' , 'nd' , 'rd' ] \ + 17 * ['th' ] + ['st' , 'nd' , 'rd' ] \ + 7 * ['th' ] + ['st' ] year = input ("Year: " ) month = input ("Month: " ) day = input ("Day: " ) month_num = int (month) - 1 day_num = int (day) - 1 print ("==========================" )print (months[month_num] + " " + day + endings[day_num] + ", " + year)
切片E
1 2 3 4 5 6 7 8 9 10 11 12 13 t = (0 , 1 , 2 , 3 , 4 , 5 , 6 ) print (t[::-1 ])print (t[-1 :-3 :])print (t[-3 :-1 ])print (t[-1 :-3 :-1 ])''' (6, 5, 4, 3, 2, 1, 0) () (4, 5) (6, 5) '''
相加&乘法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 str1 = "foo" str2 = "bar" print (str1 + str2)tup1 = (1 , 2 ) tup2 = (3 , 4 ) print (tup1 + tup2)''' foobar (1, 2, 3, 4) ''' print (str1*10 )print (tup1*10 )''' foofoofoofoofoofoofoofoofoofoo (1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2) ''' ls = [None ] print (ls*4 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import osscreen_width = os.get_terminal_size().columns sentence = input ("Sentence:\n==>" ) padding = 3 box_width = len (sentence) + (padding+1 )*2 margin_left = (screen_width-box_width) >> 1 print ()print (" " *margin_left + "*" + "-" *(box_width-2 ) + "*" )print (" " *margin_left + "|" + " " *(box_width-2 ) + "|" )print (" " *margin_left + "|" + " " *padding + sentence + " " *padding + "|" )print (" " *margin_left + "|" + " " *(box_width-2 ) + "|" )print (" " *margin_left + "*" + "-" *(box_width-2 ) + "*" )
成员资格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 str = "I wanna get rich, ^=^" print ("$" in str )print ("&" in str )db = [ ["slacr" , "11111" ], ["smith" , "12345" ], ["frank" , "33331" ], ] username = input ("login:" ) password = input ("passwd:" ) if [username, password] in db: print ("Access granted" ) else : print ("Access denyed" )
列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ls = [1 , 2 , 3 , 4 , 5 , 5 , 5 ] del ls[4 ]print (ls)del ls[-2 :]print (ls)ls[0 ] = "test" print (ls)ls = list ("good" ) print (ls)s = "" .join(ls) print (s)ls[2 :2 ] = "hi" print (ls)del ls[2 : 4 ]print (ls)ls2 = [1 , "-" , 2 , "-" , 3 ] del ls2[1 :-1 :2 ]print (ls2)
1 2 3 4 5 6 7 8 9 10 11 12 ls = [1 , 3 , 2 , 5 , 4 ] ls_copy = ls.copy() ls.sort() print (ls)res = sorted (ls_copy) print (res)print (ls_copy)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 x = [1 , 3 , 4 , 5 , 2 ] x.sort(reverse=True ) print (x)s = ["dfsd" , "sd" , "是非得失发" , "dsfdsfdsfdsfsdfsdf" ] s.sort(key=len ) print (s)ls = [1 , 3 , 2 , 5 , 4 , 2 , 4 , 2 , 1 , 1 , 1 , 1 ] print (max (set (ls), key=ls.count))
元组
与列表一样,元组也是序列,唯一的差别在于元组是不能修改的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 t = 2 ,3 ,4 print (t)t = 2 , print (t)print (3 * (1 ,'#' ))print (list ((2 ,3 )))print (tuple ([2 ,3 ]))print (tuple ("23" ))print (list ("23" ))
字符串
设置格式
1 2 3 4 5 print ("%s, %.2f, %-5d, %x, %o" %("hi" , 12.2345 , 11 , -11 , 9 ))
1 2 3 4 5 6 7 from string import Templatetempl = Template("You are the \
item in my \
place" ) s = templ.substitute(item = "shit" , place = "hand" ) print (s)
1 2 3 4 5 6 7 8 from math import piprint ("{name} is approximately {value:.2f}" .format (name = "pi" , value = pi))str = "slacr" print (f"{str } will be somebody" )
完整版
替换字段由如下部分组成,其中每个部分都是可选的。
字段名:索引或标识符,指出要设置哪个值的格式并使用结果来替换该字段。除指定值外,还可指定值的特定部分,如列表的元素。
转换标志:跟在叹号后面的单个字符。当前支持的字符包括r(表示repr)、s(表示str)和a(表示ascii)。如果你指定了转换标志,将不使用对象本身的格式设置机制,而是使用指定的函数将对象转换为字符串,再做进一步的格式设置。
格式说明符:跟在冒号后面的表达式(这种表达式是使用微型格式指定语言表示的)。格式说明符让我们能够详细地指定最终的格式,包括格式类型(如字符串、浮点数或十六进制数),字段宽度和数的精度,如何显示符号和千位分隔符,以及各种对齐和填充方式。
1 2 3 4 5 6 7 8 9 10 11 12 print ("{a}{}{b}{}" .format (2 , 4 , a = 1 , b = 3 )) import math templ = "The {mod.__name__} modeule defines the value {mod.pi} for π" res = templ.format (mod=math) print (res)s = "{temp[1]}" .format (temp = "abc" ) print (s)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 print ("{num:b}" .format (num = 42 ))print ("{num:c}" .format (num = 0x6211 ))print ("{num:e}" .format (num = 23.45 ))print ("{num:%}" .format (num = 23.45 ))print ("{num!a}" .format (num = "我" ))print ("{num!s}" .format (num = "我" ))print ("{num!r}" .format (num = "我" ))''' 101010 我 2.345000e+01 2345.000000% '\u6211' 我 '我' '''
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 print ("One googol is {:,}" .format (10 **100 ))print ("{:010}" .format (3.14 ))print ("{:+10}" .format (3.14 ))print ("{:->10}" .format (3.14 ))print ("{:$^12}" .format ("WIN" ))print ("{:+=12}" .format (-3.4 ))print ("{:b}" .format (42 ))print ("{:#b}" .format (42 ))''' One googol is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 0000003.14 +3.14 ------3.14 MATHJAX-SSR-58
$
-++++++++3.4 101010 0b101010 '''
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 width = int (input ('Please enter width: ' )) price_width = 10 item_width = width - price_width header_fmt = '{{:{}}}{{:>{}}}' .format (item_width, price_width) fmt = '{{:{}}}{{:>{}.2f}}' .format (item_width, price_width) print ('=' * width) print (header_fmt.format ('Item' , 'Price' )) print ('-' * width) print (fmt.format ('Apples' , 0.4 )) print (fmt.format ('Pears' , 0.5 )) print (fmt.format ('Cantaloupes' , 1.92 )) print (fmt.format ('Dried Apricots (16 oz.)' , 8 )) print (fmt.format ('Prunes (4 lbs.)' , 12 )) print ('=' * width)
字符串方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 dirs = 'usr' , 'bin' , 'env' print ('/' .join(dirs))print ("ASdsfd是" .lower())print ("that's all folks" .title())import stringprint (string.capwords("that's all folks" ))print ("/usr/bin/env" .split('/' ))print ("what the fuck" .split())print ("###good###" .strip('#' ))print ("aaaabbb" .replace('a' , 'b' ))table = str .maketrans("abc" , "123" ) print (table)print ("abcabc" .translate(table))print (ascii ("电视" ))print ("Good" .istitle())print ("test" .capitalize())
字典
1 2 3 4 5 6 7 8 9 10 items = [("name" , "slacr" ), ("age" , "19" )] print (dict (items)["name" ])d = dict (name = "slacr" , age = 19 ) print (d["age" ])x = {} x[1 ] = "a" x[2 ] = "b" print (x)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 numlist = { "slacr" :{ "country" :"china" , "age" : 19 }, "muphy" :{ "country" :"england" , "age" :23 }, "sakura" :{ "country" :"japan" , "age" :34 } } fmt = { "country" : "country" , "age" : "age" } name = input ("Name:" ) request = input ("Country(c) or Age(a)?" ) if request == 'c' : key = 'country' if request == 'a' : key = 'age' if name in numlist : print ("{}'s {} is {}." .format (name, fmt[key], numlist[name][key]))
字符串设置功能用于字典
1 2 3 4 phonebook = {"slacr" :"1234" , "brain" :"2341" , "vector" :"9990" } print ("slacr's phone number is {slacr}" .format_map(phonebook))
字典方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 print ({}.fromkeys(["name" , "age" ]))print (dict .fromkeys(["name" , "age" ], 'undefined' ))d = {} print (d.get("name" ))d = {'x' : 1 , 'y' : 2 } d.pop('x' ) print (d)print (d.popitem())d = {} d.setdefault("name" , "unknown" ) print (d)d = {} d.setdefault("name" ) print (d)d = { "title" : 'Python Web Site' , 'url' : "http://www.python.org" , 'changed' : "June 3 22:13:10" } x = {"title" : "Python Language Website" } d.update(x) print (d)d = {"name" : "Donald Trump" , "age" : 82 } print (d.keys())print (d.values())print ("123" , "456" , "78" , sep="" , end="9" )
条件循环
导包
1 2 3 4 5 6 7 8 9 10 11 import somemodule from somemodule import somefunction from somemodule import somefunction, anotherfunction, yetanotherfunction from somemodule import *import math as foobarfrom math import sqrt as foobar
赋值魔法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 x, y = 1 , 2 x, y = y, x print (x, y)d = {"name" : "jack" , "gfriend" : "rose" } key, value = d.popitem() print (key, value)a, b, *rest = [1 , 2 , 3 ,4 ] print (rest)x = y = 1
布尔值
1 2 3 4 5 print (bool (None ))print (bool (0 ))print (True == 1 )print (1 < 2 < 3 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 x = [1 , 2 , 3 ] y = z = [1 , 2 ] print (y is z)print (y == z)print (x is not y)del x[-1 ]print (x == y)print (x is y)print (ord ("我" ))print (chr (ord ("我" )))print (ascii ("我" ))''' 25105 我 '\u6211' '''
断言
1 2 3 4 5 age = -1 assert 0 < age <= 100 , "The age must be realistic"
一些迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 names = ['anne' , 'beth' , 'george' , 'damon' ] ages = [12 , 45 , 32 , 102 ] for i in range (len (names)): print (names[i], " is " , ages[i], "years old" ) for name, age in zip (names, ages): print (name, " is " , age, "years old" ) strings = ['a' , 'b' , 'c' , '#' ] for index, string in enumerate (strings): if string == '#' : del strings[index] print (strings)print (sorted ((1 , 3 , 4 , 2 , 5 )))r = reversed ("slacr" ) print (r)l = list (r) print (l)print ("" .join(l))
循环中的 else
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from math import sqrtfor n in range (99 , 80 , -1 ): root = sqrt(n) if root == int (root): print (n) break else : print ("Didn't find it!" )
简单推导
列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。列表推导的工作原理非常简单,有点类似于for循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ls = [x*x for x in range (10 , 0 , -1 )] print (ls)ls = [(x, y) for x in range (3 ) for y in range (3 )] print (ls)girls = ['alice' , 'bernice' , 'clarice' ] boys = ['chris' , 'arnold' , 'bob' ] ls = [(b, g) for b in boys for g in girls if b[0 ] == g[0 ]] print (ls)girls.append("angella" ) letterGirls = {} for girl in girls: letterGirls.setdefault(girl[0 ], []).append(girl) print ([(b, g) for b in boys for g in letterGirls[b[0 ]]])squares = {i:"{} squared is {}" .format (i, i**2 ) for i in range (10 )} print (squares[7 ])import stringcapital = {a: "{} capitalizes is {}" .format (a, a.capitalize()) for a in string.ascii_lowercase} print (capital['r' ])
pass del exec
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 name = "" if name == "slacr" : print ("please in" ) elif name.find("slacr" ) != -1 : pass else : print ("fatal" ) x = 1 del xls = ["good" , "job" ] ls2 = ls del ls2print (ls)exec ("print('Hi~ o(* ̄▽ ̄*)ブ')" )from math import sqrtfrom math import sqrtscope = {} exec ("sqrt = 1" , scope)print (len (scope))print (scope["sqrt" ])print (sqrt(4 ))print (eval (input ("Enter an arithmetic expression:" )))scope = {} scope['x' ] = 1 scope['y' ] = 2 print (eval ('x*y' ,scope))
因此,将eval用于不可信任的代码并不比使用exec安全。当前,在Python中执行不可信任的代码时,没有安全的办法。一种替代解决方案是使用Jython等Python实现,以使用Java沙箱等原生机制。
抽象
自定义函数
1 2 3 4 5 6 7 import math x = 1 y = math.sqrt print (callable (x), callable (y))
给函数写文档
要给函数编写文档,以确保其他人能够理解,可添加注释(以#打头的内容)。还有另一种编写注释的方式,就是添加独立的字符串。在有些地方,如def语句后面(以及模块和类的开头,),添加这样的字符串很有用。放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来。
1 2 3 4 5 6 7 8 def square (x ): 'Calculates the square of the number x.' return x*x print (square.__doc__)help (square)
特殊的内置函数help很有用。在交互式解释器中,可使用它获取有关函数的信息,其中包含函数的文档字符串。
所有的函数都返回值。如果你没有告诉它们该返回什么,将返回None。
收集参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 def print_params (title, *params ): print (title) print (params) print_params("Params:" , 1 , 2 , 3 ) ''' Params: (1, 2, 3) ''' def in_the_middle (x, *y, z ): print (x, y, z) in_the_middle(1 , 2 ,3 , 4 , 5 , z=6 ) def print_key_params (**params ): print (params) print_key_params(a = 1 , b = 2 , sth = "good" )
分配参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 def add (x,y ) : return x+y params = (1 , 2 ) print (add(*params))def with_stars (**kwds ): print (kwds['name' ], 'is' , kwds['age' ], 'years old' ) def without_stars (kwds ): print (kwds['name' ], 'is' , kwds['age' ], 'years old' ) args = {'name' : 'Mr. Gumby' , 'age' : 42 } with_stars(**args) without_stars(args)
作用域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 x, y = 1 , 2 scope = vars () print (scope["scope" ]["scope" ]["x" ])def combine (parameter ): print (parameter + globals ()['parameter' ]) print (locals ()) parameter = "berry" combine("Shrub" ) x = 1 def change_global (): global x x = x + 1 change_global() print (x)
作用域嵌套
1 2 3 4 5 6 7 8 9 10 11 12 13 def multiplier (factor ): def multiplyByFactor (number ): return number * factor return multiplyByFactor double = multiplier(2 ) triple = multiplier(3 ) print (double(3 ), triple(3 ))print (multiplier(3 )(5 ))
通常,不能给外部作用域内的变量赋值,但如果一定要这样做,可使用关键字nonlocal。这个关键字的用法与global很像,让你能够给外部作用域(非全局作用域)内的变量赋值。
1 2 3 4 5 6 7 8 9 10 def multiplier (factor ): factor = 1 def multiplyByFactor (number ): nonlocal factor factor = 10 return number * factor return multiplyByFactor print (multiplier(3 )(5 ))
函数式编程
Python提供了一些有助于进行这种函数式编程的函数:map、filter和reduce。在较新的Python版本中,函数map和filter的用途并不大,应该使用列表推导来替代它们。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 print (list (map (str , range (10 ))))seq = ["foo" , "x41" , "?!" , "***" ] print (list (filter (str .isalnum, seq)))numbers = [72 , 101 , 108 , 108 , 111 , 44 , 32 , 119 , 111 , 114 , 108 , 100 , 33 ] from functools import reduce print (reduce(lambda x, y: x + y, numbers))
面向对象
自定义类
1 2 3 4 5 6 7 8 9 10 11 12 class Person : def set_name (self, name ): self.name = name def get_name (self ): return self.name def greet (self ): print ("Hello, world! I'm {}" .format (self.name)) foo = Person() foo.set_name("slacr" ) foo.greet()
Python没有为私有属性提供直接的支持,而是要求程序员知道在什么情况下从外部修改属性是安全的。毕竟,你必须在知道如何使用对象之后才能使用它。然而,通过玩点小花招,可获得类似于私有属性的效果。
要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 class Person : money = 100.3 __money = 100.4 def set_name (self, name ): self.name = name def get_name (self ): return self.name def greet (self ): print ("Hello, world! I'm {}" .format (self.name)) foo = Person() foo.set_name("slacr" ) print (foo.money)class Secretive : def __inaccessible (self ): print ("Bet you can't see me ..." ) def accessible (self ): print ("The secret message is:" ) self.__inaccessible() s = Secretive() print (Secretive()._Secretive__inaccessible)s._Secretive__inaccessible()
以双下划线 __ 开头(但不以双下划线结尾)时,Python 会自动对方法名进行名称修饰(name mangling)。这是为了避免子类意外地覆盖父类的方法。
当类定义中的方法以双下划线开头时,Python 会将方法名修饰为 _ClassName__method 的形式。这样做的目的是在类的外部阻止对该方法的直接访问,从而提供一定程度的封装和保护。
在 Python 中,以双下划线 __ 开头和结尾的方法是特殊的魔术方法(magic methods)或称为双下划线方法(dunder methods)。
在 Python 中,以单个下划线 _ 开头的方法或属性被视为私有的。这是一种约定,用于表示该方法或属性是供内部使用的,不应在类的外部直接访问。
类的命名空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class MemberCounter : members = 0 def init (self ): MemberCounter.members += 1 m1 = MemberCounter() m1.init() print (MemberCounter.members) m2 = MemberCounter() m2.init() print (MemberCounter.members)m1.members = 'Two' print (m1.members) print (MemberCounter.members)
指定超类/父类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 class Filter : def init (self ): self.blocked = [] def filter (self, sequence ): return [x for x in sequence if x not in self.blocked] class SPAMFilter (Filter ): def init (self ): self.blocked = ['SPAM' ] f = Filter() f.init() f.filter ([1 , 2 , 3 ]) s = SPAMFilter() s.init() s.filter (['SPAM' , 'SPAM' , 'SPAM' , 'SPAM' , 'eggs' , 'bacon' , 'SPAM' ]) print (issubclass (SPAMFilter, Filter))print (SPAMFilter.__bases__)print (Filter.__bases__)s = SPAMFilter() print (isinstance (s, SPAMFilter))print (isinstance (s, Filter))print (isinstance (s, object ))print (isinstance ("sss" , str ))print (s.__class__)
多个超类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Calculator : def calculate (self, expression ): self.value = eval (expression) class Talker : def talk (self ): print ('Hi, my value is' , self.value) class TalkingCalculator (Calculator, Talker): pass tc = TalkingCalculator() tc.calculate('1+2+2' ) tc.talk() print (TalkingCalculator.__bases__)
接口和内省
在Python中,不显式地指定对象必须包含哪些方法才能用作参数。例如,你不会像在Java中那样显式编写接口,而是假定对象能够完成你要求它完成的任务。如果不能完成,程序将失败。
通常,你要求对象遵循特定的接口(即实现特定的方法),但如果需要,也可非常灵活地提出要求:不是直接调用方法并期待一切顺利,而是检查所需的方法是否存在;如果不存在,就改弦易辙。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class Calculator : def calculate (self, expression ): self.value = eval (expression) class Talker : def talk (self ): print ('Hi, my value is' , self.value) class TalkingCalculator (Calculator, Talker): pass tc = TalkingCalculator() hasattr (tc, 'talk' )callable (getattr (tc, 'talk' , None ))setattr (tc, 'name' , 'Mr. Gumby' )tc.name print (dir (tc))print (tc.__dict__)
要查看对象中存储的所有值,可检查其__dict__属性。如果要确定对象是由什么组成的,应
研究模块inspect。这个模块主要供高级用户创建对象浏览器(让用户能够以图形方式浏览Python
对象的程序)以及其他需要这种功能的类似程序。
抽象基类
然而,有比手工检查各个方法更好的选择。在历史上的大部分时间内,Python几乎都只依赖于鸭子类型,即假设所有对象都能完成其工作,同时偶尔使用hasattr来检查所需的方法是否存在。很多其他语言(如Java和Go)都采用显式指定接口的理念,而有些第三方模块提供了这种理念的各种实现。最终,Python通过引入模块abc提供了官方解决方案。这个模块为所谓的抽象基类提供了支持
一般而言,抽象类是不能(至少是不应该)实例化的类,其职责是定义子类应实现的一组抽象方法。
在常规类型中,我们能否在一个特定场景中使用某个对象取决于这个对象的类型,而在鸭子类型中,则取决于这个对象是否具有某种属性或者方法——即只要具备特定的属性或方法,能通过鸭子测试,就可以使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from abc import ABC, abstractclassmethodclass Talker (ABC ): @abstractclassmethod def talk (self ): pass class Knigget (Talker ): def talk (self ): print ("Ni!" ) k = Knigget() print (isinstance (k, Talker))k.talk() class Herring : def talk (self ): print ("Blub" ) h = Herring() print (isinstance (h, Talker))def talk (sb ): sb.talk() talk(Knigget()) talk(Herring())
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from herring import Herringfrom abc import ABC, abstractclassmethodclass Talker (ABC ): @abstractclassmethod def talk (self ): pass class Knigget (Talker ): def talk (self ): print ("Ni!" ) Talker.register(Herring) h = Herring() print (isinstance (h, Herring))h.talk()
异常
raise 语句
要引发异常,可使用raise语句,并将一个类(必须是Exception的子类)或实例作为参数。将类作为参数时,将自动创建一个实例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 raise Exception("suka blyat" )try : x = int (input ('Enter the first number: ' )) y = int (input ('Enter the second number: ' )) print (x / y) except ZeroDivisionError: print ("The second number can't be zero!" ) class MuffledCalculator : muffled = False def calc (self, expr ): try : return eval (expr) except ZeroDivisionError: if self.muffled: print ('Division by zero is illegal' ) else : raise calculator = MuffledCalculator() calculator.calc('10 / 2' ) calculator.muffled = True calculator.calc('10 / 0' ) try : 1 /0 except ZeroDivisionError: raise ValueError try : 1 /0 except ZeroDivisionError:
异常上下文是指在处理异常时,可以将之前发生的异常信息与当前的异常关联起来,以提供更详细的异常追踪和调试信息。异常上下文允许开发人员在抛出一个新的异常时,指定之前发生的异常作为新异常的原因,从而形成一个异常链。
处理异常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 try : x = int (input ('Enter the first number: ' )) y = int (input ('Enter the second number: ' )) print (x / y) except (ZeroDivisionError, TypeError, NameError, ValueError): print ('Your numbers were bogus ...' ) try : x = int (input ('Enter the first number: ' )) y = int (input ('Enter the second number: ' )) print (x / y) except (ZeroDivisionError, ValueError) as e: print (e) try : x = int (input ('Enter the first number: ' )) y = int (input ('Enter the second number: ' )) print (x / y) except : print ('Something wrong happened ...' ) ''' 像这样捕获所有的异常很危险,因为这不仅会隐藏你有心理准备的错误,还会隐藏你没有考 虑过的错误。这还将捕获用户使用Ctrl + C终止执行的企图、调用函数sys.exit来终止执行的企图 等。在大多数情况下,更好的选择是使用except Exception as e并对异常对象进行检查。这样做 将让不是从Exception派生而来的为数不多的异常成为漏网之鱼,其中包括SystemExit和 KeyboardInterrupt,因为它们是从BaseException(Exception的超类)派生而来的。 ''' while True : try : x = int (input ('Enter the first number: ' )) y = int (input ('Enter the second number: ' )) value = x / y print ('x / y is' , value) except Exception as e: print ('Invalid input:' , e) print ('Please try again' ) else : break try : 1 / 0 except : print ("Unknown variable" ) else : print ("That went well!" ) finally : print ("Cleaning up." )
函数与异常
异常和函数有着天然的联系。如果不处理函数中引发的异常,它将向上传播到调用函数的地方。如果在那里也未得到处理,异常将继续传播,直至到达主程序(全局作用域)。如果主程序中也没有异常处理程序,程序将终止并显示栈跟踪消息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 def faulty (): raise Exception('Something is wrong' ) def ignore_exception (): faulty() def handle_exception (): try : faulty() except : print ('Exception handled' ) handle_exception() ''' faulty中引发的异常依次从faulty和ignore_exception向外传播,最终导致显示 一条栈跟踪消息。 调用handle_exception时,异常最终传播到handle_exception,并被这里的 try/except语句处理。 '''
1 2 3 4 5 6 7 obj = {} try : obj.write except AttributeError: print ('The object is not writeable' ) else : print ('The object is writeable' )
不那么异常的情况
如果你只想发出警告,指出情况偏离了正轨,可使用模块warnings中的函数warn。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 from warnings import filterwarningsfrom warnings import warnwarn("cuka blyat!!" ) filterwarnings("ignore" ) warn("test" ) filterwarnings("error" ) warn("bad" ) ''' 发出警告时,可指定将引发的异常(即警告类别), 但必须是Warning的子类。如果将警告转换为错误,将使用你指定的异常。另外,还可根据异常 来过滤掉特定类型的警告。 ''' filterwarnings("error" ) warn("This function is really old..." , DeprecationWarning) filterwarnings("ignore" , category=DeprecationWarning) warn("Another deprecation warning." , DeprecationWarning) warn("Something else." )
魔法方法、特性和迭代器
在Python中,有些名称很特别,开头和结尾都是两个下划线。如__future__。这样的拼写表示名称有特殊意义,因此绝不要在程序中创建这样的名称。在这样的名称中,很大一部分都是魔法(特殊)方法的名称。如果你的对象实现了这些方法,它们将在特定情况下(具体是哪种情况取决于方法的名称)被Python调用,而几乎不需要直接调用。
有些功能(如特性和函数super)不适用于旧式类, __metaclass__ = type 能将旧类(Python3之前)转换为新式类, 即设置当前类的元类(metaclass), 元类是其他类所属的类. 或者手动继承自一个新式类, 如Object
构造函数
1 2 3 4 5 6 class FooBar : def __init__ (self ): self.somevar = 42 f = FooBar() f.somevar
Python提供了魔法方法__del__,也称作析构函数(destructor)。这个方法在对象被销毁
(作为垃圾被收集)前被调用,但鉴于你无法知道准确的调用时间,建议尽可能不要使用__del__。
super 调用超类构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 class Bird : def __init__ (self ): self.hungry = True def eat (self ): if self.hungry: print ('Aaaah ...' ) self.hungry = False else : print ('No, thanks!' ) class SongBird (Bird ): def __init__ (self ): super ().__init__() self.sound = 'Squawk!' def sing (self ): print (self.sound) sb = SongBird() sb.eat() class SongBird2 (Bird ): def __init__ (self ): Bird.__init__(self) self.sound = 'Squawk!' def sing (self ): print (self.sound) sb = SongBird2() sb.eat()
元素访问
基本的序列和映射协议非常简单,但要实现序列和映射的所有功能,需要实现很多魔法方法。
在Python中,协议通常指的是规范行为的规则
在Python中,多态仅仅基于对象的行为(而不基于祖先,如属于哪个类或其超类等, 所谓鸭子类型),因此这个概念很重要:其他的语言可能要求对象属于特定的类或实现了特定的接口,而Python通常只要求对象遵循特定的协议。
基本的序列和映射协议
序列和映射基本上是元素(item)的集合,要实现它们的基本行为(协议),不可变对象需要实现2个方法,而可变对象需要实现4个。
len (self):这个方法应返回集合包含的项数,对序列来说为元素个数,对映射来说为键值对数。如果__len__返回零(且没有实现覆盖这种行为的__nonzero__),对象在布尔上下文中将被视为假(就像空的列表、元组、字符串和字典一样)。
getitem (self, key):这个方法应返回与指定键相关联的值。对序列来说,键应该是0~n-1的整数(也可以是负数,这将在后面说明),其中n为序列的长度。对映射来说,键可以是任何类型。
setitem (self, key, value):这个方法应以与键相关联的方式存储值,以便以后能够使用__getitem__来获取。当然,仅当对象可变时才需要实现这个方法。
delitem (self, key):这个方法在对对象的组成部分使用__del__语句时被调用,应删除与key相关联的值。同样,仅当对象可变(且允许其项被删除)时,才需要实现这个方法。
对于这些方法,还有一些额外的要求:
对于序列,如果键为负整数,应从末尾往前数。换而言之,x[-n]应与x[len(x)-n]等效。
如果键的类型不合适(如对序列使用字符串键),可能引发TypeError异常。
对于序列,如果索引的类型是正确的,但不在允许的范围内,应引发IndexError异常。
要了解更复杂的接口和使用的抽象基类(Sequence),请参阅有关模块collections的文档。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 def check_index (key ): if not isinstance (key, int ): raise TypeError if key < 0 : raise IndexError class ArithmeticSequence : def __init__ (self, start=0 , step=1 ): self.start = start self.step = step self.changed = {} def __getitem__ (self, key ): check_index(key) try : return self.changed[key] except KeyError: return self.start + key*self.step def __settime__ (self, key, value ): check_index(key) self.changed[key] = value s = ArithmeticSequence(1 , 2 ) print (s[4 ])
从 list、dict 和 str 派生
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class CounterList (list ): def __init__ (self, *args ): super ().__init__(*args) self.counter = 0 def __getitem__ (self, index ): self.counter += 1 return super (CounterList, self).__getitem__(index) c1 = CounterList(range (10 )) print (c1)c1.reverse() print (c1)del c1[3 :6 ]print (c1)print (c1.counter)c1[1 ]+c1[3 ]+c1[4 ] print (c1.counter)
特性
通过存取方法定义的属性通常称为特性(property)。
函数 property
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 class Rectangle : def __init__ (self ): self.width = 0 self.height = 0 def set_size (self, size ): self.width, self.height = size def get_size (self ): return self.width, self.height size = property (get_size, set_size) r = Rectangle() r.width, r.height = 10 , 5 print (r.size)class MyClass : def __init__ (self ): self._my_property = None def get_my_property (self ): return self._my_property def set_my_property (self, value ): self._my_property = value def del_my_property (self ): del self._my_property my_property = property (get_my_property, set_my_property, del_my_property, "mydoc" ) obj = MyClass() print (obj.my_property) obj.my_property = 42 print (obj.my_property) del obj.my_property
property提供了一种以属性访问器的方式对属性进行定义和操作的机制。它使您能够在属性访问过程中执行自定义的逻辑,提供更好的封装、控制和灵活性,同时保持代码的可读性和可维护性
通过装饰器来实现的另一种方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class MyClass : def __init__ (self ): self._my_property = None @property def my_property (self ): return self._my_property @my_property.setter def my_property (self, value ): self._my_property = value @my_property.deleter def my_property (self ): del self._my_property obj = MyClass() print (obj.my_property)obj.my_property = 1 print (obj.my_property)del obj.my_property
静态方法, 类方法
静态方法和类方法在Python中具有一些不同的特点和用法。
静态方法(Static Method):
静态方法是属于类的方法,而不是属于类的实例的方法。
它们在类中定义,并且可以直接通过类名调用,无需创建类的实例。
静态方法没有对类或实例的隐式引用,因此它们无法访问类或实例的属性和方法。
静态方法通常用于实现与类相关的辅助功能,不需要访问类的状态或属性。
类方法(Class Method):
类方法是属于类的方法,而不是属于类的实例的方法。
它们在类中定义,并且可以通过类名或类的实例调用。
类方法的第一个参数通常被命名为cls,它指向类本身而不是类的实例。
类方法可以访问和修改类级别的属性,也可以通过cls参数调用其他类方法。
静态方法和类方法的区别在于它们的调用方式和对类或实例的引用方式。静态方法是通过类名直接调用的,没有对类或实例的引用;而类方法可以通过类名或类的实例调用,并且可以通过cls参数访问类级别的属性和方法。
使用静态方法和类方法可以更好地组织和管理代码,使其更具可读性和可维护性。静态方法适用于与类相关的辅助功能,而类方法适用于需要访问和操作类级别属性和方法的情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class MyClass : def smeth (): print ('This is a static method' ) smeth = staticmethod (smeth) def cmeth (cls ): print ('This is a class method of' , cls) cmeth = classmethod (cmeth) obj = MyClass() MyClass.smeth() MyClass.cmeth() obj.cmeth() obj.smeth() ''' 静态方法的定义中没有参数self,可直接通过类来调用。类方法的定义中包含类似于self的参数,通常被命 名为cls。对于类方法,也可通过对象直接调用,但参数cls将自动关联到类。 ''' class MyClass : @staticmethod def smeth (): print ('This is a static method' ) @classmethod def cmeth (cls ): print ('This is a class method of' , cls)
getattr , setattr 等
getattribute (self, name):在属性被访问时自动调用(只适用于新式类)。
getattr (self, name):在属性被访问而对象没有这样的属性时自动调用。
setattr (self, name, value):试图给属性赋值时自动调用。
delattr (self, name):试图删除属性时自动调用。
__getattribute__在属性被访问之前被调用,而__getattr__在属性访问失败后被调用
尽量使用property而不是这些特殊方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class Rectangle : def __init__ (self ): self.width = 0 self.height = 0 def __setattr__ (self, name, value ): if name == 'size' : self.width, self.height = value else : self.__dict__[name] = value def __getattr__ (self, name ): if name == 'size' : return self.width, self.height else : raise AttributeError() def __getattribute__ (self, name ): if name == 'area' : return self.width * self.height else : return super ().__getattribute__(name) obj = Rectangle() obj.__setattr__('size' , (2 , 4 )) print (obj.__getattr__('size' ))print (obj.__getattribute__('width' ))print (obj.width)print (obj.area)
迭代器
方法__iter__返回一个迭代器,它是包含方法__next__的对象,而调用这个方法时可不提供
任何参数。当你调用方法__next__时,迭代器应返回其下一个值。如果迭代器没有可供返回的值,
应引发StopIteration异常。你还可使用内置的便利函数next,在这种情况下,next(it)与
it.next ()等效。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Fibs : def __init__ (self ): self.a = 0 self.b = 1 def __next__ (self ): self.a, self.b = self.b, self.a + self.b return self.a def __iter__ (self ): return self fibs = Fibs() for f in fibs: if f < 100 : print (f) else : break
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 it = iter ([1 , 2 , 3 ]) print (it.__next__())print (next (it))class TestIterator : value = 0 def __next__ (self ): self.value += 1 if self.value > 10 : raise StopIteration return self.value def __iter__ (self ): return self ti = TestIterator() print (list (ti))
生成器
生成器(Generator)和迭代器(Iterator)是Python中用于处理可迭代对象的两种不同的概念。
迭代器(Iterator):
迭代器是一种实现了迭代器协议的对象,可以通过iter()函数进行迭代。
迭代器对象必须实现__iter__()方法和__next__()方法。
iter ()方法返回迭代器对象本身,next ()方法返回迭代的下一个值。
迭代器可以一次生成一个值,并且只能向前迭代,不能回溯或重复迭代。
迭代器可以使用for循环进行迭代,也可以使用next()函数手动迭代。
生成器(Generator):
生成器是一种特殊的迭代器,使用函数或生成器表达式创建。
生成器函数是一个包含yield关键字的函数,它可以暂停和恢复执行。
每次调用生成器函数时,会返回一个生成器对象。
生成器对象可以像迭代器一样进行迭代,每次迭代都会执行生成器函数中的代码,直到遇到yield语句并返回一个值。
生成器可以生成多个值,并且可以灵活地控制生成的值。
总结起来,迭代器是一种实现了迭代器协议的对象,它可以一次生成一个值并向前迭代。而生成器是一种特殊的迭代器,它使用函数或生成器表达式创建,并可以在每次迭代时生成多个值。
生成器相对于迭代器更加灵活和简洁,可以通过生成器函数来定义复杂的迭代逻辑,而不需要显式地实现__iter__()和__next__()方法。此外,生成器还可以使用yield语句来暂停和恢复执行,使得生成器在处理大量数据或无限序列时非常高效。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 nested = [[1 , 2 ], [3 , 4 ], [5 ]] def flatten (nested ): for sublist in nested: for element in sublist: yield element print (flatten(nested))for num in flatten(nested): print (num) g = (i**2 for i in range (0 , 10 )) print (next (g), next (g))print (sum (i**2 for i in range (10 )))
递归式生成器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 def flatten (nested ): try : for sublist in nested: for element in flatten(sublist): yield element except TypeError: yield nested def flatten (nested ): try : try : nested + '' except TypeError: pass else : raise TypeError for sublist in nested: for element in flatten(sublist): yield element except TypeError: yield nested res = list (flatten([[[1 ], 2 ], 3 , 4 , [5 , [6 , 7 ]], 8 ])) print (res)print (list (flatten(['foo' , ['bar' , ['baz' ]]])))
通用生成器
生成器是包含关键字yield的函数,但被调用时不会执行函数体内的代码,而是返回一个迭代器。每次请求值时,都将执行生成器的代码,直到遇到yield或return。yield意味着应生成一个值,而return意味着生成器应停止执行(即不再生成值;仅当在生成器调用return时,才能不提供任何参数)。
换而言之,生成器由两个单独的部分组成:生成器的函数和生成器的迭代器。生成器的函数是由def语句定义的,其中包含yield。生成器的迭代器是这个函数返回的结果。用不太准确的话说,这两个实体通常被视为一个,通称为生成器。
对于生成器的函数返回的迭代器,可以像使用其他迭代器一样使用它
生成器的方法
在生成器开始运行后,可使用生成器和外部之间的通信渠道向它提供值。这个通信渠道包含如下两个端点。
外部世界:外部世界可访问生成器的方法send,这个方法类似于next,但接受一个参数(要发送的“消息”,可以是任何对象)。
生成器:在挂起的生成器内部,yield可能用作表达式而不是语句。换而言之,当生成器重新运行时yield返回一个值——通过send从外部世界发送的值。如果使用的是next,yield将返回None
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def repeater (value ): while True : new = (yield value) if new is not None : value = new r = repeater(42 ) print (r)print (next (r))r.send("hello world" ) print (r)print (next (r))print (next (r))
生成器还包含另外两个方法。
方法throw:用于在生成器中(yield表达式处)引发异常,调用时可提供一个异常类型、一个可选值和一个traceback对象。
方法close:用于停止生成器,调用时无需提供任何参数。
方法close( 由Python垃圾收集器在需要时调用)也是基于异常的:在yield处引发
GeneratorExit异常。因此如果要在生成器中提供一些清理代码,可将yield放在一条try/finally
语句中。如果愿意,也可捕获GeneratorExit异常,但随后必须重新引发它(可能在清理后)、引
发其他异常或直接返回。对生成器调用close后,再试图从它那里获取值将导致RuntimeError异常。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 def flatten (nested ): result = [] try : try : nested + '' except TypeError: pass else : raise TypeError for sublist in nested: for element in flatten(sublist): result.append(element) except TypeError: result.append(nested) return result
八皇后问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import randomdef conflict (state, nextX ): nextY = len (state) for i in range (nextY): if abs (state[i]-nextX) in (0 , nextY-i): return True return False def queens (num=8 , state=( ) ): for pos in range (num): if not conflict(state, pos): if len (state) == num-1 : yield (pos,) else : for result in queens(num, state+(pos,)): yield (pos,)+result def prettyprint (solution ): def line (pos, length=len (solution ) ): return '. ' * (pos) + 'X ' + '. ' * (length-pos-1 ) for pos in solution: print (line(pos)) prettyprint(random.choice(list (queens(8 ))))
其他
关于__name__ == ‘main ’
当执行当前模块, 全局变量__name__ == ‘main ’, 而引入的其他模块中的 name 为其模块名. 这个布尔表达式可以用来判断执行的模块是否是主模块, 可以用来测试当前模块的函数(被主模块引入时值为False不会执行快中语句). 这也是由于python没有主函数, 每次会执行引入的所有语句, 故要区分不同模块中的函数调用, 就像其他语言中的规定入口函数只能有一个.
dir()
dir() 函数是 Python 的一个内置函数,用于返回指定对象的所有属性和方法。当不带参数调用时,它会返回当前范围内的变量、方法和定义的类型列表;当带参数调用时,它会返回参数的属性和方法列表。
repr()
将对象转换成字符串
1 2 3 4 5 6 7 8 print (repr ("test" ))print (repr ((1 , 2 , 3 )) + "good" ) print (str ([1 ,2 ])+ "good" )
字符串(以及数和元组)是不可变的(immutable)
参考
Fluent Python
python核心编程
python基础教程第三版
Author: slacr_
Copyright:
Published: September 7, 2023
Updated: September 7, 2023
Buy me a cup of coffee ☕.