模块和内置函数

模块和内置函数

一、模块的使用

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)的时候报错的话,就要考虑是不是文件内容的格式有问题





原文地址:https://www.cnblogs.com/MLing/p/7020587.html