python-内置函数
内置:python自带
def func(): a = 1 b = 2 print(locals()) print(globals()) func()
生成器函数range
range(100)#[0,100) range(5,100)#[5,100) range(1,100,2)#2为步长
range(100).__iter__()
iterator=iter(range(100)) #拿到一个迭代器
print(iterator.__next__())
print(next(iterator))
for i in range(100):
print(i)
# def itre():
# return range(100).__iter__()
查看内置属性:dir
print(dir([]))
调用相关的(可以调用):callable
def func():pass print(callable(a)) #不可以调用 print(callable(print)) #可以调用 print(callable(func)) #可以调用
帮助:help
ctrl +左键点击:pycharm
help
dir
模块:import 模块
文件操作
f = open()
打开模式:r,w,a,rb,wb,ab
编码 utf-8,gbk
哈希(是一种算法)hash,返回的是一串数字
应用:数据的存储和查找,
模块:hashlib print(id(1)) print(hash()) hash([1,2,2]) hash判断一个数据类型是否可以hash 在一个程序执行的过程中,对同一个值得hash结果总是不变 多次执行,对同一个值得hash结果可能改变
输入输出input print
s = input('提示:') print(1,2,3,4,sep='*') #sep是指定多个要打印的内容之间的分隔符 print(1,2,sep=',') #print ('%s,%s'%(1,2)) print('abc\n') print(1,end='\n') print(2) f = open('a','w') print('abc', file=f) print('123\n', file=f) print(555)
字符串类型代码的执行:eval,exec,compile
exec用于流程性代码的执行,exec没有返回值
eval用于值计算的时候,有返回值,eval 可以以python代码的形式执行一个字符串,
exec("print('123')") #exec用于流程性代码的执行 eval("print('123')") #eval 可以以python代码的形式执行一个字符串, print(exec('1+2+3-4')) #exec没有返回值 print(eval('1+2+3-4')) #eval用于值计算的时候,有返回值 code1= 'for i in range(0,10):print(i)' compilel = compile(code1,'','exec') exec(compilel)
简单求值表达式用eval
code2 = '1+2+3+4'
compile2 = compile(code2,'','eval')
print(eval(compile2))
商余divmod
ret = divmod(10,2) print(ret) ret = divmod(3,2) print(ret)
保留几位小数
print(round(3.1415926,2))
幂运算
print(pow(2,3)) print(pow(2,3,3)) #2的3次方,除以3取余数 x**y%z
求和sum,sum接收一个可迭代对象
print(sum([1+2+3+4+5+6],-2)) #逗号左边的加上逗号右边的 print(sum([1+2+3]))
min最小值
print(min([1,2,3,0])) print(min([],default=0)) #元素为空时,会有报错,default设置一个默认值,如果没有元素就会返回default设置的默认值,这样就不会有报错了
max求最大值
s = (-25,1,3,6,8) print(max(s)) print(max(s,key=abs)) print(max((),default=100))
返回值不同,reversed返回的是迭代器,不改变原来的列表的情况下生成一个新的序列的迭代器
rever返回值为None,是在原来的列表的基础上修改的
l = [2,3,5,0.1] ret = reversed(l) print(ret) print(list(ret)) #强转成列表 #next # for l.reverse() print(l) print(l.reverse()) #返回值为None
slice
l = [2,3,5,0.1] sl = slice(1,5,2) #实现了切片的函数, # print(l[sl]) #l[1,5,2]语法糖 print(sl)
formate的另类用法,但下面方法用的不多
print(format('test','<20')) #这里<是左对齐,20表示总字符是20,左对齐 print(format('test','>20')) #>表示右对齐 print(format('test','^20')) #^表示居中
网络编程的时候:能在网络上传递的必须是字节
ret = bytes('你好',encoding='utf-8') # # 中间是网络传输的过程 print(ret.decode(encoding='utf-8'))
对比较长的字符串做修改的时候,指定某一处进行修改,不会改变这个bytearry的内存地址
ret = bytearray('alex',encoding='utf-8') print(id(ret)) print(ret[0]) ret[0] = 65 print(ret) print(id(ret))
repr
print(repr(1)) print(repr('1')) print(repr([1,2])) print('name:%s'%('金老板')) print('name:%r'%('金老板'))
enumerate枚举
l = ['1','2','3','4'] for i in enumerate(l): print(i)
all,any
一个为假就为假 print(all([1,2,3,4,0])) print(all([1,2,3,4])) print(all([1,2,3,4,None])) print(all([1,2,3,4,''])) 一个为真就为真 print(any([True,False]))
拉链函数zip
print(list(zip((1,2,3),(4,5,6),('a','b'))))
筛选函数
就是有一个可迭代对象,想要一个新的内容集,是从原来可迭代对象中筛选出来的
新内容少于等于原内容的时候,才能用到filter.
filter和map
参数很相近,都是一个函数名+可迭代对象
且返回值也很相近,都是返回可迭代对象
区别:
filter是做筛选的,结果还是原来就在可迭代对象中的项
map是对可迭代对象中的每一项做操作的,结果不一定是原来就在可迭代对象中的项
filter和map
def func(x): return x and x.strip() l = ['test',None,'','str',' ','END'] ret = filter(func,l) print(list(ret)) def is_odd(x): if x>10: return True ret = filter(is_odd,[1,4,6,7,9,12,17]) print(list(ret)) def is_odd(x): if x%2 == 0: return True ret = filter(is_odd,[1,4,6,7,9,12,17]) print(list[ret]) 新内容的个数等于原内容的个数 L = [1,2,3,4,5,6,7,8] def a(x): return x*x ret = map(a, L) print(list(ret)) ret = map(abs,[-1,-3,5,-7]) print(list(ret))
进度条
import time for i in range(0,101,2): time.sleep(0.1) char_num = i//2 #打印多少个'*' per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num) #/r表示把光标返回到初始位置 print(per_str,end='', flush=True)