day013内置函数一

一、内置函数一

1.作用域相关的

locals()    返回当前作用域中的名字
globals()   返回全局作用域中的名字

2.迭代器相关的

range()     生成数据
next()      迭代器向下执行一次,内部实际使用了__next__()方法返回迭代器的下一个项目
iter()      获取迭代器,内部实际使用的是__iter__()方法获取迭代器
lst = ["唐伯虎", "小娟", "张鹤伦", "烧饼"]

it = lst.__iter__()     # 获取迭代器
print(it.__next__())    # 执行一次,输出一个元素

it = iter(lst) # 获取迭代器
print(it.__next__())
print(next(it)) # 相当于 __next__()

3、字符串类型代码的执行

eval()  执行字符串类型的代码,并返回最终结果

fe1: eval执行有返回值

print(eval("2+2")) # 4
n = 8
print(eval("2+n")) # 10

def func():
    print(666)
eval("func()") # 666

code="1+2+3+4+5"
c = compile(code, "", mode="eval") #compile将字符串类型的代码编译
print(eval(c))

fe2: eval() 可以把字符串类型的数据转化成具体的某些数据(如str-->list)

qianduan = "[1,2,3,4,5]" # json
lst = eval(qianduan)
print(lst) # 列表

exec() 仅执行字符串类型的代码, 不会有返回值

fe: exec() 仅执行代码,不会有返回值

code = """
for i in range(10):
print(i)
for j in range(10):
print(j)
"""
c = compile(code, "", mode="exec")
exec(c) #仅执行代码,不会有返回值

compile() 将字符串类型的代码编译,代码对象能够通过exec()语句或者eval()进行求值。

fe:compile()在有交互的情况下,用 single 模式

code = """name = input('请输入你的名字')"""
c = compile(code, "", mode="single") # single 有交互
exec(c)
print(name) # pycharm的提示有的时候是不对的

4.输入和输出相关的

input()     获取用户输入的内容
print()     打印输出

5.内存相关

hash()      获取到对象的哈希值(int, str, bool, tuple),数字的哈希值就是它本身,哈希值不可以做密码,每次重新运行的哈希值不一样
id()        获取到对象的内存地址

6.文件操作相关

open()      用于打开一个文件,创建一个文件句柄(句柄用来操控文件的)

7.模块相关

__import__()    用于动态加载类和函数

8.调用相关

callable()  用于检查一个对象是否可调用的
如果返回True,object有可能调用失败,但如果返回False,绝对调用不成功

9.查看内置属性

dir()   查看对象的内置属性,方法
访问的是对象中的 __dir__() 方法

10.基础数据类型相关

1.数字相关

bool()  将给定的数据转换成bool值,如果不给值,返回False
int()   将给定的数据转换成int值,如果不给值,返回0
float() 将给定的数据转换成float值,也就是小数
complex()   创建一个复数,第一个参数为实部,第二个参数为虚部,或者第一个参数直接用字符串来描述复数

2.进制转换

bin()   将给的参数转换成二进制     0b
otc()   将给的参数转换成八进制     0o
hex()   将给的参数转换成十六进制   0x

3.数学运算

abs()   返回绝对值,取模
divmode()   返回商和余数
round()     四舍五入(这里有点小问题),一般不用内置的四舍五入,自己写
pow(a, b)   求a的b次幂,如果有三个参数,则求完次幂后对第三个数取余
sum()   求和
min()   求最小值
max()   求最大值

fe.四舍五入内置的例子及自定义的

print(round(4.4)) # 如果整数位是偶数靠近偶数进行舍弃 -
print(round(5.4)) # 如果整数位是偶数靠近偶数进行舍弃 +

自定义的
def func(num): # "5.4123456"  ["5", "4123456"]
    fu = 1
    if num < 0:
    fu = -1

    num = abs(num)
    snum = str(num)
    if int(snum.split(".")[1][0])>=5:  # 入
    return (int(snum.split(".")[0])+1)*fu
    else:   #  舍
    return int(snum.split(".")[0])*fu

print(func(11.99))

11.数据结构相关

1.列表和元组

list()  将一个可迭代对象转换成列表
tuple() 将一个可迭代对象转换成元组
reversed()  将一个序列翻转,返回翻转序列的迭代器(这里为了通用(照顾元组)才返回迭代器,而不是返回列表)
slice() 列表的切片,  主要用于切大量的相同列表

fe:slice()

st = "⼤家好, 我是麻花藤"
s = slice(1, 6, 2)
print(st[s])    # 一个列表还不明显,还不如用索引切片来得快

fe2:
lst1 = [1,2,3,4,5,6,7,8,9]
lst2 = [1,2,3,4,5,6,7,8,9]
lst3 = [1,2,3,4,5,6,7,8,9]

s = slice(1, 6, 2)      # 对多个列表进行相同的处理
print(lst1[s])
print(lst2[s])
print(lst3[s])

2.字符串相关

str()   将数据转化成字符串
format()    与具体数据相关,用于计算各种小数,精算等。

fe:

print(format('test', '<20')) # 左对⻬
# 字符串
print(format('test', '>20')) # 右对⻬
print(format('test', '^20')) # 居中
# 数值
print(format(3, 'b')) # ⼆进制
print(format(97, 'c')) # 转换成unicode字符
print(format(11, 'd')) # ⼗进制
print(format(11, 'o')) # ⼋进制
print(format(11, 'x')) # ⼗六进制(⼩写字⺟)
print(format(11, 'X')) # ⼗六进制(⼤写字⺟)
print(format(11, 'n')) # 和d⼀样
print(format(11)) # 和d⼀样
# 浮点数
print(format(123456789, 'e')) # 科学计数法. 默认保留6位⼩数
print(format(123456789, '0.2e')) # 科学计数法. 保留2位⼩数(⼩写)
print(format(123456789, '0.2E')) # 科学计数法. 保留2位⼩数(⼤写)
print(format(1.23456789, 'f')) # ⼩数点计数法. 保留6位⼩数
print(format(1.23456789, '0.2f')) # ⼩数点计数法. 保留2位⼩数
print(format(1.23456789, '0.10f')) # ⼩数点计数法. 保留10位⼩数
print(format(1.23456789e+10000, 'F')) # ⼩数点计数法.

bytes() 把字符串转化成bytes类型

fe:

s = "你好"
bs = s.encode("UTF-8")
print(bs)
s1 = bs.decode("UTF-8")
print(s1)
bs = bytes(s, encoding="utf-8") # 把字符串编码成UTF-8, 网络通信要用到它
print(bs)

bytearray() 返回一个新字节数组,这个数字里的元素是可变的,并且每个元素的值范围都是[0,256] fe:

ret = bytearray('alex',encoding='utf-8')
print(ret[0])
print(ret)

memoryview() 查看bytes在内存中的情况

s = "内存"
m = memoryview(s.encode("utf-8")) # 不给程序员用的
print(m)

ord() 输入字符找出对应的字符编码的位置 chr() 输入字符编码的位置数字找出对应的字符 ascii() 是ascii码中的就返回该值,不是就返回unicode \u...

fe:

# 找到对应字符的编码位置
print(ord('a'))
print(ord('中'))

# 找到对应编码位置的字符
print(chr(97))
print(chr(20013))

# 在ascii中就返回这个值. 如果不在就返回\u...
print(ascii('a'))
print(ascii('好'))

repr() 返回一个对象的官方表现形式,就是他在python最底层的样子

fe:字符串的原样及原样输出

python使用的字符串实际上和c的字符串是不一样的. python对字符串进行了处理
print("你好我叫\\刘德\n华我叫周润发")

# 字符串最应该显示的样子. 最底层, 最官方的显示效果
print(repr("你好我叫\\刘德\n华我叫周润发")) # __repr__ __str___

print(r"你给我显\示一下\n") # r"" 原样输出
print(r"\/\d+\w|\d?*")

fe:占位赋值

name = "胡辣汤"
# 3.6以上

print(f"我想吃{name}") # f format  {占位赋值}

print("我想吃%s" %  name)

3、数据集合

dict()  创建一个字典
set()   创建一个集合
frozenset()  创建一个冻结的集合,冻结的集合不能进行添加和删除操作

4、其他相关

len()  返回一个对象中的元素的个数
sorted()  对可迭代对象进行排序操作(知道lamda以后就会清楚了)
enumerate()  获取集合的枚举对象

fe:拿到集合的索引和元素

lst = ["alex", "wusir", "taibai"]
for index, el in enumerate(lst):  #可以索引和元素
print(str(index)+"==>"+el)

lst = ["电脑", "键盘", "鼠标"]
for i, el in enumerate(lst, 1): #可以让索引从1开始,任意数字开始
print(i, el)

all() 可迭代对象的全部是True,结果才是True 类似 and

any() 可迭代对象中有一个是True,结果就是True 类似 or

fe:

print(all([1,2,True,0])) # False   相当于 and
print(any([1,'',0])) #  True   相当于  or

zip() 函数用于可迭代对象作为参数,将对象对应的元素打包成一个个元组,然后返回由这些元组组成的列表,如果各个迭代器的元素个数不一样,则返回的列表长度与最短的对象相同(水桶效应)

fe: zip拉链函数

lst1 = ["胡歌", "霍建华", "彭于晏", "吴彦祖"]
lst2 = [37,46,50]
lst3 = ["仙剑三", "花千骨", "湄公河行动", "警察故事"]

z = zip(lst1, lst2, lst3) # 第0个放一起, 第一个放一起, 第二个放一起. 水桶效应
print("__iter__" in dir(z)) # 可以迭代

for el in z:
print(el)

filter() 过滤(lamda之后)

map() 会根据提供的函数对指定序列做映射(lamda之后)

posted @ 2018-11-03 08:47  一片疏影  阅读(115)  评论(0编辑  收藏  举报