模块和内置函数
一、模块的使用
1.什么是模块
模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称
2.什么是包?
包,package本质就是一个文件夹,和文件夹不一样的是它有一个__init__.py文件,包是从逻辑上来组织模块的,也就是说它是用来存放模块的,如果你想导入其他目录下的模块,那么这个目录必须是一个包才可以导入。
3.模块的导入:导入模块的本质,就是把python文件拿过来执行一次。
实际上就是把该模块的代码赋值给模块名,也就是module.py里面所有的代码,赋值给了module这个变量,如果是from module import fun,就是把module打开,把module里面的fun方法拿过来使用
Eg:model1.py文件中的内容如下
def run():
print('molde模块调用')
def run1():
print('molde1模块调用')
def run2():
print('molde2模块调用')
name=5
1) 导入方式一:导入模块,调用模块中的函数,注意调用方式
import model1 #导入模块
model1.run1()
返回结果:
molde1模块调用
2)导入方式二:只导入某个函数的时候
from model1 import run,run1
run()
run1()
返回结果:
molde模块调用
molde1模块调用
3)导入方式三: 导入该模块中的所有方法,慎用
from model1 import *
run()
run1()
返回结果:
molde模块调用
molde1模块调用
4)导入方式四:可以导入变量
from model1 import name
print(neme)
返回结果:
5
5) 方式五:执行其他目录下的py文件
Python3里py文件只要是在文件夹就行了,在python2里面, 必须是在一个包里面,包和文件夹的区别就是包下面有个__init__.py,如果你要导入其他文件夹下面的python文件,那么必须是一个包,python2里面跨目录执行的话,是从有个__init__.py文件的包里才可以导入其他目录下的python文件
直接在pycharm运作
from day4.set1 import hhh
hhh()
注意:导入其他目录下的py文件的时候,直接用pycharm可以运行,在命令行执行会报错:
因为导入模块的时候,python首先在当前目录下去找这个模块,如果在当前目录下没有找到这个文件的话,那么就去环境变量里面的目录找,环境变量就是用来让你在任意一个目录都可以使用这个命令,在使用pycharm可以直接运行,是因为pycharm自动将要执行的文件所在的目录加到了环境变量里面了,而命令行是没有的,在命令行执行就要手动添加了
通过查看环境变量,确定所在目录是否在环境变量里面:
import sys
print(sys.path)#看系统环境变量
如果再环境变量里不存在的话,需要手动添加:
sys.path.append(r'E:yz_code') #r表示里面的东西不转义
from day4.set1 import hhh
hhh()
二、内置函数
1.all:判断可迭代的对象里面的值是否都为真
print(all([1,2,3,0])) #=False:
print(all([1,2,3,1])) #=True
2. any判断可迭代的对象里面的值是否有一个为真
print(any([0,0,0,0,0])) #= False
print(any([0,0,0,0,1])) #=True
3.bin十进制转二进制
print(bin(10))# =0b1010
print(bin(12)) #0b1100
4. 函数都是强制类型转换
print(bool('s'))#=True把一个对象转换成布尔类型
print(bool(0))#=False
int()#整形、float()#小数、str()#字符串、dict()#字典、list()#列表、set()#集合、tuple()#元组
5. callable判断传入的对象是否可调用
def func():
pass
print(callable(func))
返回结果:
True
6. chr打印数字对应的ascii
print(chr(98)) # =b
7. 打印字符串对应的ascii码
print(ord('b'))#=98
8. dict强转为字典
print(dict(a=1,b=2))#转换字典
返回结果:
{'b': 2, 'a': 1}
9. dir打印传入对象的可调用方法
print(dir('a')) #字符串a可调用的方法
['__add__', '__class__', '__contains__', '__delattr__', '__dir__'…..]
10. eval执行python代码,只能执行简单的,定义数据类型和运算
print(eval('1+2')) #=3
11. exec执行稍微复杂的python代码
print(exec('def a():pass'))
12. filter根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,返回true保存
def func(num1):
return num1
print(list(filter(func,[0,1,2,3,4])))#在python3里面这么用是没问题
print(filter(func,[0,1,2,3,4]))#在python2里面这么用是没问题
返回结果:[1, 2, 3, 4]
13. mape根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,保存前面函数返回的所有结果
def func(num1):
return num1
print(list(map(func, [0,1, 2, 3, 4])))#在python3里面这么用是没问题
返回结果:[0, 1, 2, 3, 4]
14. globals返回程序内所有的变量,返回的是一个字典,函数里面的局部变量不会返回
print(globals())
返回结果:
{'__cached__': None, '__file__': 'I:/第五周/第四周作业/内置函数.py', '__package__': None, '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, '__spec__': None, '__name__': '__main__', '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000026C1D689B0>, 'func': <function func at 0x00000026C1DCE378>}
15.locals返回局部变量
def func(num1):
name = '88'
print(locals())
print(globals())
return num1
func(11)
返回结果:
{'name': '88', 'num1': 11}
{'__doc__': None, '__spec__': None, 'func': <function func at 0x0000001E3988E378>, '__package__': None, '__file__': 'I:/第五周/第四周作业/内置函数.py', '__cached__': None, '__builtins__': <module 'builtins' (built-in)>, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000001E394C89B0>, '__name__': '__main__'}
16.max取列表中的最大值
print(max(111,12,13,14,16,19))#=111取最大值
17. round取几位小数,会四舍五入
print(round(11.1198,2))#=11.12
18. sorted排序
print(sorted([2,31,34,6,1,23,4],reverse=False))#升序
返回结果:
[1, 2, 4, 6, 23, 31, 34]
print(sorted([2,31,34,6,1,23,4],reverse=True))#降序
返回结果:
[34, 31, 23, 6, 4, 2, 1]
19. sorted按照字典的key排序
dic={3:4,7:8,1:2,5:6}
print(sorted(dic.items()))#
返回结果:
[(1, 2), (3, 4), (5, 6), (7, 8)]
三、 random模块
import random,string
print(random.random())# =0.13472586128785213随机浮点数,默认取0-1,不能指定范围
print(random.randint(1,20))
#=16随机整数
print(random.randrange(1,20))#=15随机产生一个range
print(random.choice('x23serw4'))#=4随机取一个元素
print(random.sample('hello',2))#=['o', 'l']从序列中随机取几个元素
print(random.uniform(1,9))#=2.068976762957055随机取1-9之间的浮点数,可以指定范围
x = [1,2,3,4,6,7]
random.shuffle(x)#=[6,
1, 7, 3, 4, 2]洗牌,打乱顺序,会改变原list的值
print(x) #=[6, 1, 7, 3, 4, 2]
print(string.ascii_letters+string.digits)#=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789所有的数字和字母
注意:randrange和randint都是从一个范围内随机取一个值,区别是randrange是顾头不顾尾的,randint可以取所有的值。
四、json模块
json处理 json是一种所有语言中都通用的key-value数据结构的数据类型,很像python中的字典,json处理使用json模块,json模块有下面常用的方法:
字典转json串的带s就和字符串沾边,不带s和文件对象沾边
1.load和loads方法
1) loads将json(字符串)转为字典
json_str = """
{
"username":
"niuhanyang",
"passwd": 123456,
"flag": true
}
"""
import json
json_dic =
json.loads(json_str)
print(json_dic)
print(type(json_dic))
返回结果
{'passwd': 123456, 'flag': True, 'username': 'niuhanyang'}
<class 'dict'>
2) 将json(字符串)转为字典load方法是传入一个文件对象,然后load方法自动去读这个文件的内容,然后转成字典
User文件中为内容如下:
{"MLing": {"cart": ["car", "iphone", "mini", "iphone"], "password": "123456"}}
import json
with open('users','a+') as fu:
fu.seek(0)
users_dic = json.load(fu)
users_dic['MLing']['cart'].append('mini4')
new_users=str(users_dic)
fu.seek(0)
fu.truncate()
fu.write(new_users)
用户的密码不加引号的话,通过字典读取的时候是int类型,所以在文件里最好加上引号,这样读取出来就是字符串
用户存值为{"niuhanyang":{"passwd":12345,"cart":['car','iphone']}的时候,由字符串转字典的时候报错,是因为json里面只能是
双引号{"niuhanyang":{"passwd":12345,"cart":["car","iphone"]}
2.dump和dumps字典转字符串
1)dumps将字典转换为字符串
d = {
"hhh": {
"price": "90000",
"password": "123456"
},
"admin": {
"password": "123456",
"money": 8000
}
}
import json
dic_str = json.dumps(d)
print(dic_str)
print(type(dic_str))
返回结果:
{"hhh": {"price": "90000", "password": "123456"}, "admin": {"money": 8000, "password": "123456"}}
<class 'str'>
2) dumps将字典转换为字符串,并写入到文件里
d = {
"hhh": {
"price": "90000",
"password": "123456"
},
"admin": {
"password": "123456",
"money": 8000
}
}
import json
fw = open('users.json','w')#后缀是.json的话,pycharm会把文件里的内容自动给格式化
json.dump(d,fw) #把d转换为字符串,写到文件fw里面
注意:json串实际上就是一个字符串, json和python的字典类型,但是json里面只能是双引号,不能是单引号,注意,json中的与字典写法除了,需要用双引号之外还有加逗号,每个key之间都要加逗号,如果使用users_dic = json.load(fr)的时候报错的话,就要考虑是不是文件内容的格式有问题