# 1.locals()和globals()
def func():
x = 1
y = 2
print(locals()) # 查看局部变量
# {'y': 2, 'x': 1}
print(globals()) # 查看当前程序所有全局变量
'''
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002BD48798128>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '1.py', '__cached__': None, 'func': <function func at 0x000002BD48331E18>}
'''
func()
# 2.eval,exec,和compile
print(123)
"print(456)" # 字符串
eval("print(456)") # 吧字符串转换成python代码去执行(有返回值)
exec("print(7889)") # 吧字符串转换成python代码去执行(无返回值)
num = eval('4+5+6') # 执行了,有返回值 15
print(num)
num = exec('4+5+6') # 执行了,没有返回值 None
print(num)
compile # 做编译
com = compile('1+2+3', '', mode='eval') # 节省时间 6
print(eval(com))
print(eval('1+2+3')) # 这句效果和上面的compile()效果一样 6
# 3.print
print('123', end='') # 不换行
print('456', end='')
print(1, 2, 3)
print(1, 2, 3, 4, 5, 6, sep=',') # 默认空格替换为 ,
'''
1234561 2 3
1,2,3,4,5,6
'''
# print()函数的小例子
import time
import sys
for i in range(0, 101, 2):
time.sleep(0.1)
char_num = i//2 # 打印多少个#
per_str = '%s%% : %s\n' % (
i, '*' * char_num) if i == 100 else '\r%s%% : %s' % (i, '*'*char_num)
print(per_str, end='', file=sys.stdout, flush=True)
'''
100% : **************************************************
'''
import sys
for i in range(0, 101, 2):
time.sleep(0.1)
char_num = i // 2
per_str = '\r%s%% : %s' % (i, '*' * char_num)
print(per_str, file=sys.stdout, flush=True)
'''
0% :
2% : *
4% : **
6% : ***
8% : ****
10% : *****
12% : ******
14% : *******
16% : ********
18% : *********
'''
# 4.input()
# 5.type()
# 6.hash
print(hash('asdsffd')) # 一开始几个都是不变的,,然后重新运行一次就变了
print(hash('asdsffd'))
print(hash('asdsffd'))
print(hash((1, 2, 3, 4)))
'''
-3561845232680097346
-3561845232680097346
-3561845232680097346
485696759010151909
'''
# 7.open
# r,w,a,r+,w+,a+(都可以加b)
f=open('tmp','r+')#r+打开文件
print(f.read(3))#如果读了在写,追加
f.seek(5)#如果seek指定了光标的位置,就从该位置开始覆盖这写
f.write('aaaaaa')#如果直接写,从头覆盖
f.close()
# 8.__import__()
import os
import sys
import time
# 9.callable:查看能不能调用
print(callable(123)) # 数字不能调用结果就是False
print(callable(open)) # 函数可以调用就返回True
# 10.dir 查看数据类型的方法
print(dir(__builtins__)) # 看着报错,,但其实不报错
print(dir(int))
print(dir(list))
print(dir(0)) # 和int一样
print(set(dir(list))-set(dir(tuple)))
# 11.int
num1 = int(123)
num2 = int(12.3) # 强制转换成int类型
print(num1, num2) # 123 12
# 12.取商/余
print(divmod(7, 3)) # (2, 1)
# 13.计算最小值
print(min(1, 2, 3, 4))
print(min([5, 6]))
#
# 13.计算最大值
print(max(1, 2, 3, 4))
print(max([5, 6]))
# 14.sum求和
print(sum(1, 2, 3, 4)) # 出错了,参数是序列,散列不行
print(sum([5, 6]))
print(sum((1, 2, 3, 4)))
# 以下的两个方式是一样的
print(1+2)
print(int(1).__add__(2))
# 15.round精确度
print(round(3.1415926, 2)) # 保留两位 3.14
# 16.pow()幂运算
print(pow(2, 3)) # 8
print(2**3) # 8
# 17.和数据结构相关的
# 1.reversed()顺序的反转
l = [1, 2, 3, 4]
# 是生成了一个新的列表,没有改变原来的列表(以后能不用reversed就不用reversed,用reverse)
print(list(reversed(l)))
# l.reverse() # 在现在的列表的基础上修改了,修改的是原来的列表
print(l)
# 2.slice切片(没卵用)
# 3.format()#除了格式化以外的作业
print(format('test', '<20')) # 长20,test居左
print(format('test', '>40')) # 长40,test居右
print(format('test', '^40')) # 长40,test居中
# 4.bytes
s = '你好'
sb = bytes(s, encoding='utf-8')
print(sb) # b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(sb.decode('utf-8')) # 你好
# 字符串是不可变,这个方法是对里面某个字符的元内存进行修改,整体内存还是不变的
sb2 = bytearray(s, encoding='utf-8')
sb2[0] = 229 # 修改 了解就好
print(sb2.decode('utf-8'))
print(sb2)
print(sb2[0])
# 5.repr
print(repr('1234'))
print(repr(1234))
print('name:%r' % ('egon')) # 你怎么传进去的就按什么格式打印出来了 name:'egon'
# 6.set和frozenset(不可变的集合)就像list和tuple
# 7.enumerate 枚举
l = ['a', 'b']
for i in enumerate(l):
print(i)
'''
(0, 'a')
(1, 'b')
'''
for i, j in enumerate(l):
print(i, j)
'''
0 a
1 b
'''
# 8.all和any
print(all([1, 2, 3])) # 只要里面全部为 True,就返回 true
print(all([0, 2, 3])) # 因为0是False
print(any([1, 2, 3])) #
print(any([0, 2, 3])) #
# 9.zip()
l = [1, 2, 3]
l2 = [4, 5, 6, 7, 8]
print(zip(l, l2)) # zip 对象
print(list(zip(l, l2))) # [(1, 4), (2, 5), (3, 6)]
l3 = {'k': 'v'}
print(list(zip(l, l3))) # [(1, 'k')]
# 10.sort和sorted
l = [1, 3, 5, -2, -6]
l.sort()
print(l)
l2 = [1, 3, 5, -2, -6]
print(sorted(l2))
print(sorted(l2, key=abs))
print(sorted(l2, key=abs, reverse=True)) # 默认从小到大排序,修改为True,则从大到小排序
'''
[-6, -2, 1, 3, 5]
[-6, -2, 1, 3, 5]
[1, -2, 3, 5, -6]
[-6, 5, 3, -2, 1]
'''
# 11.map():我要对我的列表当中的每一个值去做函数里面的操作
l = [1, 2, 3, 4, 5]
def pow2(x):
return x*x
print(list(map(pow2, l))) # [1, 4, 9, 16, 25]
# 12.filter():从一个列表当中找到所有符合筛选条件的,在组成一个新列表
def aaa(x):
return x % 2 == 1
ret = list(filter(aaa, [1, 2, 54, 3, 6, 8, 17, 9]))
print(ret) # [1, 3, 17, 9]
# 13.reduce:合并
# 格式:reduc:e(函数,序列)
from functools import reduce
def add1(x, y):
return x + y
# 把 1 2 传递给 x y,return 得到的结果作为一个 x 的参数,3 作为 y 参数,类推
print(reduce(add1, [1, 2, 3, 4, 4, 5, 6])) # 25
# reduce 的结果就是一个值