eval、exec和其他函数
一、eval函数
1). eval函数的功能
- 将字符串形式的变量转换成Python的数据类型
- 元组 字典 列表 有返回值
- 将字符串形式的数字的计算式直接转换并计算出结果
- 必须是单行代码
2). 用法演示
- 将字符串提取内容转换为四则运算
g = '1 + 2 * 3 -2 / (-1 -1)'
g = eval(g)
msg = '4 ** 5'
a = eval(msg)
- 将字符串提取内容转换为int
a = '1.1'
a = eval(a)
- 将字符串提取内容转换为list
b= '[1,2,3]'
eval(b)
- 将字符串提取内容转换为tupe
c = '(1,2,3,)'
c = eval(c)
f = '1,2,3,4'
f = eval(f)
- 将字符串提取内容转换为dict
d = '{1:1,2:2,3:3}'
d = eval(d)
- 将字符串提取内容转换为set
e = '{1,2,3}'
eval(e)
- 补充:交互器写多行代码的方法
code = '''
pass
'''
3).exec函数
- 能将多行字符串转换成代码
- 没有返回值
- exec模板
code = """
for i in range(5):
print(i)
"""
exec(code)
二、其他函数
1). isinstance() 判断对象是否为类的实例
isinstance(1,int)
isinstance('abc',str)
isinstance([],list)
isinstance({},dict)
isinstance({1,2},set)
2). sum()求和
d = [1,2,3,4,5]
sums = sum(d)
3). bytearray() 转换为字节数组
s = "ABC哈哈大圣"
s = s.encode("utf8")
s = bytearray(s)
s[0] = 97
print(s[5])
s[5] = 137
s = s.decode("utf8")
print(s)
4).callable(a) 判断是否可调用,是否是函数
def a():
pass
boolean = callable(a)
5). locals()返回局部变量
6). globals()返回全局变量
7). repr(obj)返回规范化的字符串表示该对象的方法
8). zip将两个可迭代对象打包成一个对应元素的元组列表
print(list(zip([0,1,2,3],["a","b","c","d"])))
9). complex(int_a, int_b) 复数
10). round(2.35434, 3)保留几位小数
11). abs(-1)取绝对值
12). 编码转换
name='你好'
print(bytes(name,encoding='utf-8')) # 转换为字节,py3把除非Unique编码的汉字全部以16进制表示
print(bytes(name,encoding='utf-8').decode('utf-8')) # 先编码,再解码
13). hash()哈希运算
- 可hash的数据类型即不可变数据类型(预防篡改),不可hash的数据类型即可变数据类型
hash_after = hash('12sdfdsaf31231asdfasdfsadfsadfasdfasdf23')
14). help(dict) 查看帮助信息
15). 幂运算
a = pow(3,3) # 3**3
b = pow(3, 3, 2) # 3**3%2 #3的3次方然后取余
16). 反转
l=[1,2,3,4]
h = reversed(l) # 返回一个反转的列表迭代器
print(next(h))
print(l)
17). slice()自定义切片功能
l='hello'
s1=slice(3,5) # 定义切片(不收尾)
s2=slice(1,4,2) # 定义切片(不收尾)指定步长为2
a = l[3:5] # 直接切片
b = l[s1] # 使用定义的切片取值
c = l[s2] # 使用定义的切片取值,步长为2
d = s2.start # 查看定义的参数 开始位置
e = s2.stop # 查看定义的参数 结束位置(不收尾)
f = s2.step # 查看定义的参数 步长
18). max
注意!比较的值必须是同一个类型,否则报错
l = [1,3,100,-1,2]
maxs = max(l) # 取最大值,从前到后一个一个比较(类型必须一样)(print(min(l))
19). min
age_dic={'a':18,'b':20,'c':100,'d':30}
a = max(age_dic) # 默认比较的是字典的key
b = max(age_dic.values())
print('=======>',list(max(zip(age_dic.values(),age_dic.keys())))) # 默认比较转换结果的第一个参数
- 指定比较的值
people=[
{'name':'a','age':1000},
{'name':'b','age':10000},
{'name':'c','age':9000},
{'name':'d','age':18},
]
print(max(people, key=lambda dic:dic['age']))
20). set('hello') 变成一个集合的方式 鸭子类型转换
21). type("ss") 查看数据类型
22). vars() 获得当前作用域所有的变量值或者类型,是一个字典。
三、函数闭包
# 闭包的效果,这种情况当return了,当前函数bibao没有被释放.
def bibao():
name = "go"
def baobao():
print(name)
return baobao
func = bibao()
func()
四、补充:import导入方式
- import---调--->sys---调-->import()
import test #test.py 这个写的模块,import不能导入字符串
test.say_hi()
import 'test' # 报错
module_name='test'
m=__import__(module_name) # 这种方式为导入字符串方式导入模块
m.say_hi()