# 1、内置函数
# 什么是内置函数? 就是python给你提供的. 拿来直接⽤的函数, 比如print., input等等. 截⽌
# 到python版本3.6.2 python⼀共提供了68个内置函数. 他们就是python直接提供给我们的. 有
# ⼀些我们已经⽤过了. 有⼀些还没有⽤过. 还有⼀些需要学完了⾯向对象才能继续学习的. 今
# 天我们就认识⼀下python的内置函数.
# 不熟悉的函数:
# eval() 执⾏字符串类型的代码. 并返回最终结果
# print(eval("2+2")) # 4
# n = 8
# print(eval("2+n")) # 10
# def func():
# print(666)
# eval("func()") # 666
# exec() 执⾏字符串类型的代码
# exec("""
# for i in range(10):
# print(i)
# """)
# exec("""
# def func():
# print("我是周杰伦")
# func()
# """)
# compile() 将字符串类型的代码变异. 代码对象能够通过exec语句来执⾏或者eval()进⾏求值
# '''
# 参数说明:
# 1. resource 要执⾏的代码, 动态代码⽚段
# 2. ⽂件名, 代码存放的⽂件名, 当传⼊了第⼀个参数的时候, 这个参数给空就可以了
# 3. 模式, 取值有3个,
# 1. exec: ⼀般放⼀些流程语句的时候
# 2. eval: resource只存放⼀个求值表达式.
# 3. single: resource存放的代码有交互的时候. mode应为single
# '''
# code1 = "for i in range(10): print(i)"
# c1 = compile(code1, "", mode="exec")
# exec(c1)
# code2 = "1+2+3"
# c2 = compile(code2, "", mode="eval")
# a = eval(c2)
# print(a)
# code3 = "name = input('请输⼊你的名字:')"
# c3 = compile(code3, "", mode="single")
# exec(c3)
# print(name)
# 有返回值的字符串形式的代码⽤eval(). 没有返回值的字符串形式的代码⽤exec(). ⼀般很少⽤
# 到compile()
# callable() ⽤于检查⼀个对象是否是可调⽤的. 如果返回True, object有可能调⽤失败, 但
# 如果返回False. 那调⽤绝对不会成功
# float() 将给定的数据转换成float值. 也就是⼩数
# complex() 创建⼀个复数. 第⼀个参数为实部, 第⼆个参数为虚部. 或者第⼀个参数直接
# ⽤字符串来描述复数
# 进制转换:
# bin() 将给的参数转换成⼆进制
# otc() 将给的参数转换成八进制
# hex() 将给的参数转换成⼗六进制
# 数学运算:
# abs()
# 返回绝对值
# divmode()
# 返回商和余数
# round()
# 四舍五入
# pow(a, b)
# 求a的b次幂, 如果有三个参数.则求完次幂后对第三个数取余
# 和数据结构相关:
# 列表和元组:
# list() 将⼀个可迭代对象转换成列表
# tuple() 将⼀个可迭代对象转换成元组
# reversed() 将⼀个序列翻转, 返回翻转序列的迭代器
# slice() 列表的切片
# st = "⼤家好, 我是麻花藤"
# s = slice(1, 5, 2)
# print(st[s]) # slice:可用于多个文件切割位置相同,而split()只能执行一次一个目标
# memoryview() 查看bytes在内存中的情况
# # 查看bytes字节在内存中的情况
# s = memoryview("麻花藤".encode("utf-8"))
# print(s) # <memory at 0x00ED04A8>
# ord() 输入字符找带字符编码的位置
# chr() 输入位置数字找出对应的字符
# ascii() 是ascii码中的返回该值 不是就返回\u...
# repr() 返回⼀个对象的官⽅表⽰形式
# repr 输出⼀个字符串的官⽅表示形式.
# print(repr('⼤家好,\n \t我叫周杰伦')) # '⼤家好,\n \t我叫周杰伦'
# print('⼤家好我叫周杰伦') #⼤家好我叫周杰伦
# # 当想输出"\"或"\n"等可在打印的字符串前面加r
# print(r"你是大烧饼\n吗") # 你是大烧饼\n吗
# sorted() 对可迭代对象进⾏排序操作(讲完lamda后再讲这个)
# enumerate() 获取集合的枚举对象 # 遍历索引和列表元素
# lst = ["alex", "wusir", "taibai"]
# for index, el in enumerate(lst):
# print(str(index)+"==>"+el)
# 输出结果:0==>alex
# 1==>wusir
# 2==>taibai
# all() 可迭代对象中全部是True,
# x = [1, 2, 3, 4, 5, 7]
# for c, c1 in enumerate(x):
# print(c, c1)
# all() 可迭代对象中全部是True, 结果才是True
# any() 可迭代对象中有⼀个是True, 结果就是True
# zip() 函数⽤于将可迭代的对象作为参数, 将对象中对应的元素打包成⼀个个元组, 然
# 后返回由这些元组组成的开了表. 如果各个迭代器的元素个数不⼀致, 则返回列表⻓度与最短
# 的对象相同.
# l1 = [1,2,3,]
# l2 = ['a','b','c',5]
# l3 = ('*','**',(1,2,3))
# for i in zip(l1,l2,l3): # zip是将l1、l2、l3对应的所以打包在一起,只能用for循环遍历出来
# print(i)
# 打印结果:
# (1, 'a', '*')
# (2, 'b', '**')
# (3, 'c', (1, 2, 3))