Skip to content

Commit 7c3dcf3

Browse files
committed
* update 102: add 2/3 compatible
1 parent 8d00bec commit 7c3dcf3

File tree

3 files changed

+326
-5
lines changed

3 files changed

+326
-5
lines changed

102-Python进阶.ipynb

+156-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"metadata": {
33
"celltoolbar": "Slideshow",
44
"name": "",
5-
"signature": "sha256:b012bfc28c74b9b02d9cb766f98c0297322ab8a8641f07c5c2d0efc6ba03f05a"
5+
"signature": "sha256:c06867bf51936c3a35a4676a61d3df6e0ed4b8b1aedd40593ee91089f9487ba6"
66
},
77
"nbformat": 3,
88
"nbformat_minor": 0,
@@ -1092,7 +1092,7 @@
10921092
"\n",
10931093
"\u4e09\u8005\u90fd\u53ef\u4ee5\u5b8c\u6210\u5bf9list\u64cd\u4f5c\u7684\u7279\u5b9a\u529f\u80fd\uff0c\u4f8b\u5982\u7b5b\u9009\u51fa\u5176\u4e2d\u67d0\u4e9b\u503c\uff0c\u5c06\u5176\u4e2d\u7684\u503c\u8f6c\u6362\u4e3a\u53e6\u4e00\u4e2a\u503c\u3002\u4f46\u662f\u4e09\u8005\u5728\u4fbf\u5229\u7a0b\u5ea6\u548c\u4f7f\u7528\u7ec6\u8282\u4e0a\u7565\u6709\u4e0d\u540c\u3002\n",
10941094
"\n",
1095-
"map/filter\u548c\u5217\u8868\u63a8\u5bfc\u5f0f\u6bd4\u8f83\u95f4\u65ad\uff0c\u9002\u7528\u4e8e\u76f8\u5bf9\u4e0d\u662f\u5f88\u590d\u6742\u7684\u60c5\u51b5\u3002\u771f\u6b63\u590d\u6742\u7684\u60c5\u51b5\u9700\u8981\u7528for\u6765\u5c55\u5f00\u3002\n",
1095+
"map/filter\u548c\u5217\u8868\u63a8\u5bfc\u5f0f\u6bd4\u8f83\u7b80\u77ed\uff0c\u9002\u7528\u4e8e\u76f8\u5bf9\u4e0d\u662f\u5f88\u590d\u6742\u7684\u60c5\u51b5\u3002\u771f\u6b63\u590d\u6742\u7684\u60c5\u51b5\u9700\u8981\u7528for\u6765\u5c55\u5f00\u3002\n",
10961096
"\n",
10971097
"map/filter\u548c\u5217\u8868\u63a8\u5bfc\u5f0f\u57fa\u672c\u5047\u5b9a\u662f\u201c\u8fd0\u7b97\u4e0d\u5f7c\u6b64\u5e72\u6270\u201d\u3002\u5373\u8fd0\u7b97\u67d0\u4e2a\u5143\u7d20\u65f6\uff0c\u4e0d\u53d7\u5230\u5176\u4ed6\u5143\u7d20\u7684\u5f71\u54cd\u3002for\u6ca1\u6709\u8fd9\u4e00\u5047\u5b9a\uff0c\u67d0\u5143\u7d20\u8fd0\u7b97\u65f6\u53ef\u4ee5\u53d7\u5230\u53e6\u4e00\u4e2a\u5143\u7d20\u5f71\u54cd\u3002\n",
10981098
"\n",
@@ -4827,13 +4827,167 @@
48274827
"* Gedit"
48284828
]
48294829
},
4830+
{
4831+
"cell_type": "markdown",
4832+
"metadata": {
4833+
"slideshow": {
4834+
"slide_type": "slide"
4835+
}
4836+
},
4837+
"source": [
4838+
"# 2/3\u517c\u5bb9\u6280\u5de7\n",
4839+
"\n",
4840+
"3\u57fa\u672c\u4e0b\u884c\u517c\u5bb92\uff0c2\u4e0d\u517c\u5bb93\u3002\u6240\u4ee52/3\u517c\u5bb9\u7684\u57fa\u672c\u601d\u60f3\u5c31\u662f\u9075\u5faa3\u7684\u7f16\u5199\u89c4\u8303\uff0c\u540c\u65f6\u517c\u987e2\u3002"
4841+
]
4842+
},
4843+
{
4844+
"cell_type": "markdown",
4845+
"metadata": {
4846+
"slideshow": {
4847+
"slide_type": "subslide"
4848+
}
4849+
},
4850+
"source": [
4851+
"## \u57fa\u672c\u517c\u5bb9\u6027\u6280\u5de7\n",
4852+
"\n",
4853+
"\u5728Python\u6587\u4ef6\u7684\u5f00\u59cb\uff0c\u589e\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff08\u6ce8\u610f\u6309\u7167pep-8\uff0c\u5e94\u8be5\u653e\u5728\u4ec0\u4e48\u4f4d\u7f6e\uff09\uff1a"
4854+
]
4855+
},
4856+
{
4857+
"cell_type": "code",
4858+
"collapsed": false,
4859+
"input": [
4860+
"from __future__ import absolute_import, division, print_function, unicode_literals"
4861+
],
4862+
"language": "python",
4863+
"metadata": {},
4864+
"outputs": [],
4865+
"prompt_number": 1
4866+
},
4867+
{
4868+
"cell_type": "markdown",
4869+
"metadata": {},
4870+
"source": [
4871+
"\u8fd9\u4f1a\u6539\u53d8\u51e0\u4e2a\u5173\u952e\u6027\u7684\u517c\u5bb9\u6027\u6807\u5fd7\u3002\u4e3b\u8981\u662fprint\u53d8\u4e3a\u51fd\u6570\uff0cstring\u53d8\u4e3aunicode\u3002"
4872+
]
4873+
},
4874+
{
4875+
"cell_type": "markdown",
4876+
"metadata": {
4877+
"slideshow": {
4878+
"slide_type": "subslide"
4879+
}
4880+
},
4881+
"source": [
4882+
"## \u7f16\u7801\n",
4883+
"\n",
4884+
"\u867d\u7136future\u6280\u5de7\u4fee\u6b63\u4e86\u5185\u5d4c\u5b57\u7b26\u4e32\uff0c\u4f46\u662f\u5bf9\u4e8estr\u548cunicode\u5bf9\u8c61\u800c\u8a00\uff0c\u5e76\u6ca1\u6709\u4ec0\u4e48\u53d8\u5316\u3002\u56e0\u6b64\u5efa\u8bae\u5728\u9700\u8981\u7684\u5934\u90e8\u5982\u6b64\u5b9a\u4e49\uff1a"
4885+
]
4886+
},
4887+
{
4888+
"cell_type": "code",
4889+
"collapsed": false,
4890+
"input": [
4891+
"if sys.version_info.major == 3:\n",
4892+
" unicode = str\n",
4893+
"else:\n",
4894+
" bytes = str"
4895+
],
4896+
"language": "python",
4897+
"metadata": {},
4898+
"outputs": [],
4899+
"prompt_number": 2
4900+
},
4901+
{
4902+
"cell_type": "markdown",
4903+
"metadata": {},
4904+
"source": [
4905+
"Python2\u4e2d\u5b9a\u4e49str\u4e3a\u88f8\u6570\u636e\uff0cunicode\u4e3a\u5b57\u7b26\u4e32\uff0cbytes\u6ca1\u6709\u5b9a\u4e49\u3002Python3\u4e2d\u5b9a\u4e49bytes\u4e3a\u88f8\u6570\u636e\uff0cstr\u4e3aunicode\u5b57\u7b26\u4e32\uff0cunicode\u6ca1\u6709\u5b9a\u4e49\u3002\u5728\u5982\u6b64\u5b9a\u4e49\u540e\uff0c\u53ef\u4ee5\u57282/3\u4e2d\uff0c\u7edf\u4e00\u4f7f\u7528bytes\u8868\u793a\u88f8\u6570\u636e\uff0c\u7528unicode\u8868\u793a\u5b57\u7b26\u4e32\u3002"
4906+
]
4907+
},
48304908
{
48314909
"cell_type": "markdown",
48324910
"metadata": {
48334911
"slideshow": {
48344912
"slide_type": "subslide"
48354913
}
48364914
},
4915+
"source": [
4916+
"\u540c\u65f6\uff0c\u5728\u4ee3\u7801\u4e2d\uff0c\u5e94\u8be5\u5bf9\u6240\u6709\u8bd5\u56fe\u8868\u73b0\u88f8\u6570\u636e\u8bed\u4e49\u7684\u4ee3\u7801\u5185\u5d4c\u5b57\u7b26\u4e32\u5bf9\u8c61\uff0c\u52a0b\u524d\u7f00\u3002\u5bf9\u6240\u6709\u8bd5\u56fe\u8868\u8fbe\u5b57\u7b26\u4e32\u8bed\u4e49\u7684\u4ee3\u7801\u5185\u5d4c\u5b57\u7b26\u4e32\u5bf9\u8c61\uff0c\u52a0u\u524d\u7f00\u3002"
4917+
]
4918+
},
4919+
{
4920+
"cell_type": "code",
4921+
"collapsed": false,
4922+
"input": [
4923+
"print('hello, world')\n",
4924+
"print(u'hello, world')"
4925+
],
4926+
"language": "python",
4927+
"metadata": {},
4928+
"outputs": [
4929+
{
4930+
"output_type": "stream",
4931+
"stream": "stdout",
4932+
"text": [
4933+
"hello, world\n",
4934+
"hello, world\n"
4935+
]
4936+
}
4937+
],
4938+
"prompt_number": 3
4939+
},
4940+
{
4941+
"cell_type": "markdown",
4942+
"metadata": {
4943+
"slideshow": {
4944+
"slide_type": "-"
4945+
}
4946+
},
4947+
"source": [
4948+
"\u539f\u5219\u4e0a\uff0c\u5e94\u5bf9\u6240\u6709\u5185\u5d4c\u5b57\u7b26\u4e32\u5bf9\u8c61\u90fd\u6dfb\u52a0b\u6216u\u524d\u7f00\uff0c\u4ee5\u660e\u786e\u4ee3\u7801\u4e2d\u7684\u6bcf\u4e00\u5904\u5185\u5d4c\u5b57\u7b26\u4e32\u7684\u8bed\u4e49\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\u8fd9\u4f1a\u5927\u5927\u589e\u52a0\u5de5\u4f5c\u91cf\uff0c\u800c\u4e14\u5de5\u7a0b\u5b9e\u8df5\u4e0a\u5e76\u6ca1\u6709\u7279\u522b\u5927\u7684\u4f18\u52bf\u3002\u56e0\u6b64\u5f80\u5f80\u6709\u6240\u6298\u8877\uff0c\u53ea\u5728\u9700\u8981\u6f84\u6e05\u7684\u5730\u65b9\u589e\u52a0\u524d\u7f00\u3002\u5176\u4ed6\u5730\u65b9\u53ef\u4ee5\u542b\u6df7\u5e26\u8fc7\uff0c\u7b49\u9700\u8981\u65f6\u518d\u4fee\u6539\u3002\n",
4949+
"\n",
4950+
"\u4f46\u662f\u8981\u6ce8\u610f\u5230\uff0c\u9879\u76ee\u8d8a\u5927\uff0c\u5f80\u5f80\u8d8a\u96be\u4e8e\u6839\u636e\u540e\u679c\u8ffd\u67e5\u51fa\u662f\u54ea\u4e2a\u542b\u6df7\u5e26\u8fc7\u9020\u6210\u7684\u95ee\u9898\u3002\u8fd9\u91cc\u9700\u8981\u5c0f\u5fc3\u53d6\u820d\u3002"
4951+
]
4952+
},
4953+
{
4954+
"cell_type": "markdown",
4955+
"metadata": {
4956+
"slideshow": {
4957+
"slide_type": "subslide"
4958+
}
4959+
},
4960+
"source": [
4961+
"## IO\n",
4962+
"\n",
4963+
"Python3\u4e0b\u6587\u4ef6\u6253\u5f00\u65f6\u8981\u6ce8\u610f\u662f\u6253\u5f00\u4e3a\u4e8c\u8fdb\u5236\uff0c\u8fd8\u662f\u6253\u5f00\u4e3a\u6587\u672c\u3002\u5373\u6253\u5f00\u65f6\u7684b\u6807\u5fd7\u4f4d\uff0c\u51b3\u5b9a\u4e86\u8bfb\u5199\u65f6\u5e94\u4f7f\u7528\u88f8\u6570\u636e\u8fd8\u662f\u5b57\u7b26\u4e32\u3002\u5982\u679c\u4f7f\u7528\u6587\u672c\u65b9\u5f0f\u6253\u5f00\uff0c\u8fd8\u9700\u6ce8\u610f\u7f16\u7801\u3002\n",
4964+
"\n",
4965+
"Python2\u4e0b\u6ca1\u6709encoding\u53c2\u6570\uff0c\u56e0\u6b64\u51fa\u4e8e\u517c\u5bb9\u8003\u8651\uff0c\u5efa\u8bae\u4f7f\u7528codecs.open\u3002\u8fd9\u4e2a\u8c03\u7528\u5728Python2/3\u4e0b\u7684\u8bed\u4e49\u662f\u4e00\u81f4\u7684\u3002"
4966+
]
4967+
},
4968+
{
4969+
"cell_type": "markdown",
4970+
"metadata": {
4971+
"slideshow": {
4972+
"slide_type": "subslide"
4973+
}
4974+
},
4975+
"source": [
4976+
"## \u5176\u4f59\u7ec6\u8282\n",
4977+
"\n",
4978+
"* \u5c06xrange\u6539\u4e3arange\u3002\u5f53\u7136\uff0c\u4f5c\u4e3a\u4ee3\u4ef7\uff0c\u5728python2\u4e0b\uff0crange\u7684\u6548\u7387\u5f88\u6709\u95ee\u9898\u3002\n",
4979+
"* urllib.quote\u548cunquote\u6539\u4e3a\u4e86urllib.parse.quote\u548cunquote\u3002\n",
4980+
"* \u67d0\u4e9b\u5e93\uff0c\u5728python2\u548cpython3\u4e0b\u884c\u4e3a\u4e0d\u4e00\u81f4\uff0c\u4f8b\u5982csv\u3002\u5bf9\u4e8e\u8fd9\u4e9b\u5e93\uff0c\u5c3d\u91cf\u4e0d\u8981\u6298\u817e\u517c\u5bb9\u6027\u3002\u76f4\u63a5\u9488\u5bf9Python2/3\u505a\u4e24\u79cd\u4e0d\u540c\u4ee3\u7801\u66f4\u65b9\u4fbf\u3002\n",
4981+
"* \u4f7f\u7528next(it)\u800c\u4e0d\u662fit.next()\u3002"
4982+
]
4983+
},
4984+
{
4985+
"cell_type": "markdown",
4986+
"metadata": {
4987+
"slideshow": {
4988+
"slide_type": "slide"
4989+
}
4990+
},
48374991
"source": [
48384992
"# \u6700\u540e\u4f5c\u4e1a\n",
48394993
"\n",

102-Python进阶.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,9 @@
6767
* Eclipse配置
6868
* PyCharm配置
6969
* 其他编辑器
70-
* 2/3兼容性技巧
70+
* 2/3兼容技巧
71+
* 基本兼容技巧
72+
* 编码
73+
* IO
74+
* 其余细节
7175
* 最后作业

102-Python进阶.slides.html

+165-2
Original file line numberDiff line numberDiff line change
@@ -1429,7 +1429,7 @@ <h2 id="map-filter-reduce">map/filter/reduce</h2>
14291429
<div class="text_cell_render border-box-sizing rendered_html">
14301430
<h2 id="map-filter-for-">map/filter,列表推导式和for循环的比较</h2>
14311431
<p>三者都可以完成对list操作的特定功能,例如筛选出其中某些值,将其中的值转换为另一个值。但是三者在便利程度和使用细节上略有不同。</p>
1432-
<p>map/filter和列表推导式比较间断,适用于相对不是很复杂的情况。真正复杂的情况需要用for来展开。</p>
1432+
<p>map/filter和列表推导式比较简短,适用于相对不是很复杂的情况。真正复杂的情况需要用for来展开。</p>
14331433
<p>map/filter和列表推导式基本假定是“运算不彼此干扰”。即运算某个元素时,不受到其他元素的影响。for没有这一假定,某元素运算时可以受到另一个元素影响。</p>
14341434
<p>一般来说列表推导式比map/filter更简洁一些,因为map/filter需要定义lambda。但是在已经拥有现成函数的前提下,map/filter更加方便一些。</p>
14351435
</div>
@@ -4623,7 +4623,7 @@ <h2 id="-">命名规则</h2>
46234623
<div class="inner_cell">
46244624
<div class="text_cell_render border-box-sizing rendered_html">
46254625
<ul>
4626-
<li>函数名建议全小写。如果有助于阅读,可以用<em>。如果和关键字冲突,一般会改个名字或者在后面加</em></li>
4626+
<li>函数名建议全小写。如果有助于阅读,可以用_。如果和关键字冲突,一般会改个名字或者在后面加_</li>
46274627
<li>内部使用的全局变量名规则同函数名。</li>
46284628
<li>始终用self来指代对象本身,使用cls来指代类本身。</li>
46294629
<li>常量始终全大写。</li>
@@ -5483,8 +5483,171 @@ <h2 id="-">其他编辑器</h2>
54835483
</ul>
54845484
</div>
54855485
</div>
5486+
</div></section>
5487+
</section><section>
5488+
<section>
5489+
5490+
<div class="cell border-box-sizing text_cell rendered">
5491+
<div class="prompt input_prompt">
5492+
</div>
5493+
<div class="inner_cell">
5494+
<div class="text_cell_render border-box-sizing rendered_html">
5495+
<h1 id="2-3-">2/3兼容技巧</h1>
5496+
<p>3基本下行兼容2,2不兼容3。所以2/3兼容的基本思想就是遵循3的编写规范,同时兼顾2。</p>
5497+
</div>
5498+
</div>
5499+
</div></section><section>
5500+
5501+
<div class="cell border-box-sizing text_cell rendered">
5502+
<div class="prompt input_prompt">
5503+
</div>
5504+
<div class="inner_cell">
5505+
<div class="text_cell_render border-box-sizing rendered_html">
5506+
<h2 id="-">基本兼容性技巧</h2>
5507+
<p>在Python文件的开始,增加以下内容(注意按照pep-8,应该放在什么位置):</p>
5508+
</div>
5509+
</div>
5510+
</div>
5511+
<div class="cell border-box-sizing code_cell rendered">
5512+
<div class="input">
5513+
<div class="prompt input_prompt">In&nbsp;[1]:</div>
5514+
<div class="inner_cell">
5515+
<div class="input_area">
5516+
<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">absolute_import</span><span class="p">,</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
5517+
</pre></div>
5518+
5519+
</div>
5520+
</div>
5521+
</div>
5522+
5523+
</div>
5524+
<div class="cell border-box-sizing text_cell rendered">
5525+
<div class="prompt input_prompt">
5526+
</div>
5527+
<div class="inner_cell">
5528+
<div class="text_cell_render border-box-sizing rendered_html">
5529+
<p>这会改变几个关键性的兼容性标志。主要是print变为函数,string变为unicode。</p>
5530+
</div>
5531+
</div>
54865532
</div></section><section>
54875533

5534+
<div class="cell border-box-sizing text_cell rendered">
5535+
<div class="prompt input_prompt">
5536+
</div>
5537+
<div class="inner_cell">
5538+
<div class="text_cell_render border-box-sizing rendered_html">
5539+
<h2 id="-">编码</h2>
5540+
<p>虽然future技巧修正了内嵌字符串,但是对于str和unicode对象而言,并没有什么变化。因此建议在需要的头部如此定义:</p>
5541+
</div>
5542+
</div>
5543+
</div>
5544+
<div class="cell border-box-sizing code_cell rendered">
5545+
<div class="input">
5546+
<div class="prompt input_prompt">In&nbsp;[2]:</div>
5547+
<div class="inner_cell">
5548+
<div class="input_area">
5549+
<div class="highlight"><pre><span></span><span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="o">.</span><span class="n">major</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
5550+
<span class="nb">unicode</span> <span class="o">=</span> <span class="nb">str</span>
5551+
<span class="k">else</span><span class="p">:</span>
5552+
<span class="nb">bytes</span> <span class="o">=</span> <span class="nb">str</span>
5553+
</pre></div>
5554+
5555+
</div>
5556+
</div>
5557+
</div>
5558+
5559+
</div>
5560+
<div class="cell border-box-sizing text_cell rendered">
5561+
<div class="prompt input_prompt">
5562+
</div>
5563+
<div class="inner_cell">
5564+
<div class="text_cell_render border-box-sizing rendered_html">
5565+
<p>Python2中定义str为裸数据,unicode为字符串,bytes没有定义。Python3中定义bytes为裸数据,str为unicode字符串,unicode没有定义。在如此定义后,可以在2/3中,统一使用bytes表示裸数据,用unicode表示字符串。</p>
5566+
</div>
5567+
</div>
5568+
</div></section><section>
5569+
5570+
<div class="cell border-box-sizing text_cell rendered">
5571+
<div class="prompt input_prompt">
5572+
</div>
5573+
<div class="inner_cell">
5574+
<div class="text_cell_render border-box-sizing rendered_html">
5575+
<p>同时,在代码中,应该对所有试图表现裸数据语义的代码内嵌字符串对象,加b前缀。对所有试图表达字符串语义的代码内嵌字符串对象,加u前缀。</p>
5576+
</div>
5577+
</div>
5578+
</div>
5579+
<div class="cell border-box-sizing code_cell rendered">
5580+
<div class="input">
5581+
<div class="prompt input_prompt">In&nbsp;[3]:</div>
5582+
<div class="inner_cell">
5583+
<div class="input_area">
5584+
<div class="highlight"><pre><span></span><span class="k">print</span><span class="p">(</span><span class="s1">&#39;hello, world&#39;</span><span class="p">)</span>
5585+
<span class="k">print</span><span class="p">(</span><span class="s1">u&#39;hello, world&#39;</span><span class="p">)</span>
5586+
</pre></div>
5587+
5588+
</div>
5589+
</div>
5590+
</div>
5591+
5592+
<div class="output_wrapper">
5593+
<div class="output">
5594+
5595+
5596+
<div class="output_area"><div class="prompt"></div>
5597+
<div class="output_subarea output_stream output_stdout output_text">
5598+
<pre>
5599+
hello, world
5600+
hello, world
5601+
5602+
</pre>
5603+
</div>
5604+
</div>
5605+
5606+
</div>
5607+
</div>
5608+
5609+
</div>
5610+
<div class="cell border-box-sizing text_cell rendered">
5611+
<div class="prompt input_prompt">
5612+
</div>
5613+
<div class="inner_cell">
5614+
<div class="text_cell_render border-box-sizing rendered_html">
5615+
<p>原则上,应对所有内嵌字符串对象都添加b或u前缀,以明确代码中的每一处内嵌字符串的语义。但是实际上这会大大增加工作量,而且工程实践上并没有特别大的优势。因此往往有所折衷,只在需要澄清的地方增加前缀。其他地方可以含混带过,等需要时再修改。</p>
5616+
<p>但是要注意到,项目越大,往往越难于根据后果追查出是哪个含混带过造成的问题。这里需要小心取舍。</p>
5617+
</div>
5618+
</div>
5619+
</div></section><section>
5620+
5621+
<div class="cell border-box-sizing text_cell rendered">
5622+
<div class="prompt input_prompt">
5623+
</div>
5624+
<div class="inner_cell">
5625+
<div class="text_cell_render border-box-sizing rendered_html">
5626+
<h2 id="io">IO</h2>
5627+
<p>Python3下文件打开时要注意是打开为二进制,还是打开为文本。即打开时的b标志位,决定了读写时应使用裸数据还是字符串。如果使用文本方式打开,还需注意编码。</p>
5628+
<p>Python2下没有encoding参数,因此出于兼容考虑,建议使用codecs.open。这个调用在Python2/3下的语义是一致的。</p>
5629+
</div>
5630+
</div>
5631+
</div></section><section>
5632+
5633+
<div class="cell border-box-sizing text_cell rendered">
5634+
<div class="prompt input_prompt">
5635+
</div>
5636+
<div class="inner_cell">
5637+
<div class="text_cell_render border-box-sizing rendered_html">
5638+
<h2 id="-">其余细节</h2>
5639+
<ul>
5640+
<li>将xrange改为range。当然,作为代价,在python2下,range的效率很有问题。</li>
5641+
<li>urllib.quote和unquote改为了urllib.parse.quote和unquote。</li>
5642+
<li>某些库,在python2和python3下行为不一致,例如csv。对于这些库,尽量不要折腾兼容性。直接针对Python2/3做两种不同代码更方便。</li>
5643+
<li>使用next(it)而不是it.next()。</li>
5644+
</ul>
5645+
</div>
5646+
</div>
5647+
</div></section>
5648+
</section><section>
5649+
<section>
5650+
54885651
<div class="cell border-box-sizing text_cell rendered">
54895652
<div class="prompt input_prompt">
54905653
</div>

0 commit comments

Comments
 (0)