python一些常用方法_Python:一些常用语句/方法(不定时更新)

1、运算符:

与 and

或 or

非 not

整除 //

浮点除 /

2、类型:

字符串str

可迭代对象Iterable

列表list

切片slice(一组数据或者一组数据中的部分,如[1,3,5,7,9])

slice对象s的起始和结束,s.start与s.stop

3、类型检查:isinstance(变量,类型) type(变量)  [callable(变量)——仅用于检查对象是否是函数或者可调用对象(包含__call__()方法的类实例)]

isinstance除了指定类型外,可以检测变量是否为类型组中的一种

isinstance([1,2,3],(tuple,list))

True

4、强制类型转换:

Iterator转list:

list( it )

Iterable转Iterator:

iter( it )

chr与str

chr(66)#ASCII码为66的字符'B'

str(66)#字符串'66'

5、全局变量 :

函数外的一个变量,如果想在函数内使用并且不被认为是函数内部的局部变量。

在函数外定义,在函数内用global声明

A=0defX():globalA

...

6、调用:

工作目录下的.py文件中的类可以直接在别的程序中通过from A import B调用

7、错误:

ZeroDivisionError:除零

ValueError:

AttributerError:参数错误

IOError:IO

KeyError: 引用了错误的下标 D[key],即D中不存在关键字Key

8、方法:

获取方法和属性名

dir():获取类或对象中的所有方法和属性名

__dict__:返回包含对象所有属性和方法名的字典

exit():程序中断函数

time.sleep( float f ): 程序推迟f秒执行

time.time():当前系统时间,可以在程序结束time减去开始time,得到程序运行时间

os.getpid():获取父进程的ID

os.listdir():列出当前目录下的所有文件名

os.listdir('path'):列出指定路径下的所有文件名

os.path.isfile(x):判断x是否为文件

os.path.isdir(x):判断x是否为目录

os.path.splitext(x):将x分割为两部分——文件名+扩展名,如'test.txt'分割为('test','txt')

以一个Student类为例,S是Student类对象,S={'name'='Bob','age'=20,'score'=90}

几个常用的定制类的方法

__str__(self):print(S)

__iter__(self):将一个类改造为可以用于 for …… in循环

__getitem__(self,n):通过下标如 S[2] 访问上文的改造类中的元素

__getattr__(self,attr):访问不存在属性S.attr时返回的内容

__call__(self):通过S()调用实例S自身时的答案

__setattr__(self,key,value):每在__init__中运行一行self.key=value时,都会运行一次__setattr__(self,key,value)

str.lower(),str.upper():字符串中所有英文字符小写/大写(其他字符不变)

len(str):获取字符串长度

str.capitalize():将字符串的首字母大写,其余字母小写

int(s , base = N):将一个N进制的字符串s化为十进制整数

random.random():返回[0,1)区间内的一个实数

random.randint(a,b):返回[a,b)间的一个整数

time.time():返回当前时间的时间戳(自1970年经过的秒数)

time.sleep():推迟多少秒执行

d=json.dumps(S)

json.dump(f,S)#json序列化

S=json.loads(d)

S=json.load(f)#逆序列化

threading.current_thread():当前线程

threading.current_thread().name:当前线程的名字

语句

1、判断元组Tuple/列表List是否为空

#现有元组T 列表L 初始化操作略去

if notT:print('元组T为空')if notL:print('列表L为空')

1.5、判断字符串是否为空

ifS:print('字符串非空')

2、用一句话将一个List中的所有字符串小写化

A=[s.lower() for s in L if isinstance(s,str)]

这里是列表生成式的内容,由于List中可能含有非str类型,所以要用if筛选

3*、初始化一个List并向其中添加元素

L=[]

L.append(1)

L.append(2)

不能在初始化为空List后直接用L[0]=1的方式添加元素,否则会报错IndexError

3、在一个List的首尾添加两个整数1构成一个新的List

L=[ 1 ] + L + [ 1 ]

杨辉三角,根据上一行的List生成下一行的List

L=[1] + [ L[x] + L[x+1] for x in range( len(L)-1 ) ] + [1]

3.1、应用slice切片技术,取出一个List中的部分数据(比如下标为4,6~9,11~15),构成一个新的List

L=[L2[4]]+L2[6:10]+L2[11:16]

要注意的有两点:

①单元素添加时,必须要用 [ ]包括住。否则该元素会被视为某个元素而非List对象,从而导致报错。如上文的 [ L2[4] ]而非 L2[4]

TypeError: can only concatenate str (not "list") to str

②slice[ start : end ]的实际范围为从start到end-1,所以提取时应注意end应该比要提取的下标多一。如上文提取下标6~9,写为L2[6:10]而非L2[ 6:9 ]

3.5、List首尾匹配关系

假设有一个List[ 4 ],则第一个元素下标0对应最后一个元素下标-1,第二个1对应倒数第二个-2

可得第i个与倒数第i个元素的对应关系为下标 i —— -1-i

这在回文数、首尾匹配方面有一定用处

3.6 创建一个队列对象

importqueue

task_queue=queue.Queue()

4、List变为索引-元素对,也是一种key-value对,只是key对于下标,value对应元素

enumerate()方法:

for i,value in enumerate( [ '1', '2', '3'] ):print(i,value)

01

1 2

2 3

可以用这种方法将一个List转化为Dict对象

D={}for i,value in enumerate( [ '1', '2', '3'] ):

D[i]=value

D

{0:'1', 1: '2', 2: '3'}

5、将List变为Dict的一般方法:zip函数

C=zip(A,B)

zip接收两个参数A,B,作用是构造一个Zip对象C,C可通过强制类型转换dict()转化为Dict对象。

D的Key为A,Value为B

A,B长度不同时,多出来的元素不再显示。

A=[str(x) for x in range(1,11)]

B=range(1,11)

C=zip(A,B)

CD=dict(C)

D

{'1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '10': 10}

5.1 创建dict对象的三种方法:

D1={'name':'Bob','age':20,'score':90}

D2=dict(name='Bob',age=20,score=90)

D3=dict([('a',1),('b',2),('c',3)])

注意用dict()创建时,变量不需要单引号''

5.2 创建一个可以通过属性访问的Dict

例如:d为一个Dict对象,可以通过d['Key']和d.Key两种方式访问value

classDict(dict):def __init__(self,**kw):

super().__init__(self,**kw)def __getattr__(self,key):try:returnself[key]exceptKeyError:raise AttributeError('Dict has no attribute %s'%key)

注意:1、上述代码初始化中的**kw(代码中标红处),因为我们不确定会传入多少个类似a=1,b=2……这样含参数名的参数,所以在处理dict的子类时,用关键字参数**kw接收这些参数,并用

super().__init__(self,**kw)

进行初始化,会起到事半功倍的效果。

2、对于通过属性访问(d.a这样的形式)的问题,都要涉及到内部方法

__getattr__(self,key)

而通过d.a得到的值,即是该函数return的值

一般要用try...except...语句写,try中写return,except抛出访问失败时的错误

5.3、初始化一个继承自字典对象的类对象时

不需要把字典对象的所有内容写入参数,而代之以**kw,并将该**kw传入super().__init__()的参数中(接5.2)

classDict(dict):

def __init__(self,**kw):

super().__init__(self,**kw)

6、raise,错误抛出

if gender != 'Male' and gender != 'Female':raise TypeError('Wrong Input')

7、当两个变量的变化需要中间变量参与时的简单写法

for i inL:

t=a

a=b

b=a+t#可以修改为

for i inL:

a,b=b,a+b

7.2、为一个变量进行选择性赋值的简单写法

a= func() or 1 #当func()为None或者0时取1 否则取func()

8、字符串&字符串

8.1、判断某个字符串中是否包含某个子串,例如

if '.' ins:print(True)#或

if s.find('.')!=-1:print(True)

8.2、输出随机字母

print(chr(random.randint(65,90)))

注意chr与str的区别,见4强制类型转换

9、筛选

①列表生成式:[x for x in ... if 条件]

②filter(f , L):对L中的元素进行f,根据f返回True还是Fasle选择是否保留这个元素。结果是Iterable,需要用list()强制类型转化为List

9.0、筛选出当前目录下的py文件

[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']

这几个函数的作用可见上文'方法'模块

9.1、筛选出类A有而类B没有的方法

[ x for x in A.__dict__.keys() if x not in B.__dict__.keys()]

9.2、筛选出一个List中的偶数

L=list(filter(lambda x: not x%2,[1,2,4,5,7,8]))

[2, 4, 8]#等价于

[xfor x in [1,2,4,5,7,8] if not x%2]

[2, 4, 8]

10、筛选出某个文件中所有目录下包含某个字符的文件

defsearch(str):for x in os.walk(os.path.abspath('.')):for y in range(len(x[2])):if str in x[2][y]:print(os.path.join(x[0],x[2][y]))

11、用with语句安全打开文件

with open('Test.txt','r') as f:print(f.read())

12、JSON序列化class

D=json.dumps(S,default=lambda obj:obj.__dict__)

13、打印若干个相同的字符,不用for

print('A'*20)#打印20个'A'

AAAAAAAAAAAAAAAAAAAA

14、返回一个非A即B的数值

return A if A>B else B

这种也可以用于匿名函数lambda中:

lambda a,b:a if a>b elseb#等价于

def(a,b):return a if a>b elseb#等价于

def(a,b):if a>b:

reutrn aelse:return b

15

16、进程与线程

①进程

from multiprocessing import Process #单线程

from multiprocessing import Pool #通过进程池的方式批量创建子进程

def X(n): #进程要执行的过程

pass

#创建单个子进程

p=Process(target=X,args=(n,)) #target为上文进程要执行的代码 args为传入的参数

p.start() #启动进程

p.join() #等待子进程结束继续往下执行

#利用进程池批量创建子进程

p=Pool(4)for i in range(5):

p.apply_async(X,args=(n,))

p.close()

p.join()#与单个进程不同,join前要先close

②线程

import threading #线程相关的模块

def A(n): #线程运行的代码

passt=threading.Thread(target=A,args=(n,),name='threadname')

t.start()

t.join()

17、二进制文件处理

struct模块

任意数据类型保存为二进制文件

importstructprint(struct.pack('

b'\x94\x01\x00'

读取二进制文件中保存的文件头信息

例如:读取bmp图像的文件头信息(保存在bmp文件的前30个字节中)

with open('Test.bmp','rb') as f:

s=f.read(30)print(struct.unpack('

(b'B', b'M', 33510, 0, 54, 40, 109, 102, 1, 24)

18、正负号与索引相关的处理

比如:将L1=[1,3,5,7,9] 变为L2=[1,-3,5,-7,9]

关键点:(-1)**索引 * 元素值

L=map(lambda x:(-1) **((x-1)/2)*x, [1 ,3 ,5 ,7 ,9])

list(L)

[1.0, -3.0, 5.0, -7.0, 9.0]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值