python内置函数
print(locals()) #返回本地作用域中的所有名字
print(globals()) #返回全局作用域中的所有名字
global 变量
nonlocal 变量
迭代器.__next__()
next(迭代器)
迭代器 = iter(可迭代的)
迭代器 = 可迭代的.__iter__()
range(1,2)是可迭代的,不是迭代器
help()帮助
help(str)
dir() 查看一个变量拥有的方法
print(dir([]))
print(dir(1))
callable()检查一个变量是否为函数(是否能被调用)
def func():pass
print(callable(func))
id()查看内存地址
hash()可以对字符串,元组哈希,每哈希一次它的值就不一样
字典的寻址方式:key进行hash,将value存在hash地址上,通过hash值来找到value
import time
t = __import__('time')
print(t.time())
某个方法属于某个数据类型的变量,就用.调用
如果某个方法不依赖于任何数据类型,就直接调用 —— 内置函数 和 自定义函数
print('我们的祖国是花园',end='') #指定输出的结束符
print('我们的祖国是花园',end='')
print(1,2,3,4,5,sep='|') #指定输出多个值之间的分隔符
f = open('file','w')
print('aaaa',file=f) #默认是打印到屏幕,如果指定文件,打印内容会打印到指定文件中
f.close()
eval('print(123)')
exec('print(123)')
print(eval('1+2+3+4')) # 有返回值
print(exec('1+2+3+4')) #没有返回值
exec和eval都可以执行 字符串类型的代码
eval有返回值 —— 有结果的简单计算
exec没有返回值 —— 简单流程控制
eval只能用在你明确知道你要执行的代码是什么(不安全,建议不使用)
code = '''for i in range(10):
print(i*'*')
'''
exec(code)
code1 = 'for i in range(0,10): print (i)'
compile1 = compile(code1,'','exec')
exec(compile1)
code2 = '1 + 2 + 3 + 4'
compile2 = compile(code2,'','eval')
print(eval(compile2))
code3 = 'name = input("please input your name:")'
compile3 = compile(code3,'','single')
exec(compile3) #执行时显示交互命令,提示输入
print(name)
name #执行后name变量有值
"'pythoner'"
复数 —— complex
浮点数(有限循环小数,无限循环小数) != 小数 :有限循环小数,无限循环小数,无限不循环小数
浮点数
354.123 = 3.54123*10**2 = 35.4123 * 10
f = 1.781326913750135970
print(f)
如果小数特别长,后面可能不准,因为二进制转换问题导致,所有语言都有这个问题
print(bin(10)) #二进制
print(oct(10)) #8进制
print(hex(10)) #16进制
0b1010 #0b代表二进制
0o12 #0o代表8进制
0xa #0x代表16进制
print(abs(-5)) #绝对值
print(abs(5))
print(divmod(7,2)) # div除法 mod取余
print(divmod(9,5)) # 除余
(3, 1)
(1, 4)
print(round(3.14159,3)) #取小数点后3位,四舍五入
3.142
print(pow(2,3)) #pow幂运算 == 2**3
print(pow(3,2))
print(pow(2,3,3)) #幂运算之后再取余
print(pow(3,2,1))
8
9
2
0
sum(iterable,start) 求和,只能传两个参数,第一个是可迭代对象
ret = sum([1,2,3,4,5,6])
print(ret)
ret = sum([1,2,3,4,5],6)
print(ret)
21
21
print(min(1,2,3,-4))
print(min(1,2,3,-4,key = abs)) #以绝对值来找最小值
print(max(1,2,3,-4))
print(max(1,2,3,-4,key = abs))#以绝对值来找最大值
-4
1
3
-4
reversed()
l = [1,2,3,4,5]
l.reverse()
print(l)
l = [1,2,3,4,5]
l2 = reversed(l)
print(l2)
保留原列表,返回一个反向的迭代器
使用for对列表的打印
for i in l2:
print(i)
[5, 4, 3, 2, 1]
<list_reverseiterator object at 0x000001B7A308A208>
5
4
3
2
1
切片,slice只是定义一个规则
l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])
print(l[1:5:2])
format-https://www.cnblogs.com/Eva-J/articles/7266245.html
bytes 转换成bytes类型
我拿到的是gbk编码的,我想转成utf-8编码
print(bytes('你好',encoding='GBK')) # unicode转换成GBK的bytes
print(bytes('你好',encoding='utf-8')) # unicode转换成utf-8的bytes
网络编程 只能传二进制
照片和视频也是以二进制存储
html网页爬取到的也是编码
b_array = bytearray('你好',encoding='utf-8')
print(b_array)
print(b_array[0])
'\xe4\xbd\xa0\xe5\xa5\xbd'
s1 = 'alexa'
s2 = 'alexb'
bytearray修改字符串的时候可以节省内存
print(ord('好')) #按照Unicode转成数字
print(ord('1')) #按照Unicode转成数字
print(chr(97)) #按照Unicode转成字符
22909
49
a
print(ascii('好')) #只要是ascii码的内容就打印出来,不是就转换成‘\u’
print(ascii('1'))
'\u597d'
'1'
%r就调用了repr,原本是什么类型,打印出来就是什么类型,原封不动调用
name = 'egg'
print('你好%r'%name)
print(repr('1'))
print(repr(1))
你好'egg'
'1'
1
frozenset 不可变集合,可以作为字典的key
all(接收可迭代对象) #如果里面有一个为False那么返回False
any(接收可迭代对象) #如果里面有一个为True那么返回True
返回是可迭代对象,一一定义,如果是字典那么只会打印key值
l = [1,2,3,4,5]
l2 = ['a','b','c','d']
l3 = ('*','**',[1,2])
d = {'k1':1,'k2':2}
for i in zip(l,l2,l3,d):
print(i)
(1, 'a', '*', 'k1')
(2, 'b', '**', 'k2')
filter(只能传函数名,需要判断的可迭代对象) #如果为True就留下,返回的结果是迭代器
def is_odd(x):
return x % 2 == 1
def is_str(s):
return s and str(s).strip()
ret = filter(is_odd, [1, 6, 7, 12, 17])
ret = filter(is_str, [1, 'hello','',' ',None,[], 6, 7, 'world', 12, 17])
print(ret)
for i in ret:
print(i)
map(函数名,可迭代对象) #对可迭代对象进行判断,返回迭代器
ret = map(abs,[1,-4,6,-8])
print(ret)
for i in ret:
print(i)
filter 执行了filter之后的结果集合 <= 执行之前的个数
filter只管筛选,不会改变原来的值
map 执行前后元素个数不变
值可能发生改变
key的内容是以绝对值排序
l = [1,-4,6,5,-10]
l.sort(key = abs) # 在原列表的基础上进行排序,不生成新的列表
print(l)
[1, -4, 5, 6, -10]
print(sorted(l,key=abs,reverse=True)) # 生成了一个新列表 不改变原列表 占内存
[-10, 6, 5, -4, 1]
l = [' ',[1,2],'hello world']
new_l = sorted(l,key=len) #按照长度排序,key=函数名(可自定义)
print(new_l)
[[1, 2], ' ', 'hello world']
匿名函数
lambda 形参1,形参2: 返回表达式
普通函数
def add(x,y):
return x+y
print(add(1,2))
修改成匿名函数
add = lambda x,y:x+y
print(add(1,2))
dic={'k1':10,'k2':100,'k3':30}
def func(key):
return dic[key]
print(max(dic,key=func)) #根据返回值判断最大值,返回值最大的那个参数是结果
print(max(dic,key=lambda key:dic[key]))