内置函数
print(globals()) # 字典形式返回全局变量 print(locals()) # 字典形式返回当前位置局部变量 # eval() 执行字符串 s = "{'k1': '1', 'k2': '2'}" dic1 = eval(s) # 字符串去掉了引号 print(dic1, type(dic1)) # {'k1': '1', 'k2': '2'} <class 'dict'> print(eval('2+2')) # 4 print(eval('print("test")')) # test None 内层print去掉引号输出test,没有返回值故外层print输出None # exec() 执行字符串内部代码,不返回结果 print('exec', exec('2+2')) # exec None # 输入输出 number = input('请%s输入金额:' % 'Jerry') # input支持字符串格式化 print(number) print('a', 'b', 3, sep='*', end='!') # sep设置输出字符连接符,end设置结束符 print('c') # a*b*3!c f1 = open('log', encoding='utf-8', mode='w') print('test2', file=f1) # 输出内容到文件 f1.close() help(int()) # 帮助,显示函数所有方法 print(hash('test')) # 6406571659857012385 不可变对象通过hash算法转换成hash值 print(hash((1, 2, 3))) # 529344067295497451 print(hash(1)) # 1 数字hash还是原数字 # print(hash([1, 2, 3]))# 列表是可变对象,不可hash print(id('test')) # 140574420681904 返回对象内存地址 def F1(): pass print(callable(F1)) # True callable()检查对象是否可调用 print(callable('test')) # False # dir() 不带参数时,返回当前范围内的变量、方法和定义的类型列表 print( dir()) # ['F1', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'dic1', 'f1', 'number', 's'] # 带参数时,返回参数的属性、方法列表 print( dir(F1())) # ['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] # 迭代器相关: range() iter() next() # len() 返回可迭代对象的长度 print(len(range(3))) # 3 # iter() 等于 __iter__() L1 = [1, 2, 3, 4] L1_obj = iter(L1) print(L1_obj) # <list_iterator object at 0x7fc12e1b70a0> # next() 等于__next__() print(L1_obj.__next__()) # 1 print(next(L1_obj)) # 2 # 数据类型 # int 转换数字/整型 print(int('123')) # 123 print(int(1.543)) # 1 截断转换整型 # print(int('1.543'))#***int 不能直接将小数点字符转换整型 print(float('1.543')) # 1.543 float可直接转换 # bin 十进制转二进制字符串 print(bin(10), type(bin(10))) # 0b1010 <class 'str'> 0b代表二进制 # oct 十进制转八进制字符串 print(oct(10), type(oct(10))) # 0o12 <class 'str'> 0o代表八进制 # hex 十进制转十六进制字符串 print(hex(13), type(hex(13))) # 0xd <class 'str'> 0x代表十六进制 # str() 将数据转换为字符串 # 数学运算 # 绝对值 print(abs(-3)) # 3 # 除法运算,返回一个包含 商和余数 的元组 print(divmod(10, 3)) # (3, 1) # 对浮点数四色五入,默认保留整数 print(round(1.2355, 3)) # 1.236 # pow() 求x的y次幂; 三个参数时表示 x**y/z 取余 print(pow(2, 3)) # 8 print(pow(2, 3, 3)) # 2 # sum() 返回可迭代对象的和 print(sum([1, 2, 3], 10)) # 16 # min() 返回可迭代对象的最小值,可加key,key为函数名,通过函数的规则返回最小值 # 与sum略有不同,min第一个参数为可迭代对象,第二个参数为函数key,函数可自定义 print(min([1, 2, 3, -4])) # -4 print(min([1, 2, 3, -4], key=abs)) # 1 # max() 返回可迭代对象的最大值,与min()相同,可加key print(max([1, 2, 3, -4], key=abs)) # -4 # 数据结构 # list() 将可迭代对象转换为列表,如果是字典默认将key作为列表元素 tu1 = (1, 2, 3) print(list(tu1)) # [1, 2, 3] l1 = list((1, 2, 3)) print(l1) # [1, 2, 3] l2 = list({'key1': 'value', 'key2': 2}) print(l2) # ['key1', 'key2'] # tuple() 将可迭代对象转换为元组,如果是字典默认将key作为元组的元素 # reversed() 列表翻转,并返回翻转后的迭代器 tu2 = (1, 2, 3) print(reversed(tu2)) # <reversed object at 0x7f9c2f694ee0> for i in reversed(tu2): print(i) # 3 2 1 # slice() 构造切片对象,用于列表的切片规则 L3 = [1, 2, 3, 4, 5] L4 = [6, 7, 8, 9, 10] rule = slice(1, 4, 2) print(L3[rule]) # [2, 4] print(L4[rule]) # [7, 9] # format() 数据处理,精计算等 print(format('test', '<20')) # 设置输出字符长度,左对齐 print(format('test', '>20')) # 右对齐 print(format('test', '^20')) # 居中 # bytes() 数据类型转换 s1 = 'test' b1 = s1.encode('utf-8') b2 = bytes(s1, encoding='utf-8') print(b1, b2) # b'test' b'test' 两种方式相同 # ord() 查找字符的编码位置 print(ord('a')) # 97 ASCII码位置 print(ord('王')) # 29579 unicode位置 # chr() 输入位置查找字符 print(chr(97)) # a print(chr(666)) # ʚ # ascii() 返回表示对象的字符串,对于字符串中的非 ASCII 字符则返回通过 repr() 函数使用 \x, \u 或 \U 编码的字符 print(ascii('test')) # 'test' print(ascii(123)) # 123 print(type(ascii(123))) # <class 'str'> print(ascii('王')) # '\u738b' # repr() 返回一个对象的str形式 print('{"key1": "value"}') # {"key1": "value"} print(repr('{"key1": "value"}')) # '{"key1": "value"}' # 可将格式字符保留 print("物品\t单价\t数量\n包子\t1\t2") # 物品 单价 数量 包子 1 2 print(repr("物品\t单价\t数量\n包子\t1\t2")) # '物品\t单价\t数量\n包子\t1\t2' # %r repr字符串格式化,同样是str形式 s2 = 'Jerry' print('hello, %r' % s2) # hello, 'Jerry' # sorted() 对可迭代对象进行排序, 可使用key添加规则, 返回列表 print(sorted((1, 2, 3, -1))) # [-1, 1, 2, 3] print(sorted((1, 2, 3, -1), key=abs)) # [1, -1, 2, 3] 绝对值排序 dic2 = {'a': 1, 'c': 2, 'd': 4, 'b': 3} def F2(f): return dic2[f] print(sorted(dic2)) # ['a', 'b', 'c', 'd'] 按key排序 print(sorted(dic2, key=F2)) # ['a', 'c', 'b', 'd'] 按value排序 # all() 可迭代对象中全 都是 True时返回True # any() 可迭代对象中有 一个 True时返回True print(all([1, 2, True, (0, 1)])) # True print(all([1, 2, True, (0)])) # False print(any([0, False, ''])) # False 空字符串为假 print(any([0, False, '0'])) # True 字符串0为真 # zip() 拉链方法,对多个可迭代对象纵向拼接,返回一个迭代器, 迭代器长度由最短迭代对象决定 L1 = [1, 2, 3, 4] L2 = ['test1', 'test2', 'test3'] tu1 = ('菜鸡', '入门', '高手') new_obj = zip(L1, L2, tu1) for i in new_obj: print(i) """ (1, 'test1', '菜鸡') (2, 'test2', '入门') (3, 'test3', '高手') """ # map() 循环模式:对可迭代对象元素按函数逻辑处理,返回迭代器 def F3(a): return a ** 2 obj = map(F3, [1, 2, 3]) for i in obj: print(i) # 1 4 9 # 与推导式类似 obj1 = [i ** 2 for i in range(1, 4)] print(obj1) # [1, 4, 9] # 例二: def F4(x, y): return x + y obj2 = map(F4, [1, 2, 3], [4, 5, 6]) for i in obj2: print(i) # 5 7 9 # filter() 过滤器,对可迭代对象元素进行筛选,对满足函数条件的值添加到迭代器中 def F5(a): return a % 2 == 0 obj3 = filter(F5, [1, 2, 3, 4, 5, 6]) for i in obj3: print(i) # 2 4 6 # 类似推导式筛选 obj4 = [i for i in [1, 2, 3, 4, 5, 6] if i % 2 == 0] print(obj4) # [2, 4, 6] # lambda 匿名函数,格式:函数名 = lambda 形参: 返回值 def F6(x, y): return x + y re = lambda x, y: x + y print(F6(2, 3), re(2, 3)) # 5 5 re1 = filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6]) for i in re1: print(i) # 2 4 6 re2 = map(lambda x: x ** 2, [1, 2, 3, 4, 5, 6]) for i in re2: print(i) # 1 4 9 16 25 36 L5 = [('test1', 5), ('test2', 3), ('test3', 4)] print(sorted(L5, key=lambda x: x[1], reverse=True)) # [('test1', 5), ('test3', 4), ('test2', 3)] reverse=True倒序
# 例题 # 1、给所有name加上姓氏.Wang,得到新的列表 dic3 = [{'name': 'Tom'}, {'name': 'Jerry'}] # 方法一: L6 = list(map(lambda X: X['name'] + '.Wang', dic3)) print(L6) # 方法二: L7 = [i['name']+'.Wang' for i in dic3] print(L7) # 2、筛选价格大于20的商品 shop = { 'computer': 5000, 'phone': 4000, 'book': 15 } # 方法一: L8 = filter(lambda X: shop[X] > 20, shop) for i in L8: print(i) # 方法二: L9 = {(k, v) for k, v in shop.items() if v > 20} print(L9) # 3、计算购买每种商品的总价格 shop_L = [ {'name': 'computer', 'shares': 3, 'price': 5000}, {'name': 'phone', 'shares': 5, 'price': 4000}, {'name': 'book', 'shares': 10, 'price': 15}, ] # 方法一: count_L = list(map(lambda X: {X['name']: X['shares'] * X['price']}, shop_L)) print(count_L) # 方法二: count_l = [{i['name']: i['shares'] * i['price']} for i in shop_L] print(count_l) # 4、将列表按照value分别从大到小、从小到大排序 L10 = [{'age': 1}, {'age': 44}, {'age': 94}, {'age': 12}, {'age': 32}, {'age': 11} ] print(sorted(L10, key=lambda x: x['age'])) print(sorted(L10, key=lambda x: x['age'], reverse=True))