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

[复制链接]
nitenite 发表于 2017-12-31 08:34:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python1 B  f$ S, a* d( J0 J7 t% q: A2 x

; [& @4 I- T, t* a; z对于python,我给大家总结了以下几点:5 ~- u* d' W* u
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
7 h  z9 c( O1 F0 CPython 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。6 y# i) M5 b) H5 ~4 k* Q2 p5 E
$ J! T5 @+ }  D  a4 S
    & [; w3 t0 a3 j0 i( ^7 G
  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
    4 o$ i2 R# F; d; C# i6 t
  • Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。
    " M+ Y) }3 L: W1 n% |
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
    - C: ?: F5 o8 V; G4 U' e4 G
  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。, \- A/ Y- F: O/ B
在这里,我给大家就分享一个关于Python的奇技淫巧吧!1 u( a" ?& _2 U4 L( F
控制台操作控制台不闪退
6 B5 @, Y" b! _
1
- ~* y, h8 u8 a2 ?
os.system('pause')% c7 i+ i: }! U2 S7 s+ M; L. |
获取控制台大小
6 }! M. Y: N. z( K# M! G. k
1. o# K/ |1 Y. a- o& \
rows, columns = os.popen('stty size', 'r').read().split()+ k1 J, a& ?6 j2 b# y$ F4 h
输入输出控制解决输入提示中文乱码问题
) y: j) w8 b! V! @
10 D$ T( e, M1 d% ?$ I
raw_input(unicode('请输入文字','utf-8').encode('gbk'))" l) }. x" l' e' Z# m' @
格式化输出
  O: C5 d, h2 b0 ~" |- {/ W4 w
1
3 |9 }; _9 K8 H. F
print a.prettify(): H; {0 L# Z6 p" i: K( r6 {2 L; b$ @
接受多行输入
" C6 N! R  l) d
1. N/ q7 M8 K- s: s8 a0 _9 r/ {
2
* i2 Z4 d0 v" v+ v( W( [3
$ Q+ w1 `3 Z- z/ F/ [4
  A* Z7 L0 b" c7 M* }. F6 v+ q5
% O% e: e5 k5 W! }3 e6
( t5 c: G9 U8 m3 D- L75 R$ f+ T$ ?- _7 ~% S7 Z% X
8
5 c6 a4 L. \* K5 [6 H8 r9& j# L* T5 J9 k/ ~0 K" W5 ^
105 X# N2 v1 Z9 M/ C( n" E
11; O/ Y; T7 X2 m( c# _' w% ]
12. @$ b  n7 N# v. @0 P; o" a* U; T  O
13
3 Z' w4 C) b0 L) l1 @4 w( X/ B* [145 f) u% B4 W: a+ ?  P' D2 U
15
, z( i6 E9 N6 m) M; J  V
text=""
" Y7 Z# d7 N, T9 cwhile 1:- B' X2 q0 g( _( k+ ~
data=raw_input(">>")9 s% m) K1 h" L; Y
if data.strip()=="stop":
& S  ^7 T* E/ B0 C" \ break0 V& ]5 W- c1 @0 o, u" M/ V8 o
text+="%s\n" % data
/ v0 }2 X/ r3 ]: o! `2 ?print text8 z7 a2 J! v, o% X9 B
---------------------------
8 ], H0 ~) v: z( J  \/ A, W+ \>>1
" x4 X. f( H- ^; Y; ^>>2; h4 N- z" D9 [, p8 {) s0 s, ^9 k$ B
>>3
' V, y: G" c. Q" J4 r/ @4 X& I2 B( H>>stop) O8 Y: b& V) d! w' c# }
1
" j2 y3 t# N$ k; D; [/ S  D5 ^20 P8 c$ J2 t% b
3, b: D* k& M; |( [) w! y) i! `
同行输出
* D! v4 A  i, O
13 h6 M5 P7 u& p- `" d
2- l8 Y2 P/ l  f( A1 B
Print '%s' % a,
4 V: o3 x" `+ G& O" u7 kPrint '%s \r' % a
( L$ J5 E) ?5 j  R
标准输入输出
1 X6 `. E1 A. U& q$ `2 _! Z, _
1
) h/ \2 w. r7 q% h0 `& ~& t) l23 @+ P2 m2 @8 O1 [+ F% a( i9 `
sys.stdout.write("input") 标准输入) \( x+ E+ f/ x+ u) ?
sys.stdout.flush() 刷新缓冲区! W6 w1 \+ o! P0 A) x% x
print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。颜色控制控制台颜色控制(适用于windows)" d2 T: x$ Z" k1 t1 E& A! L
1! a; D" f8 n% \6 W: _) _
2, o" x0 ^  j9 a5 |
37 s6 ^4 ]3 l/ s; N" `+ y
4) _$ z$ r) {6 R3 c4 l. V1 V) ^
WConio.textcolor(WConio.YELLOW)
- A, s  G: e6 t: Mprint "yellow"
) ~4 }: R4 B/ nWConio.textcolor(WConio.BLUE)
* ]6 A) I: z# k; H3 Bprint "blue"& e  p# [2 |" b
输出颜色控制(全平台)$ ^* s3 |& o8 W4 Y* Q
15 Z" z7 G1 x& |
2- c4 Y6 l: r' r; y
3/ ~8 |! X0 T& T5 L7 T2 |
4! I$ A) i) `( W' p- D
5' Z' J+ A1 o! S  B& v. t
6
" [; b/ F; T2 R7 l4 A7# X6 N5 U6 ]( x# Y
8
9 V( @0 ^, S5 j. u
red = '\033[1;31m'9 t: n. n+ l4 Q# Z  ], W! l
green = '\033[1;32m'
' I% [/ a# [$ X9 D8 ryellow = '\033[1;33m'
5 H% j! t8 g3 Pwhite = '\033[1;37m'$ `" q- e& Q9 m, a- K, U
reset = '\033[0m’" U7 s: O% I7 N( p' D9 t; E0 d- L% A
print red+"color is red"+reset  X: q, h% N3 P( d, D
print green+"color is green"+reset
- F: a) i% H  `" E/ B
进度条控制方案一
- j1 W; u, H5 }5 m1 b" }
1
6 }7 k% L4 V* S; C- N& J  d2# @1 u- x+ _3 O' k1 o7 [
3
- F% ]3 X! z% e4 A6 ?" Z46 @) b$ {. R7 T! Q) [! h9 B  W
5
0 C# N4 ?+ N: u/ Q7 a' {6
9 w! b. R' M6 B( o, g- h' [3 T73 Q. H8 o* a% e$ g/ j
8; {1 {; u3 |% g6 O% P7 {% T) j
from __future__ import division
; N; v' Q6 x" C( P/ Rimport sys,time
" L4 M5 ^" [( ~: L" d* Qj = '#'
0 p1 b! `+ F' O; q1 Z( r$ T) bfor i in range(1,61):
6 l! {/ Z, w) T! d9 c+ j0 H j += '#'1 _: b( y: X2 b$ p+ A# r% S
sys.stdout.write(str(int((i/60)*100))+'% ||'+j+'->'+"\r")% |+ j3 s/ J& V: f. [" Q; G
sys.stdout.flush()
% G" w3 ?8 e" G4 z# q; ^) P; d time.sleep(0.1)- [  l, {: d/ o( x" V3 J7 ]1 X; d
方案二- b6 {0 c) {. I) J6 d9 {
1; k) T0 F" Q# S- E
2( S& E8 }5 W* k2 O7 g% Q
3
- C' H1 f1 @8 `4
8 u7 G; b+ z2 W52 P# ^" V7 q9 v. g
6
. v: }( _9 y' ~, w) }. d
import sys
4 M6 v) C$ @2 t2 P! _: C5 uimport time$ J+ s/ [: w, S. O8 ~, H( b
for i in range(1,61):
  `" [: }! ?* T: Z) S sys.stdout.write('#'+'->'+"\b\b")
2 S2 \7 T* j0 W$ `: T sys.stdout.flush()
3 E! V$ T$ q  j, a7 f1 X time.sleep(0.5)# ^6 o7 h9 D2 I9 w' O: w) E
方案三5 H+ i  h/ K; _" H+ @1 m
1
3 `, g$ F9 o, m2 b2
. I' W) T/ ]& T3+ t2 y7 {' D; p2 A
4
7 s, `( C& S/ b* H4 O5 s5
8 ?- x% B1 {& o) w6& g8 X" q+ ]8 o* F7 ~
7
8 |( C2 b; \+ j: G8; ?9 {6 z/ W1 O1 W( A
99 H+ e% u% x# h2 O
10
0 m+ c, }' L: B  s" \2 ^1 z. A11( O% s8 t: a7 ]; ~
12
/ ]$ f' h; _' l2 p6 I$ m13+ p; n2 Z  M( _$ n) B6 f! }8 G! X
149 W. x7 j6 O% |- \
15
) C. z% s' T0 d% G# m& O16: {2 ^1 p6 e& A* Q0 \) q8 L
17: }5 F9 f. k2 B7 j: V) y
18$ z  Q+ b& g( \+ w0 A7 ?, R, U5 R
199 E$ h9 _3 F3 O. K( C8 V
20
* W, e+ H0 l$ R  z21
/ X# I) z" K; E2 f: a8 z5 W' k( }22+ b7 _7 V- z6 @; L0 g' X* |# x
23! y. z( T' C4 u$ S: Y  X( o8 m
247 m5 ^/ [; ]: Z. w/ Q
251 G. x: X( v" X0 c$ p4 N. F
from progressbar import *
. F" N2 ]! q, B0 {9 vimport time
* i/ j$ u; k( }: Jimport os% z: u6 F9 I$ W- R0 q/ I( x
rows, columns = os.popen('stty size', 'r').read().split() #获取控制台size % L: @: q8 X* h0 k
console_width=int(columns), O# d. j. Q6 g2 a
total = 10
1 F- D8 }  v6 U( {progress = ProgressBar()
4 A( {( z! m- L7 Z: Tdef test():* T& M+ ]2 V9 T* ~* Q- S
'''
+ J. ?/ l  q' k  c" B' O( K3 z; u 进度条函数,记录进度" b! J1 `$ w+ D$ h8 |6 l
'''
  m5 }# g' ^  ?, C for i in progress(range(total)):* Y7 d5 t! V8 n, o' E* l9 {/ C& R: z# d
test2()0 a# A* {) z) b! {  {/ ]
def test2():9 q( o& R# {, M0 s5 S
'''
: Q9 |: I8 w) Q, J9 H9 h7 } 执行函数,输出结果- v/ M6 ~+ s/ j! A( r
'''7 ~0 w* i+ R5 {. G! J6 J: B
content="nMask'Blog is http://thief.one"
7 f# d) l3 t+ ~* O1 n6 s4 B0 T sys.stdout.write("\r"+content+" "*(console_width-len(content)))
/ |* H: j4 v; W3 r# a$ r3 _* K6 L time.sleep(1)1 |2 X6 x: I9 x7 F" N( D2 P
sys.stdout.flush()7 u- k9 A, J; Y7 I, A. Y
test()- Y+ y7 L. N1 ^
更多高级用法可以使用progressbar模块。系统操作系统信息获取python安装路径% k% x5 ^* ^7 G! \
19 @1 p9 S# q, Q0 ^9 D& p  N1 v
2
* J2 [' Y/ ^$ Q! r8 S
from distutils.sysconfig import get_python_lib! `8 G6 p7 `1 |& T+ f% f
print get_python_lib* `/ \6 X$ t6 ~- ~
获取当前时间
+ w  Z* }0 ~5 k4 k7 [+ |
1
4 X8 E6 t) _1 z, P; |4 U2 H# D2
( A3 `& Y* q# W9 E7 y9 }: E3
# l4 z9 R( ^' ]* n4$ q# k, b- b' \$ m& m
c=time.ctime()
# @3 r7 O' J  v/ n1 d( i" i0 x#自定义格式输出+ Y6 E) S$ X6 g& O
ISOTIMEFORMAT=’%Y-%m-%d %X’5 T5 T7 K% e$ }
time.strftime( ISOTIMEFORMAT, time.localtime() )
# E8 w: k$ k1 W% e4 c
查看系统环境变量3 @. _8 C1 {1 m9 I9 l" f& `
1" k8 |/ u( q: y
os.environ["PATH"]
2 C* R: @" h. f1 E9 _% S, D, e3 e
获取系统磁盘
) v/ ^1 z& X0 k1 V
1
# {. h0 Q) |  |; t1 ]
os.popen("wmic VOLUME GET Name")* \  e2 L- c( q) w% P) P7 `
获取当前路径(包括当前py文件名)+ ]3 R$ x% _5 D( ~( [* R$ V  M4 p
1
; ]$ N5 m, F$ X9 o# ?/ v
os.path.realpath(__file__)/ z0 r4 A* w- i' }% s# L
当前平台使用的行终止符
, p2 |4 @8 H$ K7 ?
1
8 d* b8 S1 B/ k: R# ?* d# R
os.linesep2 l' s  e+ @7 P) d
获取终端大小( e4 s' Z/ c: C& a
1% O( B4 ]0 C% h; E
2  d9 A* R3 \) Z# L8 Z1 d6 J) J/ V
3
' V7 |9 `" e( D# a1 Z( f6 G# A
rows, columns = os.popen('stty size', 'r').read().split()1 N, B) g# @2 ^5 t
#python3以后存在可以使用os2 J, i$ F6 c2 r- {
os.get_termial_size()
. V! {% H( D3 V$ S4 ~
退出程序: h  H  g8 i9 o# {, M' n) ^

    - u0 d* h7 M" F0 S0 I0 C
  • return:返回函数的值,并退出函数。
    8 m; J2 |3 x* ^4 Z
  • exit():直接退出。9 q  r- q/ u$ v8 N/ P2 Z% a- ^0 o
  • sys.exit(): 引发一个SystemExit异常,若没有捕获错误,则python程序直接退出;捕获异常后,可以做一些额外的清理工作。
    3 W' ~) g1 O5 \6 O( I: ?
  • sys.exit(0):为正常退出,其他(1-127)为不正常,可抛异常事情供捕获。(一般用于主线程中退出程序)
    # M4 M5 M: J/ \* ~5 V7 c1 P: z
  • os._exit(0): 直接退出python程序,其后的代码也不会执行。(一般用于线程中退出程序)$ Y- K% s: B5 y, y4 @- a
网络操作域名解析为ip
9 S! p' v/ N8 [! U
1
6 l5 e  q$ `+ Z& c" m) Y
ip= socket.getaddrinfo(domain,'http')[0][4][0], R7 ]& R8 O' k! \+ G+ ~
获取服务器版本信息
8 d* ~1 ]* R3 |1 |5 A, Z
1
1 ^  N  ~! t8 t5 y20 ~' m, p. P4 w+ P8 z1 v
3
! y! E/ b$ O# d+ ?; c; ^
sUrl = 'http://www.163.com'
' ~- P2 j7 b; v/ w# Vsock = urllib2.urlopen(sUrl)
% F2 a4 C) F$ ]7 Psock.headers.values()
! R2 r+ K& N  }* K
文件操作输出一个目录下所有文件名称  l* q# ?4 M+ Z4 X2 @
1
6 ~! i! _) b  B  `8 s5 O* ]2
, R8 n! E/ U0 b5 f3  W" e2 l3 Q7 s' G) |
4
2 V) N. t0 k, n% \; Q6 o( {, A5" I7 [/ F$ J4 {, ]& k) ~8 P8 x& i; d
6% N3 @" Q/ s8 U% f7 d6 s* r+ M0 l3 j
7
8 N6 O2 S% Y* t# L: O) T+ @; U; S8
+ k! v0 p5 A+ x( s
def search(paths):
+ K1 B( X2 Z6 b4 N if os.path.isdir(paths): #如果是目录
1 H6 F6 d1 Q1 y( F7 R' Z files=os.listdir(paths) #列出目录中所有的文件
7 s- n+ C2 v( |3 N. B4 I for i in files:) _! u. O) f" E* }. _; ^( H1 u7 p( S
i=os.path.join(paths,i) #构造文件路径+ v  ~- o; e9 H% l2 L
search(i) #递归- N' W( F6 K8 A; ]' x
elif os.path.isfile(paths): #如果是文件  Z# E: i: h  d) h# _+ A9 f: P
print paths #输出文件名
3 q# d  I0 E6 Y& Q; v5 V2 h
文件查找  U0 S( E' M! a+ o, r
1
8 d# S: m) S" ^5 a+ a0 E' [28 k! p# L- E: c6 R+ I
38 G6 B# G% D# N9 M1 F
4
3 L2 x: D; U( e1 G5
" g4 L5 E: p9 A, x* b9 i6' Q, {: O5 p  ~7 R$ q( F
import glob/ @$ p/ g+ g# [. y2 x
print glob.glob(r"E:/*.txt") #返回的是一个列表
& o8 Z  U+ x7 m4 D7 \  m& ]查找文件只用到三个匹配符:”*”, “?”, “[]“, }3 I5 x0 d; g7 Z" U
”*”匹配0个或多个字符;
6 j! n% K6 Y" r+ p5 ~$ u- i7 H+ S”?”匹配单个字符;
+ N' K3 U! ?' Y" q% u9 N  y”[]“匹配指定范围内的字符,如:[0-9]匹配数字。
  S8 _5 n2 ~9 L( v/ F/ U) Y  ]
查找指定名称的文件夹的路径4 d2 L0 a; F6 I% Y# y1 z  U5 X+ s9 c
1
7 G- l5 b! g3 a) G3 k2$ ]# v8 z7 [& Y4 z
3
/ ?6 d/ f# G# g  e0 V& G4" u  R! d' X! L0 |5 g
54 W& k: p" ]& S9 ^( a9 [$ ]
6
- w: ^5 l7 S0 F/ ?$ b" n7
1 m5 i3 t. w( n8 c8" _8 n) h) D2 X
97 ]' g3 S; ^0 W' s& D, P1 I5 P
103 T+ ?& k( u4 A, i/ m
11' u, d' i+ o4 d% u( M! @
12
8 m+ n1 e$ V1 W' t  Y$ d2 ~; b13
* j3 C* A  h  {( f) [' E14
0 {6 Z: z  ^2 G- y, K15
" b. O& m) x& |/ g: y: U) ?  U2 B16( G9 V' \! @/ v' c1 J$ t
170 y3 |0 _/ |1 l$ ~
def search(paths,file_name,tag,lists):- G; n. L! o" {- Y' V! m1 }
if os.path.isdir(paths): #如果是目录4 t0 U+ @) }+ S% [9 b
if file_name==tag: #如果目录名称为tag" Z8 G* {% ?9 A$ @
lists.append(paths) #将该路径添加到列表中( G% b  w& m+ {! {% K
else: #如果目录名称不为tag5 ?4 k& \( C9 |, u
try:
8 N- b" S! Q5 w, F. N- u/ t files_list=os.listdir(paths) #列出目录中所有的文件
, q. D' T7 E) I+ N- P* z( g. Q for file_name in files_list:& r& y1 B- O7 o& k% y1 D4 k; i1 u
path_new=os.path.join(paths,file_name) #构造文件路径) o4 \) O5 w+ B5 d  V
search(path_new,file_name,tag,lists) #递归
1 X7 V5 g$ A: M except: #遇到特殊目录名时会报错8 [/ ~, Q$ E0 @9 Y
pass
# o0 ~/ `( F4 a- d elif os.path.isfile(paths): #如果是文件! U) B# k2 d' ]
pass
) N. O$ c5 b% r- M! d! z, I return lists
9 t& P# q2 S! ^( z
数据操作判断数据类型" O) H) `6 f6 C8 m3 n
1* j; v  x! r$ w; o3 P* b0 A) I, ~
isinstance("123",(int,long,float,complex)
* g3 T2 `, a8 b( {6 I; d: Y8 E
字符串(string)去掉小数点后面的数字
% a7 p& z% A) P2 D
1* W9 a$ Q9 d  @4 C" ^8 t
2$ N- \% O: k4 ]5 a
a=1.21311
. Y& h1 B! x6 |. j% f) nb=Int(math.floor(a))* ^! M5 _! n1 Z% u0 Z
字符串倒置7 w& y8 d' Q! }/ f
1
/ R# I5 l% i# P0 ?3 h2
  m! p9 Y+ [, J: C
>>> a = "codementor"% G; ~9 T2 C' |2 X/ U+ Z
>>> a[::-1]
% T, b1 L$ {, D
字符串首字母变大写
. X/ p3 Z% x7 Q
1$ j7 `( {; l- O% M  O9 U* D
2
; T' I& y: ~9 a+ o, C& y$ |; j3; |/ I; n8 G1 l3 R7 g6 b( D5 ?
info = 'ssfef'
- q/ `* d7 g8 ?  wprint info.capitalize(): Z6 n* W( ?: _# w
print info.title()) H6 w( [6 I+ Y" }- }; o
返回一个字符串居中,并使用空格填充至长度width的新字符串。
0 ]. l9 o% z3 a3 n0 L2 Y9 {( A
1
7 b& |8 b8 J6 n3 P! V' U# B
"center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。
5 ~% Y4 U* M) w( \6 ^
列举所有字母* H% ?0 ]$ K' G5 \( Y, a
1
7 O- B4 w+ a7 Y! T) T" [/ @% R2
0 \  z' v; f! Q: U$ c1 C3. K& E4 L' E, o/ F+ D/ h# H
print string.ascii_uppercase 所有大写字母' x2 Y& E  Q/ q7 G' }4 c" b+ Q
print string. ascii_lowercase 所有小写字母
% F& z) E9 Y+ c. ~  a5 s5 v! {print string.ascii_letters 所有字母(包括大小写)1 E/ ~8 e. B, E1 b; X: F4 U8 K
列表(list)列表去重% p6 X9 v9 D: D9 w0 R! |$ [5 l
1% K9 R# m2 y7 ~" L  X
2
% {- T' B" x, B$ t: d$ |
ids = [1,4,3,3,4,2,3,4,5,6,1]/ `1 `' e! s6 E/ j+ S
ids = list(set(ids))
, J/ C0 h7 M5 [. r8 g
列表运算: ^3 J1 M( S; H) [! Q/ g
1  M1 }' ~, f/ Q) _- v
2( ?* Q+ F4 d4 m1 V( L  f4 u. ~
3
0 Q6 ~. X, J& Q5 w3 d( A' y4
% Z. K4 O7 i$ q9 ?5
8 g1 x, A/ w1 v+ J: e: |
a=[1,2,3]  Z( y0 i2 u/ i0 {9 B' @% V
b=[3,4,5]( |/ G$ `  L* _- u5 f! U
set(a)&set(b) 与, X% e' n. u# O, J. ?; f9 q* p
set(a)|set(b) 或
* h" C5 i$ R: t: B9 O; ?4 s# Lset(a)-set(b) 非
, O$ C5 Y+ S- I( F0 M5 v2 I7 Y/ h+ ]
单列表元素相加8 H  C( {9 E4 H9 K0 j
1
6 C3 h! M+ J. n" S2+ o7 ^6 ^5 y  L9 r8 r% g
3
5 W4 }/ a" O' \: c" E
a = ["Code", "mentor", "Python", "Developer"]" ~5 l& n2 u4 [* V9 D, n
>>> print " ".join(a)5 t, l4 e% n( h9 h! U0 ^& }
Code mentor Python Developer/ R6 c+ e7 N( v0 i' |9 _
多列表元素分别相加& v6 u6 @! T0 M4 h/ a/ _  x
10 ~) ?% p* _6 [; {+ _
2
8 X- `% d& i8 T6 t( c3' c+ p; b0 }: C  w3 ]2 m4 [5 j
4
6 K& f! S, v# K, f+ k6 }5* v: \7 O* K; l& e6 E
6: Z# K7 o+ b* F! e0 j
7
) ~$ u, e; S  B5 _3 @* r2 b% r" [8/ V3 V3 m0 v( M  U+ u% T$ j
list1 = ['a', 'b', 'c', 'd']. I7 _+ O! H7 J/ G
list2 = ['p', 'q', 'r', 's']7 y# O# u6 o4 k7 u; ^
>>> for x, y in zip(list1,list2): * d7 `9 Z& J* e$ c8 s
print x, y
% T7 N' m9 M: Xap
- x: v4 g- \" P7 b9 v+ D  Zbq/ z* X/ G. h" V% B( T' L2 Z, Q" l6 V
cr6 `- S2 g% z% X) C
ds* C8 V% J; S/ Z) Q6 Y0 R  L$ t1 k
将嵌套列表转换成单一列表! i5 W% B) ^9 J# B
1' A1 j( u1 D3 ^, g  V) F
2: {& g% F$ U1 f. o
33 i" I+ t+ Q% K6 K
49 Q, A0 p2 i- G0 H  O" G& f
a = [[1, 2], [3, 4], [5, 6]]
- }( I1 U, r  W1 z' l3 v% @$ q>>> import itertools
9 @9 z; h& z$ a/ S& s1 i$ j$ m>>> list(itertools.chain.from_iterable(a))
) Z  x! A' d/ i6 ]9 P[1, 2, 3, 4, 5, 6]/ u" |4 Q) A) e1 M
列表内元素相加
2 f  V* l+ u) n) M7 y- y
1
' z  |, Q  z  h) L0 W& ^2
" @7 J2 W, Q0 f0 S) K
a=[1,2,3](数字)* ~1 K9 R5 c$ W2 d
sum(a)
' b; G1 S; b3 n, {/ h% l0 g" c
产生a-z的字符串列表+ S: V. q9 M6 I/ Z- Z
1
8 f8 c* J3 s" u( ?
map(chr,range(97,123))
9 g3 v7 b& l$ ]) {7 P
列表复制: \4 F3 k' s; h
1
3 v6 A2 S9 H3 ]$ I6 l) S1 B* m7 M) ]2
+ m' t' g% g. t+ h0 a* }30 s$ s1 q. j2 @$ w7 _
a=[1,2,3]
2 n+ n1 M0 [( I4 l1 Ub=a0 y, W* N- s* j1 f; }
当对b进行操作时,会影响a的内容,因为共用一个内存指针,b=a[:] 这样就是单独复制一份了。) `. X0 u# ~* y  i" Z8 X3 c
列表解析if+else配合列表解析2 D$ P& {1 o- ]9 P! s) ^* {
1. Y2 f0 ]3 b# i/ `$ e! `9 j# ^
[i if i >5 else -i for i in range(10)]/ d, }6 q! x3 Q
字典操作(dict)筛选出值重复的key1 u" Y' R# k3 w8 p2 ?: ^
18 i; z. h' K' J5 b4 I# t5 k
2
& E. \* O" Y2 x! q1 h3
0 m; i7 ~4 O2 S9 ^" g4' h# t3 G! e- S+ Q
5- C# {5 ^/ E* i2 S$ ]
6
5 C( j5 J4 ?1 c0 z, `
list1=self.dict_ip.items() # \3 M$ x1 O4 r7 s8 V! N4 b
ddict=defaultdict(list)& x# m: L0 r8 h9 t
for k,v in list1:
% A6 \" @. C( y# L5 I ddict[v].append(k)
2 Y0 ]5 [. A! ?. R2 E+ u list2=[(i,ddict) for i in ddict if len(ddict)>1]/ h. ]" ]2 m+ s* r
dict_ns=dict(list2)
8 B; H& c6 j6 x4 N* m7 ^6 ^, {
字典排序(py2)
4 {1 j" ~1 E3 E! v" J
1% K6 A$ c  l- _5 P
2- ~8 v$ t: O6 ^6 X! `/ l2 |1 j
file_dict={"a":1,"b":2,"c":3}$ _8 i- d  t3 |- g* T: H
file_dict_new=sorted(file_dict.iteritems(), key=operator.itemgetter(1),reverse=True) ##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,为0表示按key排序。
( {& M( K& T: R
模块操作导入模块时,设置只允许导入的属性或者方法。
6 W6 _3 _2 u) r2 `- w( J
1
3 K3 i3 a- O, c8 D: V2, u+ R7 O7 R) v9 q
3
2 c  v' }. @) _4 p4
  d$ {5 _! j/ p6 U4 z) j1 W2 ?- [59 x, G& a2 X1 ]1 @
6
: j9 y/ l9 U# N5 Y) }( u/ Q7
8 J9 G) [; _/ x2 V: U0 p7 E8
! Y' N! X/ `) P, }: d$ ?% ]9
1 A# ~+ ?( S6 f' c103 G& o( ^" D" Q4 n% G
fb.py:# S2 m% d7 b+ N  H
-----------------------3 T/ A% d. W) f, l. c
__all__=["a","b"]
& s( ]0 t5 k6 k* b/ l& |a="123"
, p7 c" t% i/ o( R+ Kc="2345"
0 W/ ?. v, l0 X4 B- x# \4 S: vdef b():
* r4 c3 v2 V5 n# a' t7 y' g& j% O print “123”
" b8 c8 ^2 \, v% V% {, e2 h-----------------------
5 ^+ W$ X& Y* E6 q+ Ifrom fb import *4 k6 }7 F, ?, M/ b; d
可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。
( q; @* Q0 m: Z- S
导入上级目录下的包+ _  r1 n* @$ n: u0 Y
1
# z- N+ w' F, b  @2
4 Q- g6 y' U% |- {, O
sys.path.append("..")
! F1 }# y" n& J5 B  m: ffrom spider.spider_ import spider_
+ ^" R( d& Y* E+ _) r+ |- F
导入外部目录下的模块
: F8 X: K' ~2 w* |9 _& _, P
1
- B, i$ u/ O8 A
需要在目标目录下创建__init__.py文件,内容随便。
2 y$ o7 _- {% P  g
增加模块属性
! S- r4 |. W% m0 Q. C7 p
1
8 Z$ f8 Y. l: W- G" u4 U2; m7 }1 A$ P9 w: I9 k3 y+ r
3
/ p, U$ D' y2 |# h; t  x% O! z. `48 ?" I/ F& I' ^: K" I& S" w
有时候源代码中,我们需要写上自己的名字以及版本介绍信息,可以用__name__的方式定义。! k& y6 F- |3 f8 U0 u/ w. n1 z
a.py:
( R" m# b, G, J" j6 S, o+ T+ r- C#! -*- coding:utf-8 -*-8 q" e) i* K/ z9 k: A8 I+ V
__author__="nMask"6 n( M8 E! O, J. O% A
然后当我们导入a这个模块的时候,可以输出dir(a)看看( N* k* G+ b7 J; `3 J; t
1
- C% i- {4 B( {# r" ]2
# m+ j8 _3 K! V3# u2 {. \8 n: K& g* q- V
4( n! M8 a5 j. v4 R* C, X
5* o! {: A0 B$ T$ V
>>> import p
. a! [/ X: I4 ~>>> print dir(p)
; ~* i1 c  r* _% J. g; D  x- b['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__']
' m/ V2 m" p* u+ g" C, g7 w>>> print p.__author__8 n9 U+ Q5 o6 f# Y- i4 I6 Z
nmask
4 Z4 G$ x$ Y+ l. }* C
动态加载一个目录下的所有模块0 }  p' T6 o& b5 q9 i
17 n5 o( K# H8 N7 B/ B& ~$ {
20 [9 F! d# L7 g
3
% I: M( \$ Y, E; w4+ B+ e$ P2 O0 I" E
56 o9 n* H1 Q8 M& s) e
6; z: K, B4 O; Y' W1 H: L/ \* y' P
7
( X, C' |# `6 F0 X: q8
8 K5 w2 R4 e- W6 b3 X99 H7 a% E! S/ S$ P$ K
10% h$ f# P% \& A- Y% g/ [' @+ V
11' B( Z9 Z1 b% S
目录:
# v- M, |5 |' K---test; |* H. F7 @+ O3 N% E: e
----a.py
; t1 ~7 h4 A5 k# h& W; n ----b.py0 }) V: |, S( Q; P; l
---c.py
3 _6 x: E8 t7 R+ ~0 v' a9 a: C& ec.py导入test下面的所有模块:% k# D& k0 K. s, b! _
for path in ["test"]:
8 ~% j. F' X% `2 a7 A  H for i in list(set([os.path.splitext(i)[0] for i in os.listdir("./"+path)])):
' b6 `5 Y+ m: {8 E% }! ? if i!="__init__" and i!=".DS_Store": ##排除不必要的文件
+ G  _, [- M* s, v1 z9 ~ import_string = "import path+"."+i+"/ g2 q. I. z1 ?! j8 D
exec import_string #执行字符串中的内容
3 j+ x  ~! E0 Q7 O* e+ T" i
函数操作装饰器函数输出当前时间装饰器
: `( w+ G! [& Y. j0 m
1
. v: A2 n1 l$ a" A2 z2* ~- z6 e( b- f+ i0 T$ n& ~- {
31 n% g# D' A* L1 Z- ^0 c2 p- L  Y
41 T1 s8 m+ c, S* i3 S
5. _% f: X3 i2 ^: D/ L3 j
def current_time(aclass):" g4 n- l5 [; d: Q6 ]3 b! z/ o
def wrapper():
6 z5 A* z2 U# h( j! M' i; ] print "[Info]NowTimeis:",time.ctime()- r) K8 O! Q* I# h/ `1 _
return aclass()) L8 n0 R7 Y5 e/ g5 i: u) m
return wrapper
3 d3 u2 u+ r5 [6 C( k% v1 H
itertools迭代器
- O" n5 Z  k+ x8 m# b7 X1 W
1
" ^8 K' k- n7 B0 U- F& ^2; I2 e" ~& W7 x
30 q5 O* w  J- _' i: ]3 S# o) r" Q2 y
p=product(["a","b","c","d"],repeat=2)
4 I) ^. U2 w  q1 H; B' r----6 s( R3 }, d, M8 B" z/ @4 _
[("a","a"),("b","b")......]8 z0 O- N3 G& I6 z9 @1 S
reduce函数函数本次执行的结果传递给下一次。) J: x. W# m. H+ t( M( {0 v& n
1
' ]5 Y7 O. L! x& N- ^* j2
# W9 ~. C, U; S5 r/ \- Z6 O# f38 [( ?' S: p$ P$ ~  U2 M
4
4 o+ }3 z" w! o: A+ h( a# W
def test(a,b):. W  U* N& @- V+ V. j/ [$ ^
return a+b
! V5 |/ C" G1 {# Hreduce(test,range(10))) {( A' b- r/ o$ b
结果:从0+1+2......+9
- P& V$ E; w1 {0 S$ h
  @$ D9 D. t" |, N; Q
如果喜欢,大家可以收藏哦,你们的支持是对我更新最大的动力!

本帖子中包含更多资源

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

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.|网站地图