Python那些事——python的奇技淫巧!

[复制链接]
nitenite 发表于 2017-12-31 08:34:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python
( o" m6 H7 c( y6 p1 ~2 G9 h& I9 D2 H  }- ]! f2 D, ~
对于python,我给大家总结了以下几点:
0 P! O, s4 t  ?5 OPython 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。0 B) @" s; m) z; Y4 F
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。" N+ y# S% m$ u* S- `8 d

) G' i1 @  _, I! I/ U

    / R' b3 _9 h. D8 @% O7 [
  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
    # L( w7 A% s' q1 [7 b9 m/ ]
  • Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。
    ) p0 O& b. ?9 Z8 `  {# c
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
    1 c( Q$ M& Z+ p* u# k8 v
  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
    - u. V, q( O- o; \: v* d5 Y$ e7 v
在这里,我给大家就分享一个关于Python的奇技淫巧吧!
& S3 _" q  {3 @, k7 o控制台操作控制台不闪退
8 F/ E0 r7 A. j" {
1, E( q3 A9 ~% M# R: K% t( e; D* x
os.system('pause')
6 q" D: `* o0 O' y5 U
获取控制台大小
* z& }2 M" Y, c( r
1
  {& E% v) n6 o8 o- U0 X- X7 u  k
rows, columns = os.popen('stty size', 'r').read().split()
- H0 D7 ?$ G8 D1 K8 W6 C
输入输出控制解决输入提示中文乱码问题
% b0 f4 u4 m: a6 I/ F
1
) F5 O3 X# H9 y: q5 f
raw_input(unicode('请输入文字','utf-8').encode('gbk'))1 j) Z3 T, Q3 I4 a4 ]9 K6 ?! r" ]
格式化输出
8 f0 Z% D" M  B- v8 r0 o9 y( T
1
/ P0 x3 g7 \5 A: K' ]1 x' h
print a.prettify()5 a) t8 \1 f% ~
接受多行输入5 N$ R( E6 ?- C9 u( @
18 K- _$ s: Q) N: B' e
2: G4 o. _! C7 v& L; A+ B* R% e, G
3  Z- T0 R0 N5 _- w, m( E& H+ S8 g
4$ F, d1 w1 [& j; X( r
5
+ f, d* J2 `& `/ f+ u/ @. ~8 C6
; W2 c$ I# y) o5 G$ w2 q* z) F: M71 C, {: _; I! a+ }) z
8( U! C$ Y) d! l+ q" ^; p* C
9
' q7 Q$ K+ ~* i% F10
3 D5 F1 e( {6 P11
! L  J$ A2 N" }: V1 u% O12
( ~( ]8 ?' P# U13
0 v  Y: H# d4 [/ |+ }: z14+ O- u- g9 U  W3 }; E$ m
15
; ^  A" \9 J+ Y
text=""! C8 a7 {7 p) d) u$ H+ T
while 1:
# l3 Y! Z- x# T( l; q6 Q data=raw_input(">>")# {% [0 a+ ^) l) E7 {
if data.strip()=="stop":
, H( ~% R) v  @. Q& y/ l break" O, c$ A6 K4 {: _
text+="%s\n" % data
# A7 v+ I% ]8 ?0 f# Yprint text- Q6 y3 L7 K0 ]5 G  X- |
---------------------------% q9 ~; _% s& q7 [- ^1 {9 C2 G/ B7 ?
>>1
! N, ~5 V1 O3 L# |7 P6 M>>2& s( H  k0 b8 W
>>3* s- o* F- P+ F$ c$ p7 G
>>stop: y8 a/ r4 Y5 m
13 {1 h, q' ]0 W: I
2
% `" u1 _: A$ g3* H' J6 K+ Q; [: ?. O7 Z
同行输出/ S! @6 c7 |3 D7 H* }) B
1
: V; _6 m6 }- Y9 r- n9 j2
* G; E0 x8 l# ^/ V
Print '%s' % a,; L8 h) M: p/ i/ V
Print '%s \r' % a
. _1 j$ Z! E) [$ k
标准输入输出
4 Y, _1 O( Y4 i5 R# }4 Z8 Y
13 R5 F* ?7 s) x
2
, f/ z3 `* Z4 K$ P, @, \
sys.stdout.write("input") 标准输入
- f2 }& }& V5 C+ ~# `sys.stdout.flush() 刷新缓冲区& \" ?5 U2 F. d. X3 r
print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。颜色控制控制台颜色控制(适用于windows)1 J& K: H- i/ v8 E
1
7 f5 h% ~5 `/ p: o0 r$ v: Z" H2
- `# T% u9 i" x3 W3
; N) z3 x: U* U4) @. ]. a& W3 W/ c
WConio.textcolor(WConio.YELLOW)0 G: S: ^, `' ~0 Y. s
print "yellow"% q; M+ @9 j7 @$ s( ^1 U
WConio.textcolor(WConio.BLUE)
2 i' o" _: z, s8 {# _print "blue"  g/ S8 t6 K; N6 d+ P# v! b
输出颜色控制(全平台)8 W  k+ C$ d7 ~, I
1( S! B# E9 G) d2 U) M
23 O1 u5 b1 |9 X6 P3 T0 H
3- c0 A! e: _5 E# ?9 `
41 k9 v( Z" J- o2 D7 ^0 Z& _/ `
5
! v  O1 L/ u2 e9 ~& b; _+ i6( V) P- q1 l1 }; s7 P+ q4 r+ F  K( `
7
+ k6 a( @& z* z. ~: m8 C8& G$ e. R/ y4 `! j' V, Z/ v/ P
red = '\033[1;31m'% R* Q" @2 u0 P* H
green = '\033[1;32m'
4 m" g: ^) v* D3 b; d, o+ D1 {yellow = '\033[1;33m'
, q: S7 e, x  C6 A& w8 O8 Ewhite = '\033[1;37m'
" Q( _) O4 B1 M2 y: S' D8 greset = '\033[0m’
  n; E1 {* v: g$ D! nprint red+"color is red"+reset7 |) b, h: l. B
print green+"color is green"+reset  Q  Q! Q4 q( }# d
进度条控制方案一
7 O0 p" S8 w! X, X8 {3 I7 k% r- D
1
8 g! f% {7 d+ l2 N* C7 `2
/ P% j; ^" ^2 @0 t35 G. G4 S- g% q) r* ]* x
4
" q' b8 G& k! z4 Z* D1 }5
+ o- O) d! \+ _8 W3 M# y$ U( ~6
) J: @4 `! N! Z8 W2 F7
: h1 I' r8 D. x  g8
1 {! C0 y, A* W" V! W
from __future__ import division& Y' s! G3 [& v. ]- t5 I/ d% t! E
import sys,time
: r+ y3 M/ D% @  d2 B+ \2 dj = '#'
. @; s  p+ |7 s3 S0 E/ zfor i in range(1,61):9 D' T! `: R* b9 s6 L
j += '#'
3 b5 |3 g4 `( [0 F6 O/ ] sys.stdout.write(str(int((i/60)*100))+'% ||'+j+'->'+"\r")
5 E  q. f: P. U. K sys.stdout.flush()
# V* M( z6 s& O time.sleep(0.1)
9 m$ B# n0 _6 K; N1 X  V
方案二& k5 F. w' y- p! {% z0 s' b
16 t! j0 l0 d$ {" c9 _4 X
2
/ O5 q1 p' `( _6 B1 a+ o3
6 j, d- L; b3 k5 H5 D4
1 z* [) |$ t/ I5+ y  `% E' i; n. ^# A% @: m
6
& U# K" e* R( J
import sys
! c- v. R% l/ i9 t8 p# x+ oimport time
9 ?1 O$ j4 W/ M7 m) p" v/ e9 T4 E5 nfor i in range(1,61):
, p& k9 `' u: a" I' d sys.stdout.write('#'+'->'+"\b\b")
! J. J6 \; v/ R/ K, O# U4 h sys.stdout.flush()1 q/ S8 Q$ W3 n4 @
time.sleep(0.5)
) Z) Y$ h1 h& G8 f! P
方案三
" F2 u1 Q1 [* S  y' y- o
1
$ n; Z" W4 u: X2
/ u* W3 R; q7 Z/ a3
7 F# ^- Y3 r3 G9 X$ W3 `- h4
" g: }( n: N/ }) Q7 J! [0 U. t; m$ ]# m5) m/ l% b" @; j) z
6& r3 s1 x) f1 z1 f% i
7
$ K) [+ B, B6 A  X0 |8
+ g, Y9 d7 K; G1 y1 {, w9) }0 b, \7 B( u  L& r' o
10; c* r. B/ M- J8 S: [5 S
11* Y4 {, ~+ A1 x# n- \
12
' t* k' w* @+ |2 A7 k13: \2 M; o6 R# M+ @0 ~1 N/ _
14
! K! B7 B0 z: k152 Z1 P6 [, h8 z# w8 q: T
16
. r' r+ q. y: g% O3 h% J' h, j% ~7 C175 L: d- y* ]4 T" v% F9 |
189 B& ]% `/ l0 g: G
19+ j7 q: C) u2 H0 l
20
& n: Q; D6 ^& R( X) M21
0 g7 u- G1 f1 U+ J+ V1 U22' L- M9 e3 r$ \- l& E7 j' [6 T
23
& C( T% g  Q0 P8 G; _# H5 v! M243 @* r) A4 h8 n% o
25" I8 @) c- I3 B, U8 {9 Q
from progressbar import *
! [4 g' [+ K+ P0 iimport time4 v4 ^3 U' y& B* b
import os
3 A- n2 H+ V- S+ x) V& K! trows, columns = os.popen('stty size', 'r').read().split() #获取控制台size
- z% a2 r% T+ ~- X  m! }; v5 uconsole_width=int(columns)
2 }% ^. @8 R% k. E( S" ]total = 10
0 [, U. M& T8 n) Gprogress = ProgressBar()
  @9 V9 D4 R6 V# ?& I& Vdef test():
/ q6 X5 b, h1 E5 Q% n) k '''
9 y$ i7 t2 o8 `% V 进度条函数,记录进度
0 Q# b& t3 u' y$ K7 A '''$ Z% U( s) ~: f" {
for i in progress(range(total)):; o2 a1 r$ B! c
test2()" ?8 o6 \2 k7 o* b: r% s5 G
def test2():
2 d0 l, V1 j' _ '''4 Q3 |* C" T4 J! ~$ X$ O
执行函数,输出结果8 {+ g0 J% W, Q5 e
''', T1 m; G; Q6 Z  f6 D+ b9 `
content="nMask'Blog is http://thief.one"' M0 A$ c" [: ^$ A& k& E& B- N( ]9 V3 x0 i
sys.stdout.write("\r"+content+" "*(console_width-len(content)))6 R- |: \! p4 w! s4 J# Q3 y
time.sleep(1)8 b: l; R4 e$ W  w% N
sys.stdout.flush()" c+ A0 j, s+ }
test()- h) P$ w7 _6 J5 _
更多高级用法可以使用progressbar模块。系统操作系统信息获取python安装路径8 Q+ T5 S0 r4 Y8 l
1
9 u( F, W8 m0 f2
1 W  `4 R3 {4 L, g2 H
from distutils.sysconfig import get_python_lib
& |2 t8 O+ u7 ]5 ^7 O) m- l" Kprint get_python_lib
4 y8 B5 R. w5 Y$ o* V
获取当前时间' B; j: l3 N- `
1
* i# B2 ?# Z2 b  s2+ F# [* k# [+ L" \, m$ h! _
30 a/ d7 h; v# L1 ^, x  E" a* _% }" j
4
  K# J: ]- X! K) Y3 W& s) X' }0 ^
c=time.ctime()
6 \7 {7 T* J2 \#自定义格式输出
% `$ F+ @' h2 b* rISOTIMEFORMAT=’%Y-%m-%d %X’
' d& j5 j" }  V) E- X! ltime.strftime( ISOTIMEFORMAT, time.localtime() )
% H: D9 [  c  o6 ~
查看系统环境变量
- O+ T) A6 a5 g4 B: j- [$ j- K) i
1
* Z1 K( M" d$ t# c+ c
os.environ["PATH"]
# C$ D# J# l5 t
获取系统磁盘
0 }- {( e. {  Q$ S
1
' c& ]( ^2 h# U9 @0 m7 Q
os.popen("wmic VOLUME GET Name")
  }, J9 `. t2 z# q
获取当前路径(包括当前py文件名)
! B9 P4 K$ l! F% L
1
# f& J! e( `0 b
os.path.realpath(__file__)
+ ]: ^+ f+ j, e) B
当前平台使用的行终止符
& U- @# r0 j; Q. F. ?
1
& n) T+ V0 P7 N8 o8 G. o
os.linesep1 o6 f. R  A3 _5 j, q$ |! f; T6 \
获取终端大小
1 h8 O9 m% e- _1 q+ \% A* G0 a
11 ~8 u" ]) x0 X1 ]* J
2. |2 B! i& g  i1 c9 l  y. |$ n
3
/ D' m: X; e8 T
rows, columns = os.popen('stty size', 'r').read().split()4 c: ]/ Y3 l; {. ]8 T4 F+ I# M  L
#python3以后存在可以使用os
+ l4 _: e6 _, h) L7 [/ o1 f0 jos.get_termial_size()& r, B7 K3 E7 |% O: B
退出程序
5 w. ~0 e( }/ w  s

    6 I2 t) }# \! O5 _% o8 D
  • return:返回函数的值,并退出函数。7 P' g. Y9 w6 w; G$ ?% s) ?
  • exit():直接退出。
    # @: x' V, o7 Q' K
  • sys.exit(): 引发一个SystemExit异常,若没有捕获错误,则python程序直接退出;捕获异常后,可以做一些额外的清理工作。
    , s+ l% j0 K0 c' F+ b: }2 t1 f
  • sys.exit(0):为正常退出,其他(1-127)为不正常,可抛异常事情供捕获。(一般用于主线程中退出程序)
    3 Z* w4 `) M, q  j( I- ]7 A' a' ^
  • os._exit(0): 直接退出python程序,其后的代码也不会执行。(一般用于线程中退出程序)
    . j. c) u1 r4 P6 y) c6 C
网络操作域名解析为ip1 v$ y! T6 _6 u
10 K/ ^% V4 G& Q, ~
ip= socket.getaddrinfo(domain,'http')[0][4][0]; \+ x" f- R  a
获取服务器版本信息
6 z" z% [5 G6 {5 ?  k9 i: y$ n! R, F
1, d+ p6 J: E9 @& J
2
* [3 f; L( w4 m, ?+ E3, `. K& Z. n" S3 t
sUrl = 'http://www.163.com'
" `; K( w3 r% m# Dsock = urllib2.urlopen(sUrl)0 O& X$ Q3 X( f+ |% F; C) L
sock.headers.values()
% J( w3 B  j/ R& |
文件操作输出一个目录下所有文件名称9 e# O  [, K( t7 X4 U2 X3 Z7 X
1
' f. r( ?. S9 i3 M2/ c. N$ F+ v% x6 \' c; }& t- e
37 O( u+ U. @* j/ t  |
4) |0 j9 F* B9 E- V2 s; e, r3 R
5
: F( R# L5 M2 R$ F: R6
, O0 F( Z5 M1 U, ^# A% D3 ~1 b8 d7
8 E# y/ d3 J, X( i8 d* i3 Z8+ F/ C) p; W* H- D. D  X' t
def search(paths):! g( [$ r9 g4 [. S; x! {( G
if os.path.isdir(paths): #如果是目录$ W5 G( z+ c5 D5 ~5 J
files=os.listdir(paths) #列出目录中所有的文件* ?" o7 f- d0 p" D, a
for i in files:
; r( b5 l; C% d i=os.path.join(paths,i) #构造文件路径
1 X/ p- b  H# w search(i) #递归9 f0 d) R3 s3 X! O
elif os.path.isfile(paths): #如果是文件
% h2 [: e2 y- N6 J print paths #输出文件名
+ E/ I6 q& o6 a0 |$ R
文件查找% ^9 l; b- s' f
1
6 s3 `: O( X, R5 N( Q$ \/ O$ t2
5 X" `) o% @. X  Y; E  V1 z$ [. t  i3
% Y' E" O4 g7 t; ^. v2 ]45 g9 n/ S- @, I( R: c
5
5 a% |7 E4 G5 Y% S6
; m# Z1 h, n0 P
import glob8 |! i2 J' f7 c/ o
print glob.glob(r"E:/*.txt") #返回的是一个列表, d+ U2 H1 R# S% t8 d6 _+ k
查找文件只用到三个匹配符:”*”, “?”, “[]“
$ ?) L$ p& r4 C2 G”*”匹配0个或多个字符;
7 E0 x3 B/ b  B1 i" p”?”匹配单个字符;7 J; t: t1 k0 s" ?) C" i
”[]“匹配指定范围内的字符,如:[0-9]匹配数字。$ a; B* c- S' U  m% E7 V+ T; j
查找指定名称的文件夹的路径
- Y% Z# q2 \4 S" k2 [
1* ]- U- P1 `7 ~/ a: a' b" A
2
: s- N- k& a0 _. D- o5 `* Y+ p" E3- v8 z; d$ j$ m' L
44 h+ f" I  s5 A" {7 {
5/ j. r% \, g2 Z. g+ r
6
7 ?2 }. ^8 ?5 z/ ]7: U6 M9 d: O4 P; ]
89 a5 {0 b( }& O; i! Y) t/ [
9
. k& K& G7 g6 R8 l3 B0 v10, {" Q' l4 G; N, _5 O
11
2 z# H2 ]7 I8 P: D12
. d/ m& b* r/ ~, F" W139 Q# {, y+ x) @$ w- i2 f
143 N. V" ?( I, a
15
  N5 z, m8 f$ x& }1 r16- @% W9 l3 i3 N- X1 \
17
2 a% R: q1 M# y4 c, O. j
def search(paths,file_name,tag,lists):
- v$ V9 v2 \8 \' M: m if os.path.isdir(paths): #如果是目录+ V( o' m& f  f3 `
if file_name==tag: #如果目录名称为tag
3 j2 A3 @# V" A8 q$ \' Z3 ?+ Z lists.append(paths) #将该路径添加到列表中
- h" d8 Q4 t  d& Y: P6 l8 [# ] else: #如果目录名称不为tag
6 x+ e4 q1 \9 u  |; @' n try:8 ~: C1 h( o7 t# r; }# R
files_list=os.listdir(paths) #列出目录中所有的文件. C, W! L" d9 O3 N/ |  }" o7 E
for file_name in files_list:
2 S  {8 m1 L& }# K' k( J) { path_new=os.path.join(paths,file_name) #构造文件路径& A; N& |" d. Z; t3 p% j0 a
search(path_new,file_name,tag,lists) #递归
; F% d! B! D! t. V7 } except: #遇到特殊目录名时会报错* B3 i4 i8 [! B
pass
* s# Z8 x4 ^( a1 p* @- b- k! e9 H elif os.path.isfile(paths): #如果是文件
: f& n* }$ Z0 C pass
1 ~% g/ c" t& P return lists
8 s4 U/ @# T6 M/ L) k
数据操作判断数据类型- |: N# Y7 i5 L* ^+ Y
1) C8 W$ v7 a# O0 O
isinstance("123",(int,long,float,complex)- b- o: s" |6 T& T- }
字符串(string)去掉小数点后面的数字
- a/ F+ q( P' ~/ Q# j' G
1# C* ]  _+ d: h& _( l, o
2; H/ S. `; j' L
a=1.21311
- r8 m- w4 x+ [' m* kb=Int(math.floor(a))# ^4 N$ i4 C9 `/ ]5 `
字符串倒置. m: U2 G! \. V
1
; }  a: M& Z, m* `9 v( r5 E1 s2
6 U8 Z/ A. |" R: ?6 J5 c
>>> a = "codementor"
+ t7 Y. _$ S$ k* O* F>>> a[::-1]9 `4 ^9 r7 {9 _! V* t( O
字符串首字母变大写' Z, W& F  s/ ^, W9 p! i
1
  D; m# d7 Q" B7 h& f, F* [29 t0 r* M' _$ ~" \5 t
3
- Z! C$ I" C  o5 d* Z
info = 'ssfef'
! O1 g. A: P2 `/ H0 u' a) @print info.capitalize()7 C# s5 l: V) A" o" b
print info.title()3 w, v; l; H% e. O3 `8 h2 m; d
返回一个字符串居中,并使用空格填充至长度width的新字符串。0 E7 z* N# U5 q4 _; ~
1
5 F  q' h5 r* s+ {" u; w( P
"center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。( m3 a8 G7 O. N" U( E+ @
列举所有字母
  C( o# S$ t# R# B% F
1
' B' \! C" n4 Z# o2
/ Q8 u& y) N5 `& A; W6 ], l3
! }" V$ u9 Z& B9 [$ t
print string.ascii_uppercase 所有大写字母
) I  Y* x# K  ?& ~! ~) x# Aprint string. ascii_lowercase 所有小写字母
4 g5 J, e; ~' j( n5 m, xprint string.ascii_letters 所有字母(包括大小写)8 i* l; T/ U( Q1 j/ j
列表(list)列表去重
/ G( b( G2 j2 a; T
1
) U: \7 A* `+ E: O1 v# D( n2
  M' y. m4 w( V9 |
ids = [1,4,3,3,4,2,3,4,5,6,1]
7 m# s7 S- R& q, D& Hids = list(set(ids))5 ?6 {1 [! R, P, s
列表运算, A7 g8 Z9 a0 _2 R1 `7 m% C0 y7 o
1
) R, d1 d% i3 D! r1 v26 d' `5 Q3 I+ C9 ?1 {0 O
3
* c8 @6 ^$ ?2 w6 e4. k7 A. Z+ `+ r1 P. x! e
55 [1 s- c3 R- u. X( l. @. U
a=[1,2,3]
5 ^, ]+ h# g6 H- A. ]b=[3,4,5]
1 U* b! U( v0 C) E2 X' Uset(a)&set(b) 与" z4 @' x: P' Y# r6 V9 x
set(a)|set(b) 或2 q# l) [, z% z' U5 p
set(a)-set(b) 非
( [8 v- a- H, ]) y1 J  F  s
单列表元素相加
( Y/ ]+ P/ m4 \# {
1/ z& k" ~; I4 Q
2
- J, H" `$ V# T4 x3
9 X/ y/ n2 X" ]/ r. g( B
a = ["Code", "mentor", "Python", "Developer"]
/ E; E4 ]8 l* ]( H# y>>> print " ".join(a)
5 j2 F7 i% G3 Y# x3 GCode mentor Python Developer+ s. ]5 K' P$ j; P4 {4 a
多列表元素分别相加* D. {6 k9 d+ E$ Y$ `
1. E8 h1 B; @8 d  m
23 L# `* k4 J1 x5 a3 L% Q
30 j; a8 T  S2 e. s+ \6 n# B
4- O0 k5 j$ x- n% }
5
8 g4 H% _- X; J3 ]2 V66 Z1 ~0 o( H6 Z) s  k$ K
7
% s, x0 f* h( F8 d% v1 `% P6 e8
% X9 X0 P- S$ z8 X! ?  x! l
list1 = ['a', 'b', 'c', 'd']
/ m* m8 t8 W6 H- r( Plist2 = ['p', 'q', 'r', 's']
: X2 w# D, V* d) B% L: S>>> for x, y in zip(list1,list2): ! T* `  A3 Z. E! d; V4 q% U8 I5 \
print x, y
& v& u3 A! |( G$ W6 Nap8 z- W, B+ o& o0 P! D1 b
bq# O6 G7 e  d. G2 R) ?
cr
! N$ I' u* X' o4 u! kds
7 X6 s' b6 S7 @( ^4 P( v
将嵌套列表转换成单一列表8 F+ H+ _( c& P
1
, S4 M' q- a( j  z; X2
3 [! J, o1 n& }4 y3
0 H; T9 o: p& V* [4
/ t" Y9 {( R- ?2 U8 \1 O, l% Y; ]" z
a = [[1, 2], [3, 4], [5, 6]]
( x( c+ y- }$ q+ l  ]: x>>> import itertools: z0 W. q1 I. ]0 x, N/ o& L+ `/ O
>>> list(itertools.chain.from_iterable(a))9 n! C; {! _* h9 u6 W* G4 Z5 U
[1, 2, 3, 4, 5, 6]- I. b+ c7 x: Q/ n3 R
列表内元素相加
* `4 ^8 c% a# }/ K# I
1  C7 ~! }2 H5 F8 i- E8 N: P
25 _$ p9 G$ B1 u4 m
a=[1,2,3](数字). P* H0 j) R7 A
sum(a), d4 r& ]! `  T; Q2 ^
产生a-z的字符串列表3 {0 a) N1 _- P# x0 j) [
1  N! O/ y" y% F" z; k4 P# Z' B$ ^2 r( {
map(chr,range(97,123))
) w2 C4 A' b+ O) q, G0 X
列表复制6 J9 X6 G! m% i1 ?: S) v
1& u4 `7 a4 B8 _
2  ^- P. d0 y$ n
3
. _6 ^/ Y4 d3 }" @* ?7 x
a=[1,2,3]
) \5 a. V; M' l1 X+ L% Bb=a1 j+ _  p! S- ~" K, |8 B) m+ F& K
当对b进行操作时,会影响a的内容,因为共用一个内存指针,b=a[:] 这样就是单独复制一份了。
* a! q2 t/ @7 m
列表解析if+else配合列表解析
. N, ?1 Y! H! H  f) X  G; z6 [
13 U8 h" q8 }$ @) |. o' J& j
[i if i >5 else -i for i in range(10)]
8 }# c$ Z! u+ U8 j1 m; L
字典操作(dict)筛选出值重复的key
. R8 L  w5 X1 u* g' c
1
" O2 ?) w' j4 R' y& y/ r+ ?2" T* O3 G- G) x7 c) z* o
3
6 p$ m: @6 l0 Z2 G! m9 J8 z41 M4 ^( o8 `# Q, \. z
50 `5 O" s. v1 c' C
6
) k  G4 H6 g  G7 C0 }
list1=self.dict_ip.items() 5 W5 D! E4 e% L+ x2 y
ddict=defaultdict(list)  V* N' \; ?) ^$ t4 ]* c
for k,v in list1:
% G0 M4 y( N6 ?* B& d ddict[v].append(k)2 {: @: c- k* P& `2 k
list2=[(i,ddict) for i in ddict if len(ddict)>1]6 N$ h2 P: W2 V8 l  l  k: l
dict_ns=dict(list2)' ^/ V% c& j: ~4 D6 x7 ^# O* t
字典排序(py2)  V- {( K9 Y' ~! m
1
% h' _8 R$ u! \: V2, Z0 j4 ^9 |+ y2 F" M
file_dict={"a":1,"b":2,"c":3}. E' V' u; o5 j1 t
file_dict_new=sorted(file_dict.iteritems(), key=operator.itemgetter(1),reverse=True) ##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,为0表示按key排序。
: p/ F  r, j" P) o
模块操作导入模块时,设置只允许导入的属性或者方法。& h; {- s% W1 Q" _5 |  ]+ E# `
1
8 ~# K, I) ?, H8 B2 t3 B2
8 @. o* g% i7 ^3 X/ `3
7 F* M, w& d1 C  k* i6 p4  N* Z  V" o* z; u7 _7 e5 A8 f$ @, n
5
0 }% n) f1 F8 ~* Z6
! H& R8 Z  s% ]* ~: T7
! n9 v; r  V7 ~% o; k8 {) T8
' ^/ Y) c/ f: M& {7 }. X% [3 X9
  D6 \6 Y% f# A$ h10
" @0 o; r  ]8 n4 k& a/ X% Z
fb.py:
8 r+ f1 ^* T7 C& E' K. c  N-----------------------
1 B8 F5 M8 R6 M- O/ F! }__all__=["a","b"]* T) M$ q2 ]! m3 o
a="123") \) A3 y" [% |/ H+ W5 o
c="2345"5 O: E* R) F6 G" C: ?2 M
def b():, r& X, z8 s# T& w5 I
print “123”
; K' ]9 c' U6 a" e( \% _-----------------------" w: ^* u" u+ W/ `. h2 ~! z8 q
from fb import *
8 J, L. u+ P8 L- Q8 {可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。4 z1 Q) d7 Z3 R3 x: w
导入上级目录下的包3 u. J6 d& N, L7 h' [* z
1
) |0 R: ]3 `( S  y2
1 O+ z. [( Z7 {; Y
sys.path.append("..")
; K/ X( L/ Y! tfrom spider.spider_ import spider_
7 _4 M  `  J" C; U" e' e) P4 g
导入外部目录下的模块
0 N) d( Y) K9 H- N+ F6 A
1
, }8 W' p6 i3 Y. {! C/ y
需要在目标目录下创建__init__.py文件,内容随便。
' s# e" s) @# X' M6 h0 d
增加模块属性
  T8 A- G. e  C. S
10 i! n" \. N& S
2- Z# |4 s1 h, J5 V# \1 d3 [) R
35 I1 W; ?- g9 h& K
47 q6 w" L3 w3 y( s) @
有时候源代码中,我们需要写上自己的名字以及版本介绍信息,可以用__name__的方式定义。6 Q1 y* Q9 h; s$ Q7 f
a.py:
. \  |6 F6 P9 s& Y6 r& }#! -*- coding:utf-8 -*-
6 R! u, M% T* g$ e/ s__author__="nMask"
; N( h" ?2 t& D9 C" {* ?0 W- k+ @1 p5 j
然后当我们导入a这个模块的时候,可以输出dir(a)看看
  ?/ V! O2 _8 O+ C2 j! \
1
/ Y. R" D& \. A2# p+ H- g# |# N8 }
3& u, ^2 ]5 f7 D# X; f
4+ b- g4 I8 {) @. G$ q8 {/ E+ h
5
  L" ?; L$ M% \2 I# U4 {: @
>>> import p
. s. V$ Y1 c4 j* ]% t7 u>>> print dir(p)# n) h" r! ^* S% I2 i# w
['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__'], A9 _/ U6 j' {% T$ P) A5 k
>>> print p.__author__
) G6 O9 `* W5 ?1 mnmask, a/ T( [+ C1 Z# U/ l* b) P
动态加载一个目录下的所有模块+ l2 v: B' H! ~: T$ B& ?
1! h  c- i8 n  v- [1 ^  l& O
2
  {' D  @, R5 k& L1 n5 a3
( B6 H9 P" e& t3 n) G4
/ m8 b  ^( \  [  R6 ?# I. a  O5. M! @/ a5 c1 G. _$ Y
68 {" o, C9 @* Q  g8 W8 y- S8 L" w
7
1 f- [) [5 x& l8
6 J* P& S0 S& V4 Q. d+ x# z! t9. O; u: n/ t9 j9 h( M. ]+ x5 O3 k: _
10
. _  @) V8 m# T% }$ s) R* i11( s/ @& D: s9 v- G! ?" f& I6 Q
目录:# V" R+ D( v/ l
---test# d/ _' l) u2 b  C+ \+ Z6 N
----a.py
: T( L" N% g( a( k+ L ----b.py7 n* i4 Y( J  U0 G
---c.py' j5 s, T! ?/ D/ a. C
c.py导入test下面的所有模块:( R& P' M  @3 I) \+ @- ]. S% C$ F
for path in ["test"]:( r8 v' S2 F5 o, D) ]
for i in list(set([os.path.splitext(i)[0] for i in os.listdir("./"+path)])):
# C. u: ]3 L1 l if i!="__init__" and i!=".DS_Store": ##排除不必要的文件1 D- K# y' ]0 l
import_string = "import path+"."+i+"; U1 F' W! X( u: ]% ^; r" F, d* j
exec import_string #执行字符串中的内容; Y0 D6 h, i. K1 d/ ]$ R+ \6 l
函数操作装饰器函数输出当前时间装饰器
8 I% o/ C8 g% ]3 r  G
18 T" T: }6 }2 K) h8 J/ ]
2
( E8 k( p2 X: g& E. }7 V4 v37 @* \( o" B1 }# U
4( t9 \5 V" l( z9 o* X3 M0 ]2 q) h# Q
5" ]% @! z* k) L  O
def current_time(aclass):1 J+ v- i8 e: [8 q  T
def wrapper():8 E: Z  u" }6 a; W
print "[Info]NowTimeis:",time.ctime()3 G5 V' K0 K0 h# b: C9 Q
return aclass()
' _" K  w: [6 D. K% H  ] return wrapper* z% w3 }. J6 L) r2 D' I8 U
itertools迭代器
+ V% a% X7 }. S7 {5 |, O& t
1
; U, X' n* `# A7 H2# {* J. j5 |( i* [" V8 B
3+ w* t9 @# [7 [& \2 ?4 u8 k
p=product(["a","b","c","d"],repeat=2)9 R6 t4 F; t1 U6 k/ Y
----3 {" P* Y  l3 t6 ~& Q! c8 `$ F
[("a","a"),("b","b")......]
: G$ Y" |5 ^1 U  y4 V' s. K$ @- k6 j
reduce函数函数本次执行的结果传递给下一次。* j& r; d6 _! ~# R/ f
1/ _. Y& C4 F: [7 z9 Z
2$ i$ i( ~; }. Y/ }
3
; K+ v: r8 ~7 z. q5 S4
2 h! p4 q: A- o3 L  a/ L" r/ I
def test(a,b):6 q( ^' F" k, F5 m
return a+b
% r+ g! l; g6 A* J* @% |6 ~reduce(test,range(10))
6 `$ ]8 J7 r% ]; i# l8 q结果:从0+1+2......+9$ x6 S, u' N/ y! n& @  r

- L. H6 C, q# }2 j7 G如果喜欢,大家可以收藏哦,你们的支持是对我更新最大的动力!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

精彩评论19

fabao 发表于 2017-12-31 08:34:59 | 显示全部楼层
好尴尬,没人看嘛?
回复

使用道具 举报

cck123 发表于 2017-12-31 08:38:55 | 显示全部楼层
货太干了,值得收藏
回复

使用道具 举报

assdsss 发表于 2017-12-31 08:41:46 | 显示全部楼层
不错不错,高级技能!
回复

使用道具 举报

oLjwRgTm 发表于 2017-12-31 08:44:50 | 显示全部楼层
毕竟能静下心来好好学习的人真是不多
回复

使用道具 举报

ASUKI 发表于 2017-12-31 08:48:35 | 显示全部楼层
这是写控制台的语句吗
回复

使用道具 举报

bigocean 发表于 2017-12-31 08:51:42 | 显示全部楼层
写得不错!
回复

使用道具 举报

qXwqtnuK 发表于 2017-12-31 08:54:38 | 显示全部楼层
小编加油    是不是怀疑没过审核
回复

使用道具 举报

vsCnfaOT 发表于 2017-12-31 08:58:32 | 显示全部楼层
内容很老了,也谈不上奇巧,都是手册上内容。递归查找文件那个直接用os.walk或os.path.walk要省事多了。
回复

使用道具 举报

6363 发表于 2017-12-31 09:02:14 | 显示全部楼层
奇淫技巧吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
推荐阅读更多+
阅读排行更多+
用心服务创业者
0851-88611148
周一至周五 9:00-18:00
意见反馈:admin@0851life.com

扫一扫关注我们

Powered by 童码少儿编程 X3.4© 2001-2013 0851life Inc.|网站地图