zoukankan      html  css  js  c++  java
  • python学习的第十七天 模块、内置函数

    '''
    1 什么是模块
    模块就是一系列功能的集合体
    模块有三种来源
    1. 内置的模块
    2. 第三方的模块
    3. 自定义模块
    模块的格式:
    1 使用python编写的.py文件
      2 已被编译为共享库或DLL的C或C++扩展
      3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
      4 使用C编写并链接到python解释器的内置模块

    2 为何要用模块
    1. 使用内置的或者第三方模块的好处是: 拿来主义,可以极大提升开发效率
    2. 使用自定义模块的好处是: 可以减少代码冗余(抽取我们自己程序中要公用的一些功能定义成模块,然后程序的各部分组件都去模块中调用共享的功能)

    3 如何用模块
    大前提: 一定要区分开谁是执行文件,谁是被导入模块

    #(1) 文件名是spam.py,模块名则是spam
    # 首次导入模块发生?件事
    # 1. 会产生一个模块的名称空间
    # 2. 执行文件spam.py,将执行过程中产生的名字都放到模块的名称空间中
    # 3. 在当前执行文件的名称空间中拿到一个模块名,该名字指向模块的名称空间
    # import spam

    # 之后的导入,都是直接引用第一次导入的成果,不会重新执行文件
    # import spam
    # import spam
    # import spam
    # import spam


    # 在执行文件中访问模块名称空间中名字的语法:模块名.名字
    # import spam

    # print(spam.x) # 指名道姓地跟spam要名字x,肯定不会与当前执行文件中的名字冲突

    # x # 向当前执行文件的名称空间要名字

    # money=11111111111111111111111
    # print(spam.money)
    # print(spam.read1)
    # print(spam.read2)
    # print(spam.change)

    # spam.read1()
    # def read1():
    # print('run.py --> read1')
    # spam.read2()

    # spam.change()
    # print(spam.money)
    # print(money)

    # 总结import导入模块:在使用时必须加上前缀:模块名.
    # 优点: 指名道姓地向某一个名称空间要名字,肯定不会与当前名称空间中的名字冲突
    # 缺点: 但凡应用模块中的名字都需要加前缀,不够简洁


    # 一行导入多个模块(不推荐)
    # import spam,os,time

    # 可以为模块起别名(注意:模块名应该全为小写)
    import spam as sm
    print(sm.money)
    print(sm.read1)

    # (2)首次导入模块发生3件事
    # 1. 创建一个模块的名称空间
    # 2. 执行文件spam.py,将执行过程中产生的名字都放到模块的名称空间中
    # 3. 在当前执行文件中直接拿到一个名字,该名字就是执行模块中相对应的名字的

    # from spam import money,read1,read2,change
    # money=200
    # print(money)

    # read1=123
    # read1()
    # read2()

    # change()
    # print(money)

    # 总结from...import...
    # 优点: 使用时,无需再加前缀,更简洁
    # 缺点: 容易与当前名称空间中的名字冲突

    # *代表从被导入模块中拿到所有名字(不推荐使用)
    # from spam import money,read1,read2,change
    # from spam import * # __all__ = ['money','read1']
    #
    # print(money)
    # print(read1)
    # print(read2)
    # print(change)

    # 起别名
    from spam import read1 as r1

    4、python文件的2种执行方式

    (1)可执行文件

    (2)作为模块导入

     总结:作为执行文件时候_name_的值为_main_

    作为模块导入的时候_name_的值为模块名

    if __name__ == "__main__":
        print("作为执行文件")
        print(get_datetime())
    else:
        print("作为模块导入了")

    5、模块的搜索路径

    首先找内存中已经加载的模块 - > 内置模块 - > sys.path

    # 验证 重复导入模块时 模块中的代码仅执行一次
    # import 一个模块
    # import 一个模块
    # import 一个模块
    # import 一个模块
    # from 一个模块 import *


    # import 第二个模块
    # print(第二个模块.age)

    # import time
    # time.sleep(2)


    # 查看内存中已经加载的模块
    # import sys
    # # print(sys.modules)
    # for i in sys.modules:
    # print(i)

    # 查看sys.path (环境变量)
    # print(sys.path)
    # # 手动添加一个路径到环境变量中
    # sys.path.append(r"D:上海python全栈4期day17-2dirs")
    # import time2
    # print(sys.path)


    # 验证内存和内置
    # import m1
    # import time
    #
    # time.sleep(20)
    # # 删除m1文件
    # import m1

    #验证内置和 sys.path
    import sys
    print("time" in sys.modules)
    # print(sys.modules["time"])

    import time
    print(time)

    print(sys.path)

    内置函数:

    print(abs(-100))
    print(all([1,0])) # 全部为真结果为真
    print(any([1,0])) # 有一个为真结果为真
    print(type(ascii(1))) # 返回这个对象的字符串表示 如果有中文就变成了ascII编码 没意思
    print(type(str("哈哈")))
    print(bin(11)) # 二进制
    print(oct(12)) # 八进制
    print(hex(13)) # 十六进制
    print(bool("")) # 转bool类型

    print(bytearray("abc哈哈",encoding="utf-8"))
    print("哈哈".encode("utf-8"))
    print(bytes("哈哈",encoding="utf-8"))

    def f():
    pass
    print(callable(f)) # 是否可被调用

    print(chr(97)) # 把整数转为unicode字符
    print(chr(ord("哈"))) # 反过来


    print(type(eval("{'name':'矮根'}"))) # 执行一行python代码 并返回执行结果
    with open("db.txt",encoding="utf-8") as f:
    print(eval(f.read()))


    print(exec("1+2*3")) # 执行一堆python代码 不返回任何结果


    excuteable = compile("1+2*3","","eval") # 将一个表达式 或时 一堆代码 编译成一个可执行对象

    print(eval(excuteable))

  • 相关阅读:
    Go反射
    Go_CSP并发模型
    Go_select
    Go计时器
    day9:vcp考试
    day8:vcp考试
    day7:vcp考试
    day6:vcp考试
    day5:vcp考试
    day4:vcp考试
  • 原文地址:https://www.cnblogs.com/ye-hui/p/9775032.html
Copyright © 2011-2022 走看看