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

[复制链接]
nitenite 发表于 2017-12-31 08:34:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
随着近几年人工智能的流行,从而引发了一个编程语言的兴起,我想说到这,大家应该都明白了这是什么吧,没错它就是大名鼎鼎的——Python5 n8 \6 H7 v( `7 M5 v* O
1 }) B3 T& c# V2 S5 P4 N5 L
对于python,我给大家总结了以下几点:
/ |# b" P$ V5 a4 ~3 ]$ o- APython 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。# T& O2 T) V- u9 N$ x  [4 l# T
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
8 o# W7 X, a0 e+ [7 W  }4 z* Q4 K2 o; v
    3 P- W/ d- e6 v7 B
  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
    6 w1 \1 Q/ L& g) [0 U
  • Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。
    + M, U! f. E$ l6 P9 o0 z: l
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。4 o  ?% f9 X2 Z" ~" ^
  • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
    ! `5 ^9 K* R$ J# ?" H+ \& j, j( x
在这里,我给大家就分享一个关于Python的奇技淫巧吧!8 U& p- @: @6 r- R- E9 I
控制台操作控制台不闪退
7 W- l0 b) G; `) E
1* k7 _7 ]0 w) a8 K2 Z7 A7 Z: C
os.system('pause')
) w1 T3 j$ k. `: {
获取控制台大小9 q" M+ J# ^' I5 l+ P5 z; G1 b
1* z$ F) X. |" n. N2 y9 y
rows, columns = os.popen('stty size', 'r').read().split()
# J( K8 ]! }1 j  x
输入输出控制解决输入提示中文乱码问题5 x* r9 r1 K* J& d0 [
1% F9 V/ O- \8 K/ ]7 b
raw_input(unicode('请输入文字','utf-8').encode('gbk'))& ~6 ^8 o  E% b
格式化输出
7 ?* {$ W: l9 i: T% ^2 i
1
# J0 k5 M3 u0 t; y0 k/ \5 f
print a.prettify()
. T3 C' K6 e$ x; K6 B
接受多行输入
0 Z/ q' `# D6 W1 f, a; H
1
! J% j. k* h1 A/ ?- \& A7 U  F2
4 t& A+ h; Z; H9 {; `3; [) j0 M2 c) e# c+ J9 z" v" X2 ^
42 x$ H2 M/ H4 X1 S7 {, y( n& @
5
0 P; ~, M* _& ]3 Z6
( q, P6 m1 Y3 C4 T" m8 F: t$ U70 ?1 s6 R5 D# }4 |$ a
84 X+ U1 R9 M9 w8 T! G; M
9
; D% w1 r+ _; |6 f" d7 b& A& R+ k10
2 Z" O: D/ D- `$ f0 t) ]8 J11; b+ P8 v% Q3 T
12% B4 o9 a0 }6 G' m' U' b. C6 H6 q
133 J! d( z5 l) }; X# F
14
- a/ Y* @# a0 A. w  U; p- \- E* A. |152 l# R- z# U7 Z
text=""
! \& M+ k" d; j/ S& \while 1:
9 {9 e) Z- S9 Z+ Q2 I" x data=raw_input(">>")& L/ o# B( [8 j/ A& K1 B6 k6 ~
if data.strip()=="stop":, E; C- a7 H3 d  q$ d
break
& n, t' C' z: U. F text+="%s\n" % data
0 }! N5 a- G! m% ?# B' w' K, G5 t& Uprint text
% m& J# B$ w- L6 ^---------------------------5 B; v5 N: C( ^% e
>>1
- Y; D8 t4 m; o1 k, C8 k3 q>>2
  j4 j- ?, [9 s: P1 |/ o>>3) z6 p# }/ _" I. [
>>stop
  G6 Z9 C! d8 i, Q3 m; I& i% R' E1
" M: R5 F- ^) |6 Y3 f2/ W; b7 V  G8 W+ u8 v# ^, ]3 L
3# C# \( K* K9 x6 @. k7 F# b
同行输出9 r6 @; l% L% {8 F. a! S
1
* W3 x2 W' w- K8 N" I2
0 h$ C6 I% K- f5 r% L! G8 V
Print '%s' % a,3 D# S. t5 w( n' R4 n- g7 R, w, Y
Print '%s \r' % a
1 }7 T9 j. W6 B5 ~& [9 C, X( L
标准输入输出
2 n3 A6 ]8 h; ?/ A( C4 ?0 L( v
1
) z7 L; ?! }, z2: A' n+ ~# S7 o6 l) L. L) D4 _
sys.stdout.write("input") 标准输入1 G, d! C% p  z% S& c. c
sys.stdout.flush() 刷新缓冲区
) p& Z3 \$ P' w7 H- F
print的功能与sys.stdout.write类似,因为2.x中print默认就是将输出指定到标准输出中(sys.stdout)。颜色控制控制台颜色控制(适用于windows)
5 e& x1 r( p1 G/ g/ n
18 |2 ]9 }% I1 h; z- D% f8 F
2
% ]5 V0 B; h( j9 R* P& V3
. M; `9 M& R6 v4 w+ \) S; h3 g' |( I4
! U6 d% L! Y! j, Y1 ^/ s
WConio.textcolor(WConio.YELLOW)& e& z/ `8 I) k# O6 W
print "yellow"
1 h' O( j& f* R; j, d# a' mWConio.textcolor(WConio.BLUE)
9 g' I; N  j% i5 W2 J# ]3 }% Wprint "blue"$ b0 u) F/ A$ v4 \
输出颜色控制(全平台)
; g4 |( R+ Y* v; g, ?
13 D& `# p% m% Y9 m
2
* \1 h7 p* {  @3. ^% S4 X" u% z$ e9 z
4
) Q0 I5 ^: V6 l& f' ?  w) T5
$ K  Y. [$ r+ c5 U6 d6
" m$ }5 \$ f, Y; L7 z7 C8 r0 u7- t+ o" S( {' |2 a% v" \5 y! T
8/ F. q$ o, v5 \1 b2 G% P) V
red = '\033[1;31m'
% U9 X  \3 r. K: c7 Ugreen = '\033[1;32m'
: G6 C, x8 n0 L2 i+ }yellow = '\033[1;33m'. a4 s0 m5 z2 }( D- z( T, B
white = '\033[1;37m'
9 t/ a5 ]. \: O' p. \2 }reset = '\033[0m’  u8 W) ~3 m  G: {9 H* A: _
print red+"color is red"+reset
6 }# b( G/ \5 @; F! ]) k7 wprint green+"color is green"+reset  C# }7 ^5 o, x% w" E9 S
进度条控制方案一
- y% w7 O" o8 M7 T3 N) E
1
1 N9 {1 F7 ?. T. N/ i; P2
. k7 v3 U. k, n+ Q3
$ B8 D+ Z: {# `# u" z6 y3 n4* m% q- h( o0 S# Z
5& Q: z' P% l2 h( B. s7 h% W6 n; i8 L
6
6 H0 X) u: F3 G. ]* M2 [- R8 e7
% R6 O& k3 }3 i7 o5 W86 A' |, K/ Z/ b5 l( n. S
from __future__ import division7 {& r2 H" r; g6 L  K5 D( B
import sys,time
9 p( i5 p8 p# p4 e8 Y% Tj = '#'+ R, K2 p) g# l  U' Z9 P
for i in range(1,61):8 p5 J* H4 L& w" e8 a
j += '#'
5 L. v! o8 s" D( c6 Z, W) f sys.stdout.write(str(int((i/60)*100))+'% ||'+j+'->'+"\r")
; t& T8 M6 X. w! p! t sys.stdout.flush()- \* Y1 U% \( m, g
time.sleep(0.1)
- u! W. o# c/ d) g+ ?
方案二8 [" h& t1 W% K# L. _8 |2 J4 o
1
' F, f) |3 V4 E  {( N) @# o2! I7 F, _  M" e4 ~
35 r$ U" C  Q/ l3 A" @8 q
4
( p; E" f* t0 n# g3 }3 d4 G# B" l5
6 v- ?* n% C- l6
, Q! N; `3 g$ T& n
import sys. F! p9 H7 x$ ^  Y7 r/ k8 ?* ]
import time, H1 H6 V5 o  D6 s+ |3 l
for i in range(1,61):, G' s' m, }  c, o" ?. O+ y
sys.stdout.write('#'+'->'+"\b\b")0 A! t! e9 M/ ?' ], G3 G
sys.stdout.flush()
$ R* ]& _9 R2 R' H6 j time.sleep(0.5)
$ L! m3 X& z4 A- u! v+ E
方案三
. \; E! U, {% o) [! C
10 ~4 U# K4 V7 Q5 Y8 Q
26 t6 L0 ?9 t. o# [, S
3. ]; x0 p' _3 b# z
4
! k$ X& F6 O/ ]2 W7 \& r8 i2 K5 v) z8 ]50 Z# p/ O( q: O! J; O- \  T3 @: H
66 D& N/ {6 g: u4 X% |* L* d
71 p4 {" ]6 v" ]) ?1 `8 O! K
8: Z. G% J' f: [8 v/ ]  L) C
9
  |7 m: R; M/ k# q2 H10
0 Q2 a& T  [) t6 T  r11
. e/ e# [3 P% ?! @2 V+ l122 N: l& `9 m7 k
13
, ^6 U6 [9 ~  I  k6 N14& N+ E* A7 C9 ^1 U0 F# S0 }
153 U9 l5 B8 P& p! _
16+ A1 \* F. N8 V6 A. `1 {" s
17
+ w3 n3 R* V3 m8 g18
! z& \, X, h; z) ^7 h19
0 ?& C8 ?) y9 V4 u201 B1 E9 i; K6 x8 R* B
21
* a2 H) r+ B8 X- D9 U( I22
8 Z/ Q- Q6 B( i3 M23
2 h* t0 ~: G8 X# A2 k8 {24
6 E, O) m* u6 A7 S0 t* I# q1 k25
2 o  `# B8 u( M! `- V
from progressbar import *; s% b. J9 U0 S: Q7 X4 U7 ], w: n% R
import time  ]+ l) k8 z" F+ m) a& h4 S7 I
import os
* A1 s0 A5 ?0 K2 p1 S; v( X8 A% Erows, columns = os.popen('stty size', 'r').read().split() #获取控制台size 1 G0 t1 Y+ Y/ c
console_width=int(columns)- C$ K1 }% s% e# G
total = 10" S8 Q& ?0 W# O
progress = ProgressBar()* o8 ?; q6 y0 Q/ }0 L3 \
def test():
! B! D0 P" R; ~3 f4 g- i '''
: X  A+ _* _6 H! G  w5 G 进度条函数,记录进度3 R+ T& W9 X; B! [* v/ q
'''
6 i, R; A& T) E6 {% n for i in progress(range(total)):2 b5 |9 F; d" |
test2()
' H1 m. i% }- O; zdef test2():2 x0 G, I3 n: b& B
'''
' j5 u! |( K. P  u, V3 S 执行函数,输出结果2 @; J1 @6 t' ~& b  x
''', O0 S* `  c1 z+ I5 m
content="nMask'Blog is http://thief.one"3 H* s+ F! w7 Y. K0 v& [" a0 p% l. a2 t
sys.stdout.write("\r"+content+" "*(console_width-len(content)))' _$ v8 e7 t5 }
time.sleep(1)
9 r4 j9 D# m3 H0 R sys.stdout.flush()
$ k$ C+ P: W& H- stest()* t1 ~, e4 E9 H7 S  g' O0 G
更多高级用法可以使用progressbar模块。系统操作系统信息获取python安装路径0 a6 A5 g& M. u! Q$ m+ P; W1 J
1
- I' H) G% A4 ?5 ]- T5 ]2+ V/ p) B, g9 e- _  G, R( P$ [
from distutils.sysconfig import get_python_lib
' O/ Q) [( P/ f! \: Qprint get_python_lib/ `+ F2 H/ t+ j5 \9 j5 q
获取当前时间: F8 i' z) r+ x$ F  p% y$ i
14 n" U. ?7 U- m3 j( D, H1 L0 P
2
* \; @* c- J, r) q# |$ Z7 s  N& Q. C3 M3
& C' H& s- ]7 M7 o0 C& b9 ?4
2 C; [! L1 O3 H) l. p; F5 v0 g
c=time.ctime()( r8 \2 _# y7 @( {) N# n
#自定义格式输出& k1 d" W: N; v. Z7 f; T
ISOTIMEFORMAT=’%Y-%m-%d %X’; q8 Y& s9 \; L# ~$ {
time.strftime( ISOTIMEFORMAT, time.localtime() ). `$ Z: x: r" ^) A) Y
查看系统环境变量
  x- B% h, }0 m7 q: Q2 z
1
2 q+ A8 j* J  A' c+ B, F
os.environ["PATH"]
" ~0 ~, B, F  q$ o* c: P0 g7 ^
获取系统磁盘
# f! c/ u0 y1 H; A* c2 w
1
7 o  h; u1 c5 K7 \  H. U
os.popen("wmic VOLUME GET Name")0 c) G2 l+ J2 f+ `; R9 B
获取当前路径(包括当前py文件名)
$ Q& b- |8 n( E0 _' s. Y% f
1: k$ J8 u5 a% ~1 h0 @3 X- _
os.path.realpath(__file__)- S6 @3 i! L+ L9 O7 h5 D( E
当前平台使用的行终止符
7 G1 o" b( y7 q* z
1
  l* L( s, @' g9 a, g
os.linesep( t% n3 ^3 C: x5 q: R; V$ T  ?" K
获取终端大小
$ a. t+ V$ ^7 y
13 ^- g* _- e0 L* P5 ^
2
, d/ w, k2 e. W3( g- T: f6 y/ e7 E
rows, columns = os.popen('stty size', 'r').read().split()
' f+ a, Q/ k, w! r) n#python3以后存在可以使用os
) Z2 ~% p* O- `7 X' tos.get_termial_size(); U7 J! \5 h& ^  }/ [( _+ O9 B
退出程序( k" g- ~% o: K$ q  H8 @9 Q5 Q
    " [* m# y; _3 Y5 N# w( N* x
  • return:返回函数的值,并退出函数。
    4 J) I0 y( b; J  A
  • exit():直接退出。
    ; M, |$ ^7 t2 s$ ]) \3 N
  • sys.exit(): 引发一个SystemExit异常,若没有捕获错误,则python程序直接退出;捕获异常后,可以做一些额外的清理工作。
    1 W$ V, ?8 @! s( Z  P( ^# ?
  • sys.exit(0):为正常退出,其他(1-127)为不正常,可抛异常事情供捕获。(一般用于主线程中退出程序)
    4 u/ y4 Y: f+ ~- T- |; b
  • os._exit(0): 直接退出python程序,其后的代码也不会执行。(一般用于线程中退出程序)
    * U" n, S% m' }1 W3 |0 [( D6 g) N
网络操作域名解析为ip
8 Z/ |7 U! s; S# D# D! Q, Q+ M& c
1
$ e$ a9 K. e) w# j) O9 b, z+ x
ip= socket.getaddrinfo(domain,'http')[0][4][0]) B9 Y- n/ x5 R- x1 |2 \% G
获取服务器版本信息
+ `& I8 ]+ i& R# J! `
1) t( Z% B$ }) L1 o; j" T
2- y) k! h, x1 O6 p& h5 a" O
3
# ~# A3 T; P7 Q$ [; M
sUrl = 'http://www.163.com'
) d3 f! M9 l+ Y/ gsock = urllib2.urlopen(sUrl)
! h8 a& C6 L) y( I; O2 `sock.headers.values()2 g0 t( \) ]( o, n3 m
文件操作输出一个目录下所有文件名称
  j7 d8 g' D+ J. k
1
; F8 p+ u0 R% s. S- P' c) D2/ z* ~- n# Y; r# u% R4 _& F
36 c3 R; h. C+ {2 e' I! {8 y# ^' L
4
* b7 k2 z, X# Q! q* ?5$ L3 v3 G) ~) g3 s' m+ A
6
7 A) X; Y: j) S# R8 o7
7 a( g- W5 M1 ^+ D87 s% q; i+ X) {: E  i; E
def search(paths):
# d6 o) O4 ^; J: D, f$ l8 v$ j) h% ` if os.path.isdir(paths): #如果是目录
' I  I+ g8 A; }8 a& Z5 w) _ files=os.listdir(paths) #列出目录中所有的文件4 S# a- t0 L! |% C  j
for i in files:
! v' W% U% J3 F( X i=os.path.join(paths,i) #构造文件路径
6 D% w; l/ [" N" p8 L$ K search(i) #递归, e0 W- U6 o' p$ o' k  [: I
elif os.path.isfile(paths): #如果是文件) Z' s7 o; W$ e# E: U6 D1 G* g
print paths #输出文件名" Q+ u! G, H# X4 g4 q; W
文件查找
" F$ ~+ z: A) p+ X
1
# @' A% @* z( m$ F2
, l' d  \, ~$ b5 n30 {, X$ |3 O) f! W! R4 R% p% L, n1 y
4
# s+ {0 k% f4 q5* o4 ~/ N$ t1 A1 c
6' N' g: s. v$ r1 k# C
import glob
$ E, k3 z- {5 L2 ]7 k) c& \* o3 fprint glob.glob(r"E:/*.txt") #返回的是一个列表9 F2 X7 A' r. V' D) F
查找文件只用到三个匹配符:”*”, “?”, “[]“
7 M' U) r8 s9 k- q”*”匹配0个或多个字符;
8 ~4 F# {4 e3 Z% a# A/ O”?”匹配单个字符;
( b6 r9 H0 o: j% i5 Q( Q”[]“匹配指定范围内的字符,如:[0-9]匹配数字。
! M5 {7 |' L1 W9 v7 ?% I+ Q
查找指定名称的文件夹的路径, \! f$ J: Z1 b$ N" |6 R8 f
1
8 H: A7 F/ Q4 R1 I" y2
) I( {$ Y4 R4 N* F$ t3
+ B7 |1 r* x! h5 ]: z' E4
! y6 I: O1 U3 `5 ?/ ?5
5 H1 J" k3 R/ B" |" c, o# l8 _6% A/ ~( n; U/ Y$ m/ ^: |, A  k
7/ E7 v7 \. ?4 ]+ d% x0 a
8
2 ^4 Y, B3 T! H2 p+ [: N+ a9# C- j6 g: @1 Q! h1 W5 q, ^# ^
10
. e' ]4 F8 S$ E9 J* R11$ N1 m2 V7 f2 Y
12
2 o! f4 ^' a. \2 l, f7 n13
7 C& B' H! {2 O& k: h" y# ~14: W( K9 }* w3 B, w, t0 T. T5 \; E
15! ~0 e- m0 d0 B1 \8 K+ m
16
8 {7 G8 o7 L+ t$ A/ T8 s5 y: j175 g& y9 ~& u6 {" D+ E8 A9 }2 N6 y
def search(paths,file_name,tag,lists):
7 g4 f/ b  j5 n9 K1 o+ a if os.path.isdir(paths): #如果是目录
4 K' X4 v6 P& a. } if file_name==tag: #如果目录名称为tag6 ~1 }0 U) `' \' @( i( ~$ `
lists.append(paths) #将该路径添加到列表中
, F5 Q, U1 h9 [. A; [ else: #如果目录名称不为tag
. l$ W3 V) s7 \* b% ^ try:
- I( f2 C2 f0 i! ]: w9 r files_list=os.listdir(paths) #列出目录中所有的文件
0 k( \0 ^, {- `+ j, W for file_name in files_list:
1 z) J* S6 l2 I) d' `" C path_new=os.path.join(paths,file_name) #构造文件路径/ A: @4 M. ^- `$ s7 E
search(path_new,file_name,tag,lists) #递归& Y% Q; U0 _* U2 m
except: #遇到特殊目录名时会报错- v+ H4 A6 @1 N& ~0 }
pass' Y6 J* w0 O9 I4 q' n% t) ~
elif os.path.isfile(paths): #如果是文件
" \' G; H; L& _+ q pass
' b" n9 W/ h8 b4 i' X) S; [/ Z# g return lists
4 j+ t% [5 Y% E4 Q  V0 p
数据操作判断数据类型
9 ^% o5 Z% K& O7 I
1
" z+ Z6 }* u  f1 J
isinstance("123",(int,long,float,complex)1 `/ @% O* M1 g5 L& y
字符串(string)去掉小数点后面的数字, `0 m: v/ S/ f- t. A
1
. }0 w, C, H% s* v: L23 d: S2 H" H& N: _+ o3 \
a=1.21311+ C. v. Y' g6 O$ i
b=Int(math.floor(a))
2 Y- K% e3 p; F5 Z  C% B3 u
字符串倒置9 d- y$ Q3 |0 x! v- H
1
: U! G7 j% J" q8 _, i2
: A$ Q! A& n% D6 I  e& Y2 R
>>> a = "codementor"
7 T8 s, t* g5 \$ i! {1 G>>> a[::-1]
% f# W6 W3 z+ D1 q  k# q) H! M- G
字符串首字母变大写
& Y- ]2 P! X1 X' c
1" @) |) ?, _  j! `: `2 G9 o- T( H( u9 z
22 \: O. g, ~/ Z6 g8 T  s
34 Z) I) j* y4 g: q' a3 `; A+ z; l1 B$ ^
info = 'ssfef'
* d1 K' N1 X9 |0 b  H) M# I2 Vprint info.capitalize()" b& t3 k- z- D7 |
print info.title()
( v9 P/ j% c8 p0 z/ z  J& r+ g
返回一个字符串居中,并使用空格填充至长度width的新字符串。9 \& L; U  i' E' U% `6 ]7 H
1% t$ k; z$ i9 g+ s0 _
"center string".center(width) #width设置为控制台宽度,可控制输出的字符串居中。
2 q5 Q# o' T. V. ^, P
列举所有字母* e2 n* W& N) X) J$ g6 ^
1
( D1 W: s; _0 G3 Q! c/ A5 I$ \2 X2
  w$ H) U: v+ R2 P. r+ |' E% W3
" \: J0 C! C8 @7 V( j* _! {: i! T' o' c
print string.ascii_uppercase 所有大写字母7 v% F2 w: j- R! C& j& T6 S2 i
print string. ascii_lowercase 所有小写字母) ~/ @& c( T' x2 D( V! Q
print string.ascii_letters 所有字母(包括大小写)
! j2 r: H& ?; q* V6 c! F* a% P
列表(list)列表去重
8 R! c/ d3 a4 x: Z
1
/ E1 X" M- G  w9 v2) T0 O: c$ F8 `! P: _
ids = [1,4,3,3,4,2,3,4,5,6,1]
2 h$ ]  e- R" N' ~0 X& C0 ^* y$ tids = list(set(ids))0 S* C! k& F; R1 M9 J
列表运算
& e2 `' X! F5 n
1
. [/ T% n/ i0 I6 v& J7 l2/ M  W* z% @. J5 F7 u
3  M- T, Q/ u/ b0 O: N* g0 E0 Y7 m7 ]
4
* ]- R) F' z, A' n- n- P; |& P& N$ A5
: T& A6 y) T4 J& Y$ y
a=[1,2,3]/ Q0 V9 u# Y* d
b=[3,4,5]4 D; b9 s4 J  q) P
set(a)&set(b) 与. r; j8 W4 ?6 c; G" A
set(a)|set(b) 或  t; @; p1 L- W! f$ i
set(a)-set(b) 非& L% R! l- F( ?7 f/ ~7 K8 A3 M
单列表元素相加% w7 T! L5 u6 ^
1
  V9 f9 g; U2 h2/ k7 V- b4 ]0 K+ a/ m# \
3. D5 E  A0 m% `; |: s3 Q' x
a = ["Code", "mentor", "Python", "Developer"]
5 x. ^& W9 c- {( @& q' s( ^0 `& i>>> print " ".join(a)
. V, a+ |# ]' K0 Z& nCode mentor Python Developer: Z" V* D2 K: [& N6 G0 c0 s( }* I9 C
多列表元素分别相加" l+ ^2 r( u! ~) D  B
1
/ l: @8 q/ y5 d( _7 ?& {' x23 [3 h/ v, v$ B5 w3 o4 ]
3( ]' p" d# l1 k8 c+ o8 V& s
4
, ?# \( G2 C! w) w! w5
7 T- n+ D/ q% E! k: ~# K6 q6
  }2 K6 H; D! o$ ~+ V" y2 V7" N5 K* k) {- }! l( R2 N1 V
8
, L" d3 p# x2 G( U; l# S+ R: k
list1 = ['a', 'b', 'c', 'd']
9 f7 L/ N5 `" g9 r( Plist2 = ['p', 'q', 'r', 's']
" [) ~% I) }7 k- ?. `>>> for x, y in zip(list1,list2): $ |0 k" V" s" n
print x, y
* x  }; W5 `7 dap
  T, Y5 B0 a* nbq
7 ~1 {: F+ b) c7 P( zcr. E4 l0 e; }* @4 X7 }" f  m
ds
& `* I3 A; s9 M& O
将嵌套列表转换成单一列表
4 w- d1 {' d) R# E/ J+ H
1
( f% Z! o  i$ v; H8 c2$ e+ E; B4 S( g) t1 l2 j5 k/ e
3  D5 Y/ A( w8 }! z' n  a! Y1 A
48 u( h7 ~' T- d! l6 e& O; O
a = [[1, 2], [3, 4], [5, 6]]
1 I! o- l! n" \' @" v, B>>> import itertools
2 V4 j1 _  {, ^. x  o: i" v>>> list(itertools.chain.from_iterable(a))
# ~# g( E6 K7 J[1, 2, 3, 4, 5, 6]8 V3 Z' p1 C1 \3 ?+ _
列表内元素相加
" ]  u) P" ], y
1
0 q% ~& e* R- B4 o24 _' r4 D* J6 s
a=[1,2,3](数字)
$ ?: i$ G" \8 ]' X5 B6 ssum(a), J0 Y6 }8 w  P% Y; o- S) i7 J; c
产生a-z的字符串列表
5 r' b+ p: P' \
1+ w  _. ~9 b: G; {- A
map(chr,range(97,123))9 t/ |  z5 V  ~+ p
列表复制# W# |5 |' r7 p
1
, g! O, q/ F8 U$ \: a0 @26 u" p! r! V. s5 T
3
, n2 U# C& R, I1 U1 W2 v$ ^5 X
a=[1,2,3], J9 a2 R7 O" s* d  j* `
b=a
) X0 W$ ~/ o% f% Y4 Z$ t& p7 z当对b进行操作时,会影响a的内容,因为共用一个内存指针,b=a[:] 这样就是单独复制一份了。
5 d! c% ~2 H) Z/ ~4 v, R2 ~
列表解析if+else配合列表解析# O2 R3 X$ v# X  S  J
1
2 O' C' N2 I* F
[i if i >5 else -i for i in range(10)]5 B& z+ d1 A& e2 @3 C
字典操作(dict)筛选出值重复的key: {, `5 k9 n# b! `4 ?4 G+ ~. b' O' ~
1
0 K# S1 I6 H. y& I2* \2 |! K0 z: R; h% t
36 W1 }! o; {! M
40 v) k5 v) j1 T% D# O$ R
5* A& E& V9 o7 J! {; Y& x  N
6
% W- z3 {5 n- ~
list1=self.dict_ip.items() 2 }% q2 E, M$ o! C7 E7 n4 {( g
ddict=defaultdict(list)" Z9 a  W2 F. P# _) [
for k,v in list1:0 z' q( K3 {+ q3 m, I2 c. Q1 @
ddict[v].append(k)3 ?) j2 T" J) \1 K- l, D  f' G/ i
list2=[(i,ddict) for i in ddict if len(ddict)>1]
8 ?& d" j( t! a  v. E; `! Q- _ dict_ns=dict(list2)
, g1 e  j  ]6 n# G& R
字典排序(py2)4 W/ A' _3 y* O5 ], D- K: g% B* B/ f. L
1
! I( X! O2 o; w( y. ~* D2( N! S- z, v8 I  z
file_dict={"a":1,"b":2,"c":3}) A* A3 `: Y6 i
file_dict_new=sorted(file_dict.iteritems(), key=operator.itemgetter(1),reverse=True) ##字典排序,reverse=True由高到低,itemgetter(1)表示按值排序,为0表示按key排序。/ e5 N  p% j: z/ [' E0 n9 \
模块操作导入模块时,设置只允许导入的属性或者方法。" ?) `- t; w) C/ q( S
1; x: A0 A' @7 R/ |, k4 o$ E5 I
22 I9 m* P" Y  x
3
" R% a$ [& `4 t; Q! t4% @( {( [1 A, F6 K. }
5
: A* _  I! T+ d% D: j: {61 V$ M9 V( ~- i, L1 [
7, _- Y% k9 ^" O' F5 v3 X5 ]& F( L
8% C2 E! y8 w# e( O: k3 b  @
9& ?2 y+ t& Q- P/ K( e- |- K
10$ F2 l8 Z1 o: C$ c3 p  f/ s8 m
fb.py:" n, f5 @6 u$ p* q
-----------------------, m' u4 g# e5 b  k& l
__all__=["a","b"]
0 m$ s. m6 k$ ra="123"
8 L3 ?3 n5 J; d6 [1 Dc="2345"
8 x. e) B3 Q, C$ V, A% S& sdef b():1 g7 G; V/ H* o" t) g3 M
print “123”
* A: S) G3 J7 d% q0 W# e-----------------------1 E9 [" {1 W8 z  |# o2 \8 r
from fb import *0 h7 T7 }' R+ _% H' D8 ]2 ^
可以导入__all__内定义的变量,a跟b()可以导入,c不行。如果不定义__all__则所有的都可以导入。5 q$ P% L$ @' w% [; `
导入上级目录下的包
( v! _' C, A; H8 C' P" l% `+ R
1
5 s- X, q3 Y% P. d/ o5 O; b2  N4 k3 X7 X$ h* W% K' z
sys.path.append(".."); b) W  W1 J+ m7 l; q( F
from spider.spider_ import spider_; P5 k3 |' W6 n- c2 A3 F
导入外部目录下的模块) s% X, n+ Y! F$ ^! |) x; n' q
1; `* T1 z" U: b" V3 g% d- Q. V
需要在目标目录下创建__init__.py文件,内容随便。0 s0 u+ @7 k* Z8 U, k# I/ E6 m
增加模块属性$ I. d0 B& O8 V9 ~4 U/ B; }
1
+ o" E; `; J/ e! u" t$ b2+ k/ C0 O& M; F
3
( W1 q( k+ Q: k46 x7 k( O: L& z7 F# N0 w' H$ ~
有时候源代码中,我们需要写上自己的名字以及版本介绍信息,可以用__name__的方式定义。
! J! |, o  v$ N, n' U! S# ^/ Za.py:
' d- M& a" a) i$ `; J#! -*- coding:utf-8 -*-6 E4 X1 r1 n1 o& D1 g( t5 j
__author__="nMask"& b5 U' {. D: C0 F0 t1 Y7 G
然后当我们导入a这个模块的时候,可以输出dir(a)看看& s5 q$ C4 I& z6 q" V
1
/ j. F1 |9 h. Q& P0 g2
  e* L* B8 Y9 g. @3
( m- Q  z- M) r) i% Q0 ~4
% `; i2 I: ~( l9 e5
/ M. k9 W+ w5 j+ w
>>> import p1 K* d" X& J/ f
>>> print dir(p). v, W$ L+ `$ P2 |6 v* c+ s
['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__']. J+ I4 A5 Z* g/ a5 T
>>> print p.__author__5 t! X* k! ~( V- ?( t9 L
nmask2 P+ z+ M5 N1 n8 I5 E, y
动态加载一个目录下的所有模块
( D3 L0 k6 ~0 G, W8 P
1
' S/ L+ h4 @' ^6 U2
! o6 j/ t  q  @5 m( n  ?3
. [) c/ l* e! O% t3 H; ?' M4
+ l' }& N9 k. m5; ~) _) L1 S% w/ `; w1 v
64 v  w3 x) M% v: r4 {! a
7
, u5 C* |' U. ~% E8* i, h% ?) O; Q# F5 y3 @
9
# c3 ^; _; e2 P' Z& J10
8 H& G% }+ _+ t( q6 c, D+ e11
2 j2 G" m, L% f7 p( y
目录:- J6 v0 L6 R1 J/ M% W
---test! z. d. ]7 F$ w! @0 T; }  Y) S- t9 Y! m
----a.py
7 |1 R2 K. a) R& ]4 ` ----b.py
, U- s8 m0 @8 K6 Z4 z5 f---c.py$ d& k& H$ z+ O$ j4 L
c.py导入test下面的所有模块:
$ @3 C" m: h! r/ ~- i3 z$ \for path in ["test"]:
7 _3 {1 J* F; K8 Q for i in list(set([os.path.splitext(i)[0] for i in os.listdir("./"+path)])):8 p- Q  V& R% J( l% P: g
if i!="__init__" and i!=".DS_Store": ##排除不必要的文件
1 u+ n1 _8 j, J, i$ u8 P5 |5 j import_string = "import path+"."+i+"
# N4 j! b2 u% L0 S- k exec import_string #执行字符串中的内容
4 G! z, \; N" T5 n
函数操作装饰器函数输出当前时间装饰器2 U0 q% C. g$ c& s# y8 C5 j
1
$ W0 e- y- O& w1 V2
4 [: v/ M6 t. z6 A3* x, J/ Q1 r0 E: s2 g4 G( o( ]
4
& z. B3 J$ y  H8 X8 ?8 Z5& e3 j% M5 E) F; J, m
def current_time(aclass):
' X/ p3 H+ c5 b1 @% @9 J def wrapper():
8 ~2 o& f6 c* Y3 L1 k) Y print "[Info]NowTimeis:",time.ctime()+ u1 C5 `& ]; K- \" T& B4 n
return aclass()
9 ?- C; R; s/ F9 T0 s* I8 w return wrapper! a* b' n. y6 j
itertools迭代器3 h8 R8 Y, Z, P1 @* R6 j9 t
1
4 `" g3 r7 b% ^4 P! }2
; J4 O* p0 c9 H1 g2 N! l8 V, g3, J- `0 M9 N' T( b- {- e
p=product(["a","b","c","d"],repeat=2)
# l  O  N$ D, Q1 L. I4 M----7 t! o% W2 ?, l/ ^% |3 Y) L
[("a","a"),("b","b")......]
3 U. ?5 G" _  q# i6 d& d
reduce函数函数本次执行的结果传递给下一次。* F7 ~* {( x3 ?: K4 \
1
4 E* l4 R; C  P( C, e& ?# p2 N2
# N2 \) x7 K$ U7 i/ V: a3' L. b) f1 S2 ?5 U4 F
4
3 H: k3 z, @* ]8 d, ?$ ^) ]8 ~
def test(a,b):
/ u0 u% ?' D+ q, Q& ?5 r4 E' i return a+b( C- O; R5 {# J# M
reduce(test,range(10))
  W) h  p# ]9 N$ ]. Z; `  Y7 G7 n结果:从0+1+2......+9( h9 c5 ?- `) K

3 ^) q( C0 c6 _$ c& h: ?  v如果喜欢,大家可以收藏哦,你们的支持是对我更新最大的动力!

本帖子中包含更多资源

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

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