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





  • 相关阅读:
    netty 解决TCP粘包与拆包问题(二)
    Socket通讯-Netty框架实现Java通讯
    SpringBoot集成Swagger,Postman,newman,jenkins自动化测试.
    Java Console/控制台 打印表格
    mysql控制台的一些技巧,显示,输入换行,语法正则等
    “妈妈,我不想学了”,你的回答改变孩子一生(怅然若失,说了一句话:“为什么当初没有人逼我?”。我不愿意学,你就不让我学啦!那时候我还小,我还不懂事,难道你也不懂事吗。要做成一件事,就必须有延迟满足的能力)
    “太子”显然沉稳不足,急于把大权抓在自己手里,做的第一件事居然是想尽一切办法铲除父亲在公司的亲信(我很久以来的疑惑,看了这段才明白,相比之下,经过玄武门之变的李世民仍然忍了裴寂三年时间是何等的聪明和了不起)
    如何分析和提高大型项目(C/C++)的编译速度?(VS2015特有的:/LTCG:incremental选项)
    Duilib学习之基础(一个SDK程序)
    使用 QWorker 做为计划任务引擎
  • 原文地址:https://www.cnblogs.com/MLing/p/7020587.html
Copyright © 2011-2022 走看看