zoukankan      html  css  js  c++  java
  • 4月3日 python学习总结

    1、 列表生成器     

    l=['egg%s' %i for i in range(100) if  i>20  ]
    print(l)
    

         若将 [ ] 换成 ( ),则为生成器表达式,结果是一个迭代器

    #求文件中每行字符数的最大值
    with open('E:\test.txt','r',encoding='utf-8') as f :
              num=[len(line) for line in f]
              print(max(num))
    

      


    2、 模块

    •      模块就是一系列功能的集合体,一个.py文件就是一个模块   
    #模块导入格式
    
          #1、  import  模块名

           # import 模块名,模块名,模块名... (在一行导入多个模块,不推荐使用) #2、 from 模块名 import 模块中的方法或参数 #3、 from 模块名 import * (*表示模块中的所有方法或参数)


        '''
        对于第三种方法,若不想用 * 取出全部名称时,可在被导入模块中加
                __all__=['名称1','名称2','名称3','名称4',....]
           将可以被取出的名称加入该列表中
    '''





    #要注意命名冲突问题
      #1、后两种方法在运行时可以直接调用,不用加前缀
      #2、若是当前文件也有同名方法或参数,本地优先

     

    • 运行一个python文件,当首次执行到模块导入位置时:
      1.  先创造一个被导入模块的名称空间
      2.  执行该模块对应文件,将产生的名字放于该命名空间
      3.  在当前执行文件的内存空间中,创建名字来引用对应模块或参数
        • 第一种导入方法:会有一个与被导入模块的名称相同的变量名,该名称指向被导入模块的地址;
          • 第二种和第三种导入方法:与被导入模块中参数名或函数名相同的变量名,指向的是对应的地址
    #1.为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间。
    
    #2.在新创建的命名空间中执行模块中包含的代码,见初始导入import spam
    提示:导入模块时到底执行了什么?
    In fact function definitions are also ‘statements’ that are 
    ‘executed’; the execution of a module-level function definition 
    enters the function name in the module’s global symbol table.
    事实上函数定义也是“被执行”的语句,模块级别函数定义的执行将函数名放
    入模块全局名称空间表,用globals()可以查看
    
    #3.创建名字spam来引用该命名空间
    这个名字和变量名没什么区别,都是‘第一类的’,且使用spam.名字的方式
    可以访问spam.py文件中定义的名字,spam.名字与test.py中的名字来自
    两个完全不同的地方。
    

      

        

    •          模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很mport多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载到内存中的模块对象增加了一次引用,不会重新执行模块内的语句)

     

    3、为模块起别名

    # 为模块起别名
    
           #1、import  模块名   as    别名 
    
           #2、from   模块名   import   参数/函数名  as   别名
    

    4、__name__ (供测试代码时使用) 

      
    # __name__的值:
    
        if  文件被直接执行   
                __name__='__main__'
    
        if   文件被导入情况下执行
                __name__=' 文件名 '
    

    写模块测试时,可用 if 判断 __name__的值

            当  __name__='__main__'时,执行测试代码

      当  __name__='文件名'时,该模块被导入了,不执行测试代码

    if  __name__=='__main__'  :
        
       测试代码  

    5、模块的搜索路径

    •    模块查询顺序:
      1. 内存中以加载的模块
      2. 内置模块
      3.  sys.path 路径中包含的模块
    •   sys.path  控制了自定义模块以及第三方模块如何查找

        sys.path 的第一个路径是当前执行文件路径,执行文件变则第一路径变

        sys.modules 查找内存中已被导入的模块

         sys.path.append(r' ...路径...  ')  往 sys.path中加入新路径  

     

    作业:

    '''
    4月3号作业
    '''
    
    '''
    1.求文件中总共包含的字符个数?思考为何在第一次之后的哪次的n次sum求和得到的结果为0
    '''
    
    with open(r'E:\test.txt','r',encoding='utf-8')  as  f:
        res=(len(line) for line in f)
        print(res)
        res=sum(res)
        print(res)
    
    '''
    2.思考题
    '''
    with open('E:\test.txt','r',encoding='utf-8')  as  f:
        g=(len(line) for line in f)
        print(sum(g))
    
    '''
    3. 文件 shopping.txt内容如下:
            mac,2000,3
            lenovo,3000,10
            tesla,1000000,10
            chicken,200,1
            
        求总共花了多少钱?
        打印出所有商品信息,格式为
        [{'name':'xxx','price':'3333','count':3},.....]
        求单价大于10000的商品信息,格式同上
        
    '''
    with open(r'shopping.txt','r',encoding='utf-8')as f:
        line = [line.strip('
    ').split(',')  for line in f]
        shopping=[{'name': name,'price': price,'count': count} for name,price,count in line]
        print(shopping)
     # 求总共花了多少钱?
        price=map(lambda x:int(x['price']) * int(x['count']),shopping)
        sum_prce=sum(price)
        print(sum_prce)
      #求单价大于10000的商品信息
        filter_shoop=filter(lambda x:int(x['price'])>10000,shopping)
        print(list(filter_shoop))
    
    '''
    4、改写ATM作业,将重复用到的功能放到模块中,然后通过导入的方法使用
    '''
    

      

    "E:Python 3.6.4python.exe" F:/python/object/days2/day_14.py
    <generator object <genexpr> at 0x00000000023001A8>
    91
    91
    [{'name': 'mac', 'price': '2000', 'count': '3'}, {'name': 'lenovo', 'price': '3000', 'count': '10'}, {'name': 'tesla', 'price': '1000000', 'count': '10'}, {'name': 'chicken', 'price': '200', 'count': '1'}]
    10036200
    [{'name': 'tesla', 'price': '1000000', 'count': '10'}]
    
    Process finished with exit code 0
    

      

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    软件设计——继承、多态、绑定、重置、创建型设计模式、结构型设计模式和行为设计模式
    软件设计——2017年下半年选择题重要知识点
    day---06 文件的操作
    day---05 基本数据类型(下)
    day---04 基本数据类型(上)
    day---04 流程控制
    day---03 基础的数据类型
    day---02 编程语言的发展史
    day---01 计算机基础
    Day——07
  • 原文地址:https://www.cnblogs.com/95lyj/p/8708917.html
Copyright © 2011-2022 走看看