内置函数

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))

 

posted @ 2022-07-06 20:42  尐少  阅读(25)  评论(0编辑  收藏  举报