zoukankan      html  css  js  c++  java
  • 模块和内置函数

    模块和内置函数

    一、模块的使用

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





  • 相关阅读:
    Spark GraphX 属性图操作
    Scala隐式转换
    Spark GraphX
    交叉验证_自动获取模型最优超参数
    协同过滤算法
    聚类-----高斯混合模型
    IDEA kafka producer数据输出缓慢 和 kafka consumer 报错的处理
    Opencv读取视频一闪而过情况分析
    影像叠加+滑动条
    opencv中的图像矩(空间矩,中心矩,归一化中心矩,Hu矩)
  • 原文地址:https://www.cnblogs.com/MLing/p/7020587.html
Copyright © 2011-2022 走看看