4.Python进阶

2019-01-06  本文已影响0人  Louis_Duan

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
上一篇下一篇

猜你喜欢

热点阅读