-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpython常见知识点.html
1595 lines (963 loc) · 79.9 KB
/
python常见知识点.html
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html class="theme-next pisces use-motion" lang="zh-Hans">
<head><meta name="generator" content="Hexo 3.8.0">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="theme-color" content="#222">
<script src="/lib/pace/pace.min.js?v=1.0.2"></script>
<link href="/lib/pace/pace-theme-minimal.min.css?v=1.0.2" rel="stylesheet">
<meta http-equiv="Cache-Control" content="no-transform">
<meta http-equiv="Cache-Control" content="no-siteapp">
<meta name="google-site-verification" content="BJ10tOPrv3FPnbQ4Rxq6DCfyKaRhH-JZQ9_PJCNe6ck">
<link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic|Menlo:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css">
<link href="/css/main.css?v=5.1.4" rel="stylesheet" type="text/css">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=5.1.4">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.ico?v=5.1.4">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.ico?v=5.1.4">
<link rel="mask-icon" href="/images/logo.svg?v=5.1.4" color="#222">
<meta name="keywords" content="python,">
<link rel="alternate" href="/atom.xml" title="Үміт" type="application/atom+xml">
<meta name="description" content="最近在学习python,总结了下python常用的知识点。">
<meta name="keywords" content="python">
<meta property="og:type" content="article">
<meta property="og:title" content="python常见知识点">
<meta property="og:url" content="https://www.keymou.wang/python常见知识点.html">
<meta property="og:site_name" content="Үміт">
<meta property="og:description" content="最近在学习python,总结了下python常用的知识点。">
<meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2019-04-27T04:29:34.992Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="python常见知识点">
<meta name="twitter:description" content="最近在学习python,总结了下python常用的知识点。">
<script type="text/javascript" id="hexo.configurations">
var NexT = window.NexT || {};
var CONFIG = {
root: '/',
scheme: 'Pisces',
version: '5.1.4',
sidebar: {"position":"left","display":"post","offset":12,"b2t":false,"scrollpercent":true,"onmobile":false},
fancybox: true,
tabs: true,
motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
duoshuo: {
userId: '0',
author: '博主'
},
algolia: {
applicationID: '',
apiKey: '',
indexName: '',
hits: {"per_page":10},
labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
}
};
</script>
<link rel="canonical" href="https://www.keymou.wang/python常见知识点.html">
<title>python常见知识点 | Үміт</title>
</head>
<body itemscope="" itemtype="http://schema.org/WebPage" lang="zh-Hans">
<div class="container sidebar-position-left page-post-detail">
<div class="headband"></div>
<header id="header" class="header" itemscope="" itemtype="http://schema.org/WPHeader">
<div class="header-inner"><div class="site-brand-wrapper">
<div class="site-meta ">
<div class="custom-logo-site-title">
<a href="/" class="brand" rel="start">
<span class="logo-line-before"><i></i></span>
<span class="site-title">Үміт</span>
<span class="logo-line-after"><i></i></span>
</a>
</div>
<p class="site-subtitle">心有猛虎,細嗅薔薇</p>
</div>
<div class="site-nav-toggle">
<button>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
<span class="btn-bar"></span>
</button>
</div>
</div>
<nav class="site-nav">
<ul id="menu" class="menu">
<li class="menu-item menu-item-home">
<a href="/" rel="section">
<i class="menu-item-icon fa fa-fw fa-home"></i> <br>
首  页
</a>
</li>
<li class="menu-item menu-item-about">
<a href="/about/" rel="section">
<i class="menu-item-icon fa fa-fw fa-user"></i> <br>
关于博主
</a>
</li>
<li class="menu-item menu-item-tags">
<a href="/tags/" rel="section">
<i class="menu-item-icon fa fa-fw fa-tags"></i> <br>
标  签
</a>
</li>
<li class="menu-item menu-item-categories">
<a href="/categories/" rel="section">
<i class="menu-item-icon fa fa-fw fa-th"></i> <br>
分  类
</a>
</li>
<li class="menu-item menu-item-archives">
<a href="/archives/" rel="section">
<i class="menu-item-icon fa fa-fw fa-archive"></i> <br>
归  档
</a>
</li>
<li class="menu-item menu-item-search">
<a href="javascript:;" class="popup-trigger">
<i class="menu-item-icon fa fa-search fa-fw"></i> <br>
站内搜索
</a>
</li>
</ul>
<div class="site-search">
<div class="popup search-popup local-search-popup">
<div class="local-search-header clearfix">
<span class="search-icon">
<i class="fa fa-search"></i>
</span>
<span class="popup-btn-close">
<i class="fa fa-times-circle"></i>
</span>
<div class="local-search-input-wrapper">
<input autocomplete="off" placeholder="搜索..." spellcheck="false" type="text" id="local-search-input">
</div>
</div>
<div id="local-search-result"></div>
</div>
</div>
</nav>
</div>
</header>
<main id="main" class="main">
<div class="main-inner">
<div class="content-wrap">
<div id="content" class="content">
<div id="posts" class="posts-expand">
<article class="post post-type-normal" itemscope="" itemtype="http://schema.org/Article">
<div class="post-block">
<link itemprop="mainEntityOfPage" href="https://www.keymou.wang/python常见知识点.html">
<span hidden itemprop="author" itemscope="" itemtype="http://schema.org/Person">
<meta itemprop="name" content="keymou">
<meta itemprop="description" content="">
<meta itemprop="image" content="/uploads/avatar.jpg">
</span>
<span hidden itemprop="publisher" itemscope="" itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Үміт">
</span>
<header class="post-header">
<h1 class="post-title" itemprop="name headline">python常见知识点</h1>
<div class="post-meta">
<span class="post-time">
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建于" itemprop="dateCreated datePublished" datetime="2018-12-14T18:23:08+08:00">
2018-12-14
</time>
</span>
<span class="post-category">
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-folder-o"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope="" itemtype="http://schema.org/Thing">
<a href="/categories/python/" itemprop="url" rel="index">
<span itemprop="name">python</span>
</a>
</span>
</span>
<span class="post-comments-count">
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-comment-o"></i>
</span>
<a href="/python常见知识点.html#comments" itemprop="discussionUrl">
<span class="post-comments-count valine-comment-count" data-xid="/python常见知识点.html" itemprop="commentCount"></span>
</a>
</span>
<span id="/python常见知识点.html" class="leancloud_visitors" data-flag-title="python常见知识点">
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text">热度:</span>
<span class="leancloud-visitors-count"></span>
<span>℃</span>
</span>
<div class="post-wordcount">
<span class="post-meta-item-icon">
<i class="fa fa-file-word-o"></i>
</span>
<span class="post-meta-item-text">字数统计:</span>
<span title="字数统计">
2.8k 字
</span>
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-clock-o"></i>
</span>
<span class="post-meta-item-text">阅读时长 ≈</span>
<span title="阅读时长">
11 分钟
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody">
<p>最近在学习python,总结了下python常用的知识点。</p>
<a id="more"></a>
<h4 id="函数参数传递"><a href="#函数参数传递" class="headerlink" title="函数参数传递"></a>函数参数传递</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">a = <span class="number">1</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">fun</span><span class="params">(a)</span>:</span></span><br><span class="line"> a = <span class="number">2</span></span><br><span class="line">fun(a)</span><br><span class="line">print(a)</span><br><span class="line"></span><br><span class="line">b = []</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">fun</span><span class="params">(b)</span>:</span></span><br><span class="line"> b.append(<span class="number">1</span>)</span><br><span class="line">fun(b)</span><br><span class="line">print(b)</span><br></pre></td></tr></table></figure>
<p>所有的变量都可以理解是内存中一个对象的“引用”。类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。<br>在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。</p>
<h4 id="实例方法、类方法、静态方法"><a href="#实例方法、类方法、静态方法" class="headerlink" title="实例方法、类方法、静态方法"></a>实例方法、类方法、静态方法</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">foo</span><span class="params">(x)</span>:</span></span><br><span class="line"> print(<span class="string">"executing foo(%s)"</span>%(x))</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">A</span><span class="params">(object)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">foo</span><span class="params">(self,x)</span>:</span></span><br><span class="line"> print(<span class="string">"executing foo(%s,%s)"</span>%(self,x))</span><br><span class="line"></span><br><span class="line"><span class="meta"> @classmethod</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">class_foo</span><span class="params">(cls,x)</span>:</span></span><br><span class="line"> print(<span class="string">"executing class_foo(%s,%s)"</span>%(cls,x))</span><br><span class="line"></span><br><span class="line"><span class="meta"> @staticmethod</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">static_foo</span><span class="params">(x)</span>:</span></span><br><span class="line"> print(<span class="string">"executing static_foo(%s)"</span>%x)</span><br><span class="line"></span><br><span class="line">a=A()</span><br><span class="line">a.foo(<span class="number">2</span>)</span><br><span class="line">a.class_foo(<span class="number">2</span>)</span><br><span class="line">a.static_foo(<span class="number">2</span>)</span><br></pre></td></tr></table></figure>
<p>先理解下函数参数里面的<code>self</code>和<code>cls</code>。这个<code>self</code>和<code>cls</code>是对类或者实例的绑定,对于一般的函数来说我们可以这么调用<code>foo(x)</code>,这个函数就是最常用的,它的工作跟任何东西(类,实例)无关.<br>对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例,就是<code>foo(self, x)</code>,为什么要这么做呢?因为实例方法的调用离不开实例,我们需要把实例自己传给函数,调用的时候是这样的<code>a.foo(x)</code>(其实是<code>foo(a, x)</code>).<br>类方法一样,只不过它传递的是类而不是实例,<code>A.class_foo(x)</code>.注意这里的self和cls可以替换别的参数,但是python的约定是这俩,还是不要改的好.</p>
<p>对于静态方法其实和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用<code>a.static_foo(x)</code>或者<code>A.static_foo(x)</code>来调用.</p>
<table>
<thead>
<tr>
<th>\</th>
<th>实例方法</th>
<th>类方法</th>
<th>静态方法</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>a = A()</code></td>
<td><code>a.foo(x)</code></td>
<td><code>a.class_foo(x)</code></td>
<td><code>a.static_foo(x)</code></td>
</tr>
<tr>
<td><code>A</code></td>
<td>不可用</td>
<td><code>A.class_foo(x)</code></td>
<td><code>A.static_foo(x)</code></td>
</tr>
</tbody>
</table>
<h4 id="类变量、实例变量"><a href="#类变量、实例变量" class="headerlink" title="类变量、实例变量"></a>类变量、实例变量</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Person</span>:</span></span><br><span class="line"> name=<span class="string">"aaa"</span></span><br><span class="line"> </span><br><span class="line">p1=Person()</span><br><span class="line">p2=Person()</span><br><span class="line">p1.name=<span class="string">"bbb"</span></span><br><span class="line">print(p1.name) <span class="comment"># bbb</span></span><br><span class="line">print(p2.name) <span class="comment"># aaa</span></span><br><span class="line">print(Person.name) <span class="comment"># aaa</span></span><br></pre></td></tr></table></figure>
<p>类变量就是供类使用的变量,实例变量就是供实例使用的。</p>
<h4 id="Python自省"><a href="#Python自省" class="headerlink" title="Python自省"></a>Python自省</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">a = <span class="number">1</span></span><br><span class="line">b = <span class="string">'Hello'</span></span><br><span class="line">print(type(a), type(b))</span><br></pre></td></tr></table></figure>
<ul>
<li>自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型。<br>比如type()、dir()、getattr()、hasattr()、isinstance()</li>
</ul>
<h4 id="列表推导式"><a href="#列表推导式" class="headerlink" title="列表推导式"></a>列表推导式</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">multiples = [i <span class="keyword">for</span> i <span class="keyword">in</span> range(<span class="number">30</span>) <span class="keyword">if</span> i % <span class="number">3</span> <span class="keyword">is</span> <span class="number">0</span>]</span><br><span class="line">print(multiples)</span><br><span class="line"></span><br><span class="line">mcase = {<span class="string">'a'</span>: <span class="number">10</span>, <span class="string">'b'</span>: <span class="number">34</span>, <span class="string">'A'</span>: <span class="number">7</span>, <span class="string">'Z'</span>: <span class="number">3</span>}</span><br><span class="line"></span><br><span class="line">mcase_frequency = {</span><br><span class="line"> k.lower(): mcase.get(k.lower(), <span class="number">0</span>) + mcase.get(k.upper(), <span class="number">0</span>)</span><br><span class="line"> <span class="keyword">for</span> k <span class="keyword">in</span> mcase.keys()</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">print(mcase_frequency)</span><br><span class="line"><span class="comment"># mcase_frequency == {'a': 17, 'z': 3, 'b': 34}</span></span><br></pre></td></tr></table></figure>
<ul>
<li>列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。规范:<code>variable = [out_exp for out_exp in input_list if out_exp == 2]</code></li>
<li>字典推导式,上述例子把同一个字母但不同大小写的值合并起来。<br>可以快速对换一个字典的键和值:<br><code>{v: k for k, v in dict.items()}</code></li>
</ul>
<h4 id="单下划线和双下划线"><a href="#单下划线和双下划线" class="headerlink" title="单下划线和双下划线"></a>单下划线和双下划线</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MyClass</span><span class="params">()</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__init__</span><span class="params">(self)</span>:</span></span><br><span class="line"> self.__superprivate = <span class="string">'Hello'</span></span><br><span class="line"> self._semiprivate = <span class="string">', world'</span></span><br><span class="line"></span><br><span class="line">mc = MyClass()</span><br><span class="line">print(mc._semiprivate)</span><br><span class="line">print(mc.__dict__)</span><br><span class="line"><span class="comment"># print(mc.__superprivate)</span></span><br><span class="line"><span class="comment"># AttributeError: 'MyClass' object has no attribute '__superprivate'</span></span><br></pre></td></tr></table></figure>
<ul>
<li><code>__foo__</code>:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突.</li>
<li><code>_foo</code>:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.</li>
<li><code>__foo</code>:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名.</li>
</ul>
<h4 id="字符串格式化:-和-format的区别"><a href="#字符串格式化:-和-format的区别" class="headerlink" title="字符串格式化:%和.format的区别"></a>字符串格式化:%和.format的区别</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">name = <span class="string">'Joe'</span></span><br><span class="line">print(<span class="string">'Name is %s'</span> %name)</span><br><span class="line">print(<span class="string">'Name is {}'</span>.format(name))</span><br><span class="line">name = (<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>)</span><br><span class="line"><span class="comment"># print('Name is %s' %name) # TypeError: not all arguments converted during string formatting</span></span><br><span class="line">print(<span class="string">'Name is {}'</span>.format(name))</span><br><span class="line">print(<span class="string">'Name is %s'</span> %(name,))</span><br></pre></td></tr></table></figure>
<p><code>format</code>简洁,<code>%</code>无法同时传递一个变量和元组</p>
<h4 id="迭代器和生成器"><a href="#迭代器和生成器" class="headerlink" title="迭代器和生成器"></a>迭代器和生成器</h4><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">mylist = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>]</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> mylist:</span><br><span class="line"> print(i)</span><br><span class="line"></span><br><span class="line"><span class="comment"># mylist is an iterable</span></span><br><span class="line"><span class="comment"># These iterables are handy because you can read them as much as you wish, but you store all the values in memory and this is not always what you want when you have a lot of values.</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># yield is a keyword that is used like return, except the function will return a generator.</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">createGenerator</span><span class="params">()</span>:</span></span><br><span class="line"> mylist = range(<span class="number">3</span>)</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> mylist:</span><br><span class="line"> <span class="keyword">yield</span> i*i</span><br><span class="line"></span><br><span class="line"><span class="comment"># create a generator</span></span><br><span class="line">mygenerator = createGenerator()</span><br><span class="line">print(mygenerator)</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> mygenerator:</span><br><span class="line"> print(i)</span><br><span class="line"></span><br><span class="line">print(<span class="string">'****'</span>)</span><br><span class="line"><span class="comment"># To master yield, you must understand that when you call the function, the code you have written in the function body does not run.</span></span><br><span class="line"><span class="keyword">for</span> j <span class="keyword">in</span> mygenerator:</span><br><span class="line"> print(j)</span><br><span class="line"></span><br><span class="line"><span class="string">"""</span></span><br><span class="line"><span class="string">Generators are iterators, a kind of iterable you can only iterate over once. Generators do not store all the values in memory, they generate the values on the fly.</span></span><br><span class="line"><span class="string">"""</span></span><br></pre></td></tr></table></figure>
<h4 id="args-and-kwargs”"><a href="#args-and-kwargs”" class="headerlink" title="*args and **kwargs”"></a>*args and **kwargs”</h4><p>不确定你的函数里将要传递多少参数时你可以用<code>*args</code>。例如,它可以传递任意数量的参数<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">print_everything</span><span class="params">(*args)</span>:</span></span><br><span class="line"> <span class="keyword">for</span> count, thing <span class="keyword">in</span> enumerate(args):</span><br><span class="line"> print(<span class="string">'{0}. {1}'</span>.format(count, thing))</span><br><span class="line"></span><br><span class="line">print_everything(<span class="string">'apple'</span>, <span class="string">'banana'</span>, <span class="string">'cabbage'</span>)</span><br></pre></td></tr></table></figure></p>
<p><code>**kwargs</code>允许你使用没有事先定义的参数名</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">table_things</span><span class="params">(**kwargs)</span>:</span></span><br><span class="line"> <span class="keyword">for</span> name, value <span class="keyword">in</span> kwargs.items():</span><br><span class="line"> print(<span class="string">'{0}={1}'</span>.format(name, value))</span><br><span class="line"></span><br><span class="line">table_things(apple = <span class="string">'fruit'</span>, cabbage = <span class="string">'vegetable'</span>)</span><br></pre></td></tr></table></figure>
<p>也可以混着用.命名参数首先获得参数值然后所有的其他参数都传递给<code>*args</code>和<code>**kwargs</code>。命名参数在列表的最前端,<code>*args</code>和<code>**kwargs</code>可以同时在函数的定义中,但是<code>*args</code>必须在<code>**kwargs</code>前面.</p>
<h4 id="面向切面编程AOP和装饰器"><a href="#面向切面编程AOP和装饰器" class="headerlink" title="面向切面编程AOP和装饰器"></a>面向切面编程AOP和装饰器</h4><ul>
<li>装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。</li>
<li><p>装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。<br><strong>概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。</strong></p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">makebold</span><span class="params">(fn)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">wrapped</span><span class="params">()</span>:</span></span><br><span class="line"> <span class="keyword">return</span> <span class="string">"<b>"</span> + fn() + <span class="string">"</b>"</span></span><br><span class="line"> <span class="keyword">return</span> wrapped</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">makeitalic</span><span class="params">(fn)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">wrapped</span><span class="params">()</span>:</span></span><br><span class="line"> <span class="keyword">return</span> <span class="string">"<i>"</span> + fn() + <span class="string">"</i>"</span></span><br><span class="line"> <span class="keyword">return</span> wrapped</span><br></pre></td></tr></table></figure>
</li>
<li><p>装饰器的作用就是为已经存在的对象添加额外的功能</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">@makebold</span></span><br><span class="line"><span class="meta">@makeitalic</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">hello</span><span class="params">()</span>:</span></span><br><span class="line"> <span class="keyword">return</span> <span class="string">"hello world"</span></span><br><span class="line"></span><br><span class="line">print(hello())</span><br></pre></td></tr></table></figure>
</li>
</ul>
<h4 id="鸭子类型"><a href="#鸭子类型" class="headerlink" title="鸭子类型"></a>鸭子类型</h4><p>当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为<em>鸭子</em>。<br>并不关心对象是什么类型,到底是不是鸭子,只关心行为。<br>在python中,有很多file-like的东西,比如<code>StringIO</code>,<code>GzipFile</code>,<code>socket</code>。它们有很多相同的方法,我们把它们当作文件使用。</p>
<h4 id="Python中函数重载"><a href="#Python中函数重载" class="headerlink" title="Python中函数重载"></a>Python中函数重载</h4><ul>
<li>函数重载主要是为了解决两个问题:可变参数类型、可变参数个数。</li>
<li>一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载。<br>情况1:函数功能相同,但是参数类型不同,根本不需要处理,因为python可以接受任何类型的参数<br>情况2:函数功能相同,但参数个数不同,答案就是缺省参数。<br><strong>python 自然就不需要函数重载。</strong></li>
</ul>
<h4 id="new和init的区别"><a href="#new和init的区别" class="headerlink" title="new和init的区别"></a><strong>new</strong>和<strong>init</strong>的区别</h4><ul>
<li><code>__new__</code>是一个静态方法,而<code>__init__</code>是一个实例方法.</li>
<li><code>__new__</code>方法会返回一个创建的实例,而<code>__init__</code>什么都不返回.</li>
<li>只有在<code>__new__</code>返回一个<code>cls</code>的实例时后面的<code>__init__</code>才能被调用.</li>
<li>当创建一个新实例时调用<code>__new__</code>,初始化一个实例时用<code>__init__</code>.</li>
</ul>
<p>ps: <strong>metaclass</strong>是创建类时起作用.所以我们可以分别使用<strong>metaclass</strong>,<strong>new</strong>和<strong>init</strong>来分别在类创建,实例创建和实例初始化的时候做一些小手脚.</p>
<h4 id="单例模式"><a href="#单例模式" class="headerlink" title="单例模式"></a>单例模式</h4><h5 id="使用new方法"><a href="#使用new方法" class="headerlink" title="使用new方法"></a>使用<strong>new</strong>方法</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Singleton</span><span class="params">(object)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__new__</span><span class="params">(cls, *args, **kw)</span>:</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> hasattr(cls, <span class="string">'_instance'</span>):</span><br><span class="line"> orig = super(Singleton, cls)</span><br><span class="line"> cls._instance = orig.__new__(cls, *args, **kw)</span><br><span class="line"> <span class="keyword">return</span> cls._instance</span><br><span class="line"> </span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MyClass</span><span class="params">(Singleton)</span>:</span></span><br><span class="line"> a = <span class="number">1</span></span><br></pre></td></tr></table></figure>
<h5 id="共享属性-创建实例时把所有实例的-dict-指向同一个字典-这样它们具有相同的属性和方法"><a href="#共享属性-创建实例时把所有实例的-dict-指向同一个字典-这样它们具有相同的属性和方法" class="headerlink" title="共享属性 创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法."></a>共享属性 创建实例时把所有实例的<code>__dict__</code>指向同一个字典,这样它们具有相同的属性和方法.</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Borg</span><span class="params">(object)</span>:</span></span><br><span class="line"> _state = {}</span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__new__</span><span class="params">(cls, *args, **kw)</span>:</span></span><br><span class="line"> ob = super(Borg, cls).__new__(cls, *args, **kw)</span><br><span class="line"> ob.__dict__ = cls._state</span><br><span class="line"> <span class="keyword">return</span> ob</span><br><span class="line"> </span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MyClass2</span><span class="params">(Borg)</span>:</span></span><br><span class="line"> a = <span class="number">1</span></span><br></pre></td></tr></table></figure>
<h5 id="装饰器版本"><a href="#装饰器版本" class="headerlink" title="装饰器版本"></a>装饰器版本</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">singleton</span><span class="params">(cls, *args, **kw)</span>:</span></span><br><span class="line"> instances = {}</span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getinstance</span><span class="params">()</span>:</span></span><br><span class="line"> <span class="keyword">if</span> cls <span class="keyword">not</span> <span class="keyword">in</span> instances:</span><br><span class="line"> instances[cls] = cls(*args, **kw)</span><br><span class="line"> <span class="keyword">return</span> instances[cls]</span><br><span class="line"> <span class="keyword">return</span> getinstance</span><br><span class="line"> </span><br><span class="line"><span class="meta">@singleton</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MyClass</span>:</span></span><br><span class="line"> ...</span><br></pre></td></tr></table></figure>
<h5 id="import方法"><a href="#import方法" class="headerlink" title="import方法"></a>import方法</h5><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># mysingleton.py</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">My_Singleton</span><span class="params">(object)</span>:</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">foo</span><span class="params">(self)</span>:</span></span><br><span class="line"> <span class="keyword">pass</span></span><br><span class="line"> </span><br><span class="line">my_singleton = My_Singleton()</span><br></pre></td></tr></table></figure>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># to use</span></span><br><span class="line"><span class="comment"># from mysingleton import my_singleton</span></span><br><span class="line"><span class="comment"># my_singleton.foo()</span></span><br></pre></td></tr></table></figure>
<h4 id="作用域"><a href="#作用域" class="headerlink" title="作用域"></a>作用域</h4><ul>
<li>一个变量的作用域总是由在代码中被赋值的地方所决定的。</li>
<li>当 Python 遇到一个变量的话他会按照这样的顺序进行搜索:</li>
<li>本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)</li>
</ul>
<h4 id="闭包-closure"><a href="#闭包-closure" class="headerlink" title="闭包(closure)"></a>闭包(closure)</h4><p>闭包(closure)是函数式编程的重要的语法结构<br>创建一个闭包必须满足以下几点:</p>
<ul>
<li>必须有一个内嵌函数</li>
<li>内嵌函数必须引用外部函数中的变量</li>
<li>外部函数的返回值必须是内嵌函数</li>
</ul>
<h4 id="lambda函数"><a href="#lambda函数" class="headerlink" title="lambda函数"></a>lambda函数</h4><p>lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">map( <span class="keyword">lambda</span> x: x*x, [y <span class="keyword">for</span> y <span class="keyword">in</span> range(<span class="number">10</span>)] )</span><br></pre></td></tr></table></figure></p>
<h4 id="Python里的拷贝"><a href="#Python里的拷贝" class="headerlink" title="Python里的拷贝"></a>Python里的拷贝</h4><ul>
<li>copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变</li>
<li>深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> copy</span><br><span class="line">a = [<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, [<span class="string">'a'</span>, <span class="string">'b'</span>]] <span class="comment">#原始对象</span></span><br><span class="line"> </span><br><span class="line">b = a <span class="comment">#赋值,传对象的引用</span></span><br><span class="line">c = copy.copy(a) <span class="comment">#对象拷贝,浅拷贝</span></span><br><span class="line">d = copy.deepcopy(a) <span class="comment">#对象拷贝,深拷贝</span></span><br><span class="line"> </span><br><span class="line">a.append(<span class="number">5</span>) <span class="comment">#修改对象a</span></span><br><span class="line">a[<span class="number">4</span>].append(<span class="string">'c'</span>) <span class="comment">#修改对象a中的['a', 'b']数组对象</span></span><br><span class="line"> </span><br><span class="line">print(<span class="string">'a = '</span>, a)</span><br><span class="line">print(<span class="string">'b = '</span>, b)</span><br><span class="line">print(<span class="string">'c = '</span>, c)</span><br><span class="line">print(<span class="string">'d = '</span>, d)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 输出结果:</span></span><br><span class="line"><span class="comment"># a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]</span></span><br><span class="line"><span class="comment"># b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]</span></span><br><span class="line"><span class="comment"># c = [1, 2, 3, 4, ['a', 'b', 'c']]</span></span><br><span class="line"><span class="comment"># d = [1, 2, 3, 4, ['a', 'b']]</span></span><br></pre></td></tr></table></figure>
</li>
</ul>
<h4 id="Python垃圾回收机制"><a href="#Python垃圾回收机制" class="headerlink" title="Python垃圾回收机制"></a>Python垃圾回收机制</h4><p>Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。<br>在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。</p>
<ol>
<li>引用计数<br>PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少.引用计数为0时,该对象生命就结束了。</li>
<li>标记-清除机制<br>基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放。</li>
<li>分代技术<br>整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。</li>
</ol>
<h4 id="Python的is"><a href="#Python的is" class="headerlink" title="Python的is"></a>Python的is</h4><p><code>is</code>是对比地址,<code>==</code>是对比值</p>
<h4 id="read,readline和readlines"><a href="#read,readline和readlines" class="headerlink" title="read,readline和readlines"></a>read,readline和readlines</h4><ul>
<li><code>read</code> 读取整个文件</li>
<li><code>readline</code> 读取下一行,使用生成器方法</li>
<li><code>readlines</code> 读取整个文件到一个迭代器以供我们遍历</li>
</ul>
</div>
<div>
<div style="text-align:center;color: #ccc;font-size:14px;">
------ 本文结束<i class="fa fa-paw"></i>感谢您的阅读 ------</div>
</div>
<div>
<div style="padding: 10px 0; margin: 20px auto; width: 90%; text-align: center;">
<div></div>
<button id="rewardButton" disable="enable" onclick="var qr = document.getElementById('QR'); if (qr.style.display === 'none') {qr.style.display='block';} else {qr.style.display='none'}">
<span>打赏</span>
</button>
<div id="QR" style="display: none;">
<div id="wechat" style="display: inline-block">
<img id="wechat_qr" src="/images/wechatpay.png" alt="keymou 微信支付">
<p>微信支付</p>
</div>
</div>
</div>
</div>
<footer class="post-footer">
<div class="post-tags">
<a href="/tags/python/" rel="tag"><i class="fa fa-tag"></i> python</a>
</div>
<div class="post-widgets">
<div class="wp_rating">
<div style="color: rgba(0, 0, 0, 0.75); font-size:13px; letter-spacing:3px">(>你觉得这篇文章怎么样?<)</div>
<div id="wpac-rating"></div>
</div>
</div>
<div class="post-nav">
<div class="post-nav-next post-nav-item">
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev post-nav-item">
<a href="/アンナチュラル.html" rel="prev" title="アンナチュラル">
アンナチュラル <i class="fa fa-chevron-right"></i>
</a>
</div>
</div>
</footer>
</div>
</article>
<div class="post-spread">
</div>
</div>
</div>
<div class="comments" id="comments">
</div>
</div>
<div class="sidebar-toggle">
<div class="sidebar-toggle-line-wrap">
<span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
<span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
</div>
</div>
<aside id="sidebar" class="sidebar">
<div class="sidebar-inner">
<ul class="sidebar-nav motion-element">
<li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">
文章目录
</li>
<li class="sidebar-nav-overview" data-target="site-overview-wrap">
站点概览
</li>
</ul>
<section class="site-overview-wrap sidebar-panel">
<div class="site-overview">
<div class="site-author motion-element" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
<img class="site-author-image" itemprop="image" src="/uploads/avatar.jpg" alt="keymou">
<p class="site-author-name" itemprop="name">keymou</p>
<p class="site-description motion-element" itemprop="description"></p>
</div>
<nav class="site-state motion-element">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">9</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
<div class="site-state-item site-state-categories">
<a href="/categories/index.html">
<span class="site-state-item-count">8</span>
<span class="site-state-item-name">分类</span>
</a>
</div>
<div class="site-state-item site-state-tags">
<a href="/tags/index.html">
<span class="site-state-item-count">14</span>
<span class="site-state-item-name">标签</span>
</a>
</div>
</nav>
<div class="feed-link motion-element">
<a href="/atom.xml" rel="alternate">
<i class="fa fa-rss"></i>
RSS
</a>
</div>
<div class="links-of-author motion-element">
<span class="links-of-author-item">
<a href="https://github.com/keymou" target="_blank" title="GitHub">
<i class="fa fa-fw fa-github"></i>GitHub</a>
</span>
<span class="links-of-author-item">
<a href="mailto:shinyang691@gmail.com" target="_blank" title="E-Mail">
<i class="fa fa-fw fa-envelope"></i>E-Mail</a>
</span>
<span class="links-of-author-item">
<a href="https://segmentfault.com/u/keymoi" target="_blank" title="SegmentFault">
<i class="fa fa-fw fa-stack-overflow"></i>SegmentFault</a>
</span>
<span class="links-of-author-item">
<a href="https://weibo.com/606030719" target="_blank" title="微博">
<i class="fa fa-fw fa-weibo"></i>微博</a>
</span>
</div>
<div class="links-of-blogroll motion-element links-of-blogroll-inline">
<div class="links-of-blogroll-title">
<i class="fa fa-fw fa-link"></i>
推荐阅读
</div>
<ul class="links-of-blogroll-list">
<li class="links-of-blogroll-item">
<a href="https://www.mongodb.org.cn/" title="mongodb" target="_blank" rel="external nofollow">mongodb</a>
</li>
<li class="links-of-blogroll-item">
<a href="https://germey.gitbooks.io/python3webspider/content/" title="python3网络爬虫" target="_blank" rel="external nofollow">python3网络爬虫</a>
</li>
</ul>
</div>
</div>
</section>
<!--noindex-->
<section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
<div class="post-toc">
<div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-4"><a class="nav-link" href="#函数参数传递"><span class="nav-number">1.</span> <span class="nav-text">函数参数传递</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#实例方法、类方法、静态方法"><span class="nav-number">2.</span> <span class="nav-text">实例方法、类方法、静态方法</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#类变量、实例变量"><span class="nav-number">3.</span> <span class="nav-text">类变量、实例变量</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#Python自省"><span class="nav-number">4.</span> <span class="nav-text">Python自省</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#列表推导式"><span class="nav-number">5.</span> <span class="nav-text">列表推导式</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#单下划线和双下划线"><span class="nav-number">6.</span> <span class="nav-text">单下划线和双下划线</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#字符串格式化:-和-format的区别"><span class="nav-number">7.</span> <span class="nav-text">字符串格式化:%和.format的区别</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#迭代器和生成器"><span class="nav-number">8.</span> <span class="nav-text">迭代器和生成器</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#args-and-kwargs”"><span class="nav-number">9.</span> <span class="nav-text">*args and **kwargs”</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#面向切面编程AOP和装饰器"><span class="nav-number">10.</span> <span class="nav-text">面向切面编程AOP和装饰器</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#鸭子类型"><span class="nav-number">11.</span> <span class="nav-text">鸭子类型</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#Python中函数重载"><span class="nav-number">12.</span> <span class="nav-text">Python中函数重载</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#new和init的区别"><span class="nav-number">13.</span> <span class="nav-text">new和init的区别</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#单例模式"><span class="nav-number">14.</span> <span class="nav-text">单例模式</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#使用new方法"><span class="nav-number">14.1.</span> <span class="nav-text">使用new方法</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#共享属性-创建实例时把所有实例的-dict-指向同一个字典-这样它们具有相同的属性和方法"><span class="nav-number">14.2.</span> <span class="nav-text">共享属性 创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法.</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#装饰器版本"><span class="nav-number">14.3.</span> <span class="nav-text">装饰器版本</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#import方法"><span class="nav-number">14.4.</span> <span class="nav-text">import方法</span></a></li></ol></li><li class="nav-item nav-level-4"><a class="nav-link" href="#作用域"><span class="nav-number">15.</span> <span class="nav-text">作用域</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#闭包-closure"><span class="nav-number">16.</span> <span class="nav-text">闭包(closure)</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#lambda函数"><span class="nav-number">17.</span> <span class="nav-text">lambda函数</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#Python里的拷贝"><span class="nav-number">18.</span> <span class="nav-text">Python里的拷贝</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#Python垃圾回收机制"><span class="nav-number">19.</span> <span class="nav-text">Python垃圾回收机制</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#Python的is"><span class="nav-number">20.</span> <span class="nav-text">Python的is</span></a></li><li class="nav-item nav-level-4"><a class="nav-link" href="#read,readline和readlines"><span class="nav-number">21.</span> <span class="nav-text">read,readline和readlines</span></a></li></ol></div>
</div>
</section>
<!--/noindex-->
</div>
</aside>
</div>
</main>
<footer id="footer" class="footer">
<div class="footer-inner">
<script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<div class="copyright">© 2018 — <span itemprop="copyrightYear">2019</span>
<span class="with-love" id="heart">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">keymou</span>
<span class="post-meta-divider">|</span>
<span class="post-meta-item-icon">
<i class="fa fa-area-chart"></i>
</span>
<span class="post-meta-item-text">Site words total count:</span>
<span title="Site words total count">29.4k</span>
</div>
<!--
<div class="theme-info">主题 — <a class="theme-link" target="_blank" href="https://github.com/iissnan/hexo-theme-next" rel="external nofollow">NexT.Pisces</a> v5.1.4</div>
-->
<div class="busuanzi-count">
<script async src="https://dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<span class="site-uv">
<i class="fa fa-user">本站访客数</i>
<span class="busuanzi-value" id="busuanzi_value_site_uv"></span>
人次
</span>
<span class="site-pv">
<i class="fa fa-eye">本站总访问量</i>
<span class="busuanzi-value" id="busuanzi_value_site_pv"></span>
次
</span>
</div>
</div>
</footer>
<div class="back-to-top">
<i class="fa fa-arrow-up"></i>
<span id="scrollpercent"><span>0</span>%</span>
</div>
</div>
<script type="text/javascript">
if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
window.Promise = null;
}
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>