• 3 Apr 18 内置函数 列表生成式与生成器表达式 模块的使用之import 模块的使用之from…import…


    3 Apr 18
    一、内置函数
    print(pow(2,3,3))   #2 ** 3 % 3
     
    l=[1,4,3,5]
    res=reversed(l)
    print(list(res))      #[5, 3, 4, 1]
    print(l)            #[1, 4, 3, 5]  #reversed不更改原数列,同sorted
     
    print(round(3.5))    #4
    print(round(3.4))    #3    四舍五入
     
    sc=slice(1,5,2) #1:5:2
    l=['a','b','c','d','e','f']
    print(l[sc])
    t=(1,2,3,4,5,6,7,8)
    print(t[sc])
     
    print(sum([1,2,3,4]))
     
    left='hello'
    right={'x':1,'y':2,'z':3}
    res=zip(left,right)  # 拉链
    print(list(res))     # [('h', 'x'), ('e', 'y'), ('l', 'z')]
     
    二、列表生成式与生成器表达式
    1、   列表生成式
    原始写法:
    l=[]
    for i in range(100):
        l.append('egg%s' %i)
    print(l)
     
    用列表生成式:
    l=['egg%s' %i for i in range(100)]
    l=['egg%s' %i for i in range(1000) if i > 10]   #可带if可不带
    print(l)
     
    2、   生成器表达式
    l=('egg%s' %i for i in range(1000) if i > 10)  #把[]换成(),其他不变
    print(next(l))                           #egg11
    print(next(l))                           #egg12
    print(next(l))                           #egg13
    #列表生成式用于数据量少的情况,生成器表达式用于数据量多的情况
    #简单的映射和过滤可用以上方法,比map/filter相对简单
     
    3、   练习题
    names=['egon','alex_sb','wupeiqi','yuanhao','lxx']
    res=map(lambda x:x.upper(), names)    #用map
    names=list(res)
    print(names)
    names=[item.upper() for item in names]  #用列表生成式
    print(names)
     
    names=['egon','alex_sb','wupeiqi','yuanhao','lxx']
    names=[len(item) for item in names if not item.endswith('sb')]  #用列表生成式
    print(names)
     
    nums=[]
    with open('db.txt','r',encoding='utf-8') as f:
        for line in f:
            nums.append(len(line))  #新建空列表,将元素依次加入列表以得到新列表
    print(max(nums))
     
    with open('db.txt','r',encoding='utf-8') as f:
        l=(len(i) for i in f)           #用生成器表达式,注意缩紧,否则报错
    print(max(l))
     
    with open('db.txt','r',encoding='utf-8') as f:
            print(max=(len(i) for i in f))  #可省略一层括号,注意缩紧
     
    三、模块的使用之import
    #包也是模块
     
    执行文件:右键可run
    模块文件: 被导入的
     
    1 什么是模块?
    模块就一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module
     
    2 使用模块
    2.1 import 导入模块
    首次导入模块发生三件事
    1、创建一个模块的名称空间
    2、执行模块对应文件,将产生的名字存放于1中的名称空间
    3、在当前执行文件中拿到一个模块名,该模块名指向1的名称空间
    #注意:模块的名称空间和执行文件的名称空间是两个完全独立的空间
     
    import spam
    spam.read1()
    强调:之后的导入会直接引用第一次导入的结果,不会重复执行文件
     
    模块中功能的执行始终以模块自己的名称空间为准
    read1=111111
    print(spam.read1)  #与上方的read1=111111无关
     
    3      为模块起别名
    import spam as sm          #简化模块名,使调用时输入更加便捷
    print(sm.money)
    sm.read1()
     
    engine=input('>>: ').strip()    #根据用户的选择进入不同的模块完成相同的操作
    if engine == 'mysql':
        import mysql as db
    elif engine == 'oracle':
        import oracle as db
    db.parse()
     
    4      一行导入多个模块(不推荐使用)
    import spam,mysql,oracle
     
    推荐写成多行
    import spam
    import mysql
    import orcacle
     
    四、模块的使用之from…import…
    首次导入模块发生三件事
    1、创建一个模块的名称空间
    2、执行模块对应文件,将产生的名字存放于1中的名称空间
    提示:from 。。。 import。。与import前两件事一模一样
    3、在当前名称空间中直接拿到模块中的名字,可以直接使用,不用加任何前缀
     
    from spam import money,read1,read2,change
    print(money)
    read1()
    read2()
    change()
     
    注意:
    1、同import,执行模块中的功能,始终以模块的名称空间为准
    2、from ... import 名字,拿到的名字可以不加前缀直接使用,使用起来更加方便
    当问题是容易与当前执行文件中相同的名字冲突
     
    起别名
    from spam import money as m
    print(m)
     
    在一行导入多行
    from spam import money,read1,read2
     
    from ... import *
    from spam import *  #*为全部导入,尽量少用
    print(money)
    print(read1)
    print(read2)
    print(change)
     
    注意:
    若在要导入的模块中加入以下代码,当调用*时之调入列表中的名字, 一般模块设计者会将常用的几个名字写入列表,方便使用者调用
    __all__=['money']  #控制*的行为
     
    五、模块的搜索路径
    模块的查找顺序是:
    1、内存中已经加载的模块
    2、内置模块
    3、sys.path路径中包含的模块
     
    import sys
    sys.path.append(r'D:codeSH_fullstack_s1day14dir1') #将路径添加到环境中再调用
     
    sys.path的第一个值是当前执行文件所在的文件夹;再pycharm中第二个值可无视掉,是pycharm自身所做的优化,再cmd中不可见
     
    import m1
    m1.f1()
     
    强调:sys.path的第一个路径是当前执行文件所在的文件夹
     
    import sys
    print(sys.modules)   #查看内存中已经导入的模块;内置模块默认不在内存中
     
    4月3号作业:
    1、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?
    nums=[]
    with open('db.txt','r',encoding='utf-8') as f:
        for line in f:
            nums.append(len(line))
    print(sum(nums))
     
    with open('db.txt','r',encoding='utf-8') as f:
        nums=(len(line) for line in f)
    print(sum(nums))
     
    #用第二种方法,第二次开始为0。原因:取一次后,光标移至末尾,第二次取出为空。
     
    2、思考题
                                   with open('a.txt',encoding='utf-8') as f:
                                                  g=(len(line) for line in f)
                                   print(sum(g))
    ()返回的是迭代器,print会触发迭代器,如果print不缩进,print执行时文件已关闭,会报错。若g=[]则不报错
  • 相关阅读:
    JFreeChart生成图片
    itext生成Word
    itext生成PDF
    物理模型name与comment互相转化
    表单序列化为Json(只限input)
    c#多线程同步之EventWaitHandle的应用
    C#多线程之异步编程
    Java环境变量设置
    sharepoint 2013实践
    WPF研究之道——数据驱动UI
  • 原文地址:https://www.cnblogs.com/zhangyaqian/p/py20180403.html
Copyright © 2020-2023  润新知