美文网首页
4.Python进阶

4.Python进阶

作者: Louis_Duan | 来源:发表于2019-01-06 21:05 被阅读0次

    1、sys模块

    1. sys.argv 实现从程序外部向程序传递参数。
      sys.argv变量是一个包含了命令行参数的字符串列表,利用命令行向程序传递参数,脚本的名称总是sys.argv列表的第一个参数。
    2. sys.path包含输入模块的目录名列表。
    3. sys.exit(0)正常退出。
      一般执行到主程序的末尾,解释器自动退出,但如果需要中途退出程序,可以调用sys.exit()。
    4. sys.modules
      是一个全局字典,该字典是python启动后就加载在内存中,每当导入一个新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,加快程序运行速度。它有字典的一切方法。
    5. sys.getdefaultencoding()/sys.setdefaultencoding()/sys.getfilesystemencoding()
      sys.getdefaultencoding()
      获取系统当前编码,一般默认为ASCII。
      sys.getfilesystemencoding()
      获取文件系统使用的编码方式。
    6. sys.stdin/sys.stdout/sys.stderr
      标准输入输出流。
    7. sys.platform
      获取当前系统平台。
    8. sys.version
      获取当前python版本。

    2、os

    见Python基础。

    3、CSV文件和csv模块

    标准库中有自带的csv(逗号分隔值)模块处理csv格式的文件

    3.1、读 csv文件

    csv.reader(fp)

    with open(path) as fp:
        r=csv.reader(fp)
        for row in r :
        ...
        ...    
    

    3.2、写 csv文件

    csv.writer(fp)
    如果出现空行现象,在open里添加参数newline=''

    import csv
    #csv文件,是一种常用的文本格式,用以存储表格数据,很多程序在处理数据时会遇到csv格式文件
    files=open('test.csv','w')
    writer=csv.writer(files)
    writer.writerow(['id','url','key'])#写入一行
    data=[(1,'http://www.baidu.com','百度'),(2,'http://www.163.com','网易')]
    #一次写入多行
    writer.writerows(data)
    files.close()
    

    4、正则表达式和re模块

    见python基础。

    5、datetime模块

    提供基础时间和日期处理
    datetime 格式字符表

    字符  含义
    %a  星期英文缩写
    %A  星期英文
    %w  一星期的第几天,[0(sun),6]
    %b  月份英文缩写
    %B  月份英文
    %d  日期,[01,31]
    %H  小时,[00,23]
    %I  小时,[01,12]
    %j  一年的第几天,[001,366]
    %m  月份,[01,12]
    %M  分钟,[00,59]
    %p  AM 和 PM
    %S  秒钟,[00,61] (大概是有闰秒的存在)
    %U  一年中的第几个星期,星期日为第一天,[00,53]
    %W  一年中的第几个星期,星期一为第一天,[00,53]
    %y  没有世纪的年份
    %Y  完整的年份
    

    5.1、date 对象

    import datetime as dt
    d1 = dt.date(2007, 9, 25)
    d2 = dt.date(2008, 9, 25)
    print d1
    print (d1.strftime('%A, %m/%d/%y'))
    print (d1.strftime('%a, %m-%d-%Y'))
    
    07-09-25
    Tuesday, 09/25/07
    Tue, 09-25-2007t 
    

    查看今天的日期

    datetime.date.today()
    

    5.2、time对象

    t1 = dt.time(15, 38)
    t2 = dt.time(18)
    print t1
    print t1.strftime('%I:%M, %p')
    print t1.strftime('%H:%M:%S, %p')
    
    15:38:00
    03:38, PM
    15:38:00, PM
    

    5.3、datetime对象

    #获得当前时间
    d1 = dt.datetime.now()
    print d1
    2015-09-10 20:58:50.148000
    
    #给当前的时间加上 30 天,timedelta 的参数是 timedelta(day, hr, min, sec, us)
    d2 = d1 + dt.timedelta(30)
    print d2
    2015-10-10 20:58:50.148000
    
    #除此之外,我们还可以通过一些指定格式的字符串来创建 datetime 对象:
    print dt.datetime.strptime('2/10/01', '%m/%d/%y')
    2001-02-10 00:00:00
    

    6、SQL数据库

    7、函数进阶:参数传递,高阶函数,lambda匿名函数,global变量,递归

    7.1、函数参数

    默认参数可变,默认参数的绑定发生在函数定义的时候,以后每次调用默认参数时都会使用同一个引用。

    def f(x = []):
        x.append(1)
        return x
    print f()
    print f()
    print f()
    print f(x = [9,9,9])
    print f()
    print f()
    >>> [1]
    [1, 1]
    [1, 1, 1]
    [9, 9, 9, 1]
    [1, 1, 1, 1]
    [1, 1, 1, 1, 1]
    

    7.2、高阶函数map/filter/reduce

    7.2.1、map(f,sq)将函数f作用到sq的每一个元素上,并返回结果组成的列表。

    def square(x):
        return x*x
    
    print(list(map(square, range(5))))
    >>>[0, 1, 4, 9, 16]
    

    7.2.2、filter(f,sq)函数作用相当于,对于sq的每个元素s,返回所有f(s)为True的s组成的列表。

    def is_even(x):
        return x % 2 == 0
    
    print(list(filter(is_even, range(5)))))
    >>>[0, 2, 4]
    

    7.2.3、reduce(f,sq)函数,reduce函数会对参数序列中元素进行累积。

    python3中在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里 用的话要 先引

    from functools import reduce
    def my_add(x, y):
        return x + y
    
    print(reduce(my_add, [1,2,3,4,5]))
    >>>15
    

    7.3、列表推导式

    variable = [表达式 for 变量 in 列表 if 条件]

    li = [1,2,3,4,5,6,7,8,9]
    print([x**2 for x in li if x>5])
    >>[36, 49, 64, 81]
    

    7.4、匿名函数

    lambda 变量: 表达式

    map(lambda x: x * x, range(5)
    >>>[0, 1, 4, 9, 16]
    

    8、迭代器和生成器

    8.1、迭代器

    迭代器是一个可以记住遍历的位置的对象。迭代器有两个基本的方法:iter() 和 next()。

    >>list=[1,2,3,4]
    >> it = iter(list)    # 创建迭代器对象
    >>next(it)   # 输出迭代器的下一个元素
    1
    >> next(it)
    2
    

    创建一个迭代器

    把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。

    class MyNumbers:
      def __iter__(self):
        self.a = 1
        return self
     
      def __next__(self):
        if self.a <= 20:
          x = self.a
          self.a += 1
          return x
        else:
          raise StopIteration #StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况
     
    myclass = MyNumbers()
    myiter = iter(myclass)
     
    for x in myiter:
      print(x)
    >>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    

    8.2生成器

    在 Python 中,使用了 yield 的函数被称为生成器(generator)。

    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

    在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

    import sys
     
    def fibonacci(n): # 生成器函数 - 斐波那契
        a, b, counter = 0, 1, 0
        while True:
            if (counter > n): 
                return
            yield a
            a, b = b, a + b
            counter += 1
    f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
     
    while True:
        try:
            print (next(f), end=" ")
        except StopIteration:
            sys.exit()
    
    >>0 1 1 2 3 5 8 13 21 34 55
    

    相关文章

      网友评论

          本文标题:4.Python进阶

          本文链接:https://www.haomeiwen.com/subject/fwxelqtx.html