Python-3

装饰器 decorators(专业提高篇)

问题:
 def say(x):
     print("您好:", x)

say('老魏')  # 您好: 老魏
 say('小张')

函数装饰器

 函数装饰器是指装饰的是一个函数,传入的是一个函数,返回的也是一个函数的函数

函数装饰器的语法:

    def 装饰器函数名(参数):
     语句块
        return 函数对象

被装饰函数的语法
 @装饰器函数名
 def 函数名(形参列表):
      语句块

函数的 __doc__属性

 __doc__属性用于绑定该函数的文档字符串

示例:
 def fx(a, b):
      '''这是函数的文档字符串
      这是第二行...
      '''
 print(fx.__doc__)

函数的__name__属性:

 __name__属性用于绑定函数名的字符串
示例:
     def fx():
          pass
    f1 = fx
     print(f1.__name__)

函数定义语句(def语句的语法)

 [@装饰器名1]
[@装饰器名2]
...
 def 函数名([位置形参],[*[元组形参名]], [命名关键字形参], [**字典形参]):
     '''文档字符串'''
     语句块
注: []里的内容代表可省略

模块 Module

 什么是模块:
    模块是一个包含有一系列数据,函数,类等组成的程序组
    模块是一个文件,模块文件名通常以.py结尾

作用:
 让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰
    模块中的数据,函数和类等可提供给其它模块或程序使用

模块的分类:

     1. 内置模块(builtins),在解析器的内部可以直接使用
    2. 标准库模块,安装python时已安装且可直接使用
     3. 第三方模块(通常为开源),需要自己安装
    4. 用户自己完的模块(可以作为其它人的第三方模块)

import 语句

 语法:
 import 模块名1[as 模块新名1][,模块名2 [as 模块新名2]], ...

 示例:
 # 导入数学模块
 import math
 # 导入系统模块sys和 os模块
  import sys, os
 作用:
  将某模块整体导入到当前模块
  用法:
   模块.属性名

dir(obj)  函数返回模块所有属性的字符串列表
help(obj)  可以查看模块相关的文档字符串

from import 语句

  语法:
 from 模块名 import 模块属性名1 [as 属性新名1][,模块属性名2[as 属性新名2], ...]
作用:
    将某模块内的一个或多个属性导入到当前模块的作用域

 示例:
  from math import pi
  from math import pow, sqrt
  from math import factorial as fac
  ...

from import *语句

语法:
    from 模块名 import *
  作用:
 将某模块的所有属性都导入到当前模块
 示例:
    from math import *

dir 函数:

 dir([对象])  返回一个字符串列表
 作用:
 一、如果没有参数调用,则返回当前作用域内的所有变量的列表
    二、如果给定一个对象作为参数,则返回这个对象的所有变量的列表
     1. 对于一个模块,返回这个模块的全部属性
     2. 对于一个类对象,返回类对象的所有变量,亲递归基类对象的所有变量
     3. 对于其它对象,返回所有的变量,类变量,基类变量

数学模块 math

模块名math

时间模块 time

此模块提供了时间相关的函数,且一直可用

系统模块 sys

此模块全部是运行时系统相关的信息

模块化编程的优点:

1. 有利于多人合作开发
 2. 使代码更易于维护
 3. 提高代码的复用率
 4. 有利于解决变量名冲突问题

import 语句 搜索模块的路径顺序

 1. 搜索程序运行时的路径(当前路径)
 2. sys.path 提供的路径
 3. 搜索内置模块

sys.path 是一个存储模块搜索路径的列表

  1. 可以把自定义的模块放在相应的路径下可以导入
 2. 可以把自己模块的路径添加在sys.path列表中

模块内预置的属性

 __doc__属性
 作用:
     用来绑定模块的文档字符串

 模块内第一个没有赋值给任何变量的字符串为模块的文档字符串

__file__属性

     __file__ 绑定模块对应的文档路径名
      1. 对于内建模块,不绑定路径(没有__file__属性)
     2. 对于其它模块,绑定路径名的字符串  

__name__属性

     此属性用来记录模块的自身名字
 作用:
     1. 记录模块名
     2. 用来判断是否为主模块(最先运行的模块)
    说明:
      当此模块为主模块时,__name__绑定 '__main__'
      当此模块不是主模块时,此属性绑定模块名

模块的__all__列表

 模块中的 __all__列表是一个用来存放可导出属性的 字符串列表

 作用:
当用 from import *语句导入时,只导入 __all__ 列表内的属性

模块的隐藏属性

 模块中以'_'开头的属性,在from import * 语句导入时,将不被导入,通常称这些属性为   隐藏属性

随机模块 random

 作用:
  用于模拟或生成随机输出的模块

包 (模块包) package

包是将模块以文件夹的组织形式进行分组管理的方法

 作用:
 将一系列模块进行分类管理,有利于防止命名冲突
  可以在需要时加载一个或部分模块而不是全部模块

包示例:
mypack/
init.py
menu.py
games/
init.py
contra.py
supermario.py
tanks.py
office/
init.py
excel.py
word.py

init.py 文件

 常规包内必须存在的文件
 __init__.py 会在包加载时被自动调用

作用
  编写此包的内容
  在内部填写文档字符串
 在__init__.py 内可以加载此包所依懒的一些其它模块

包的导入:

 用三条import语句可以导入包(同模块的导入规则)

 import 包名 [as 包别名]
 import 包名.模块名 [as 模块新名]
 import 包名.子包名.模块名

 from 包名 import 模块名 [as 模块新名]
 from 包名.子包名 import 模块名 [as 模块新名]
 from 包名.子包名.模块名 import 属性名 [as 属性新名]

 from 包名 import *
from 包名.模块名 import *
 ...

异常 exception

什么是错误
 错误是指由于逻辑或语法等导致一个程序无法正常执行的问题

特点:
 有些错误是无法预知的

什么是异常

 异常是程序出错时标识的一种状态
 当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正    常状态

异常的作用:
1. 通知上层调用者有错误产生需要处理
2. 用作信号

try语句的两种语法

 try-except语句
 try-finally语句

try-except语句

 语法:
  try:
        可能触发异常的语句
 except 错误类型1 [as 变量1]:
     异常处理语句1
 except 错误类型2 [as 变量2]:
     异常处理语句2
    except (错误类型3, 错误类型4, ...) [as 变量3]:
        异常处理语句3
 ...
 except:
     异常处理语句other
 else:
        末发生异常时执行的语句
    finally:
      最终执行语句

作用:
偿试捕获异常,将程序转为正常状态并继续执行

语法说明:
as 子句是用于绑定错误对象的变量,可以省略不写
except子句可以有一个或多个,但至少要有一个
else子句最多只能有一个,也可以省略不写
finally子句最多只能有一个,也可以省略不写

try-finally语句

 语法:
 try:
      可能触发异常的语句
 finally:
       最终语句

说明:
finally 子句不可以省略
一定不存在except子句
作用:
通常用try-finally语句来做触发异常时必须要处理的事情,无论异常是否发生,finally子句 都会被执行
注:
try-finally语句不会改变程序的(正常/异常)状态

raise 语句

 作用:
 触发一个错误,让程序进入异常状态
 语法:
  raise 异常类型
  或
  raise 异常对象

assert 语句(断言语句)

语法:
 assert 真值表达式, 错误数据(通常是字符串)
     作用:
当真值表达式为False时,用错误数据创建一个 AssertionError 类型的错误,并进入异常状态
类似于:
  if 真值表达式 == False:
      raise AssertionError(错误数据)

小结:

 接收错误消息:
  try-except
做必须要处理的事情的语句:
 try-finally
 发错误消息的语句:
 raise 语句
 assert 语句

为什么要用异常处理机制

 在程序调用层数较深时,向主调函数传递错误信息需要用return语句层层传递比较麻烦,所    以用异常处理机制

迭代器 iterator 和 生成器 generator

什么是迭代器

迭代器是指用iter(可迭代对象) 函数返回的对象(实例)
 迭代器可以用next(it) 函数获取可迭代对象的数据

迭代器函数:

 iter(iterable) 从可迭代对象中返回一个迭代器,iterable必须是一个能提供迭代器的可迭代  对象
 next(iterator)  从迭代器iterator中获取下一条记录,如果无法获取下一条记录,则触发   StopIteration 异常

说明:
迭代器是访问可迭代对象的一种方式
迭代器只能向前取值,不会后退
用iter函数可以返回一个可迭代对象的迭代器

r = range(100, 10000)
it = iter(r)
print("第一个数是:", next(it)) # 100
print("第二个数是:", next(it)) # 101
print("第三个数是:", next(it)) # 102

迭代器的用途

代迭器对象能用next函数获取下一个元素

示例:
# 用while循环语句来访问如下列表
L = [2, 3, 5, 7]

生成器 Generator (python2.5 及之后)

什么是生成器:

生成器是能够动态提供数据的对象,生成器对象也是可迭代对象(实例)

生成器有两种:

 生成器函数
 生成器表达式

生成器函数定义
含有 yield 语句的函数是生成器函数,此函数被调用时将返回 一个生成器对象
注: yield 翻译为产生(或生成)

yield 语句
语法:
yield 表达式
   说明:
yield用于def函数中,目的是将此函数作为生成器函数使用
yield用来生成数据,供迭代器 next(it) 函数使用

生成器函数说明:

 生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象
在生成器函数调用return时会出生一个 StopIteration 异常来通知next(it) 函数不再能提 供数据

生成器表达式:

 语法:
 (表达式 for 变量 in 可迭代对象 [if 真值表达式])
 注: []里的内容可以省略

   作用:
用推导式的形式生成一个新的生成器
   示例:
gen = (x**2 for x in range(1, 4))
it = iter(gen)
next(it)  # 1
next(it)  # 4
next(it)  # 9
next(it)  # StopIteration
优点:
   不占用内存空间

函数

 zip(iter1 [,iter2, iter3,...]) 返回一个zip对象此对象用于生成一个元组,此元组的个数由最小  的可迭代对象决定

enumerate(iterable[,start])  生成带索引的枚举对象,返回迭代类型为索引-值对(index,value)   对, 默认索引从零开始,也可以使用start绑定

示例:
numbers = [10086, 10000, 10010, 95588]
names = ['中国移动', '中国电信', '中国联通']
for n, a in zip(numbers, names):
print(a, '的客服号码是:', n)

 for x in zip(numbers, names):
     print(x)

 # 以下用zip函数生成一个字典
 d = dict(zip(names, numbers))

 for x in zip(range(10), numbers, names):
        print(x)

enumerate函数(枚举函数)

 格式
 enumerate(iterable[,start])
 示例:
 names = ['中国移动', '中国电信', '中国联通']
 for x in enumerate(names):
     print(x)  # (0, '中国移动'), (1, '中国电信').

    for x in enumerate(names, start=100):
        print(x)  # (100, '中国移动'), (101, '中国电信'), (102, '中国联通')

字节串 bytes

 作用:
 存储以字节为单位的数据

说明:
字节串是不可变的字节序列
字节是0~255之间的整数

字节串的构造函数 bytes

 bytes()  生成一个空的字节串 等同于 b''
 bytes(整型可迭代对象)  用可迭代对象初始化一个字节串
 bytes(整数n)  生成n个值为零的字节串
 bytes(字符串, encoding='utf-8') 用字符串的转换编码生成一个字节串

示例:
b = b'abc' + b'123' # b=b'abc123'
b += b'ABC' # b=b'abc123ABC'
b'ABD' > b'ABC' # True
b = b'ABCD'
65 in b # True
b'A' in b # True

bytes 与 str的区别:

 bytes 存储字节(0-255)
 str  存储Unicode字符(0-65535)

bytes 与 str 转换
编码(encode)
str ------> bytes
b = s.encode('utf-8')
解码(decode)
bytes ------> str
s = b.decode('utf-8')

字节数组 bytearray

可变的字节序列

创建字节数组的构造函数:
bytearray() 创建空的字节数组
bytearray(整数)
bytearray(整型可迭代对象)
bytearray(字符串,encoding='utf-8')
注: 以上参数等同于字节串

bytearray的方法:

 B.clear()  清空字节数组
 B.append(n)  追加一个字节(n为0-255的整数)
 B.remove(value)  删除第一个出现的字节,如果没有出现,则产生ValueError错误
 B.reverse()  字节的顺序进行反转
 B.decode(encoding='utf-8')  # 解码
 B.find(sub[, start[, end]])  查找

                     

文件  file

什么是文件

     文件是数据存储的单位
文件通常用来长期存储数据
文件中的数据是以字节为单位进行顺序存储的

文件的操作流程

 1. 打开文件
2. 读写文件
 3. 关闭文件
任何的操作系统,一个应用程序同时打开文件的数量有最大数限制

文件的打开函数 open

open(file, mode='rt') 用于打开一个文件,返回此文件对应的文件流对象,如果打开失败,    则会触发OSError错误!

文件关闭方法:

F.close()  关闭,释放系统资源

python文件读写的类型有两种:

 文本文件 (text file)
二进制文件 (binary file)

各种操作系统的换行符:

 Linux换行符       : '\n'
 Window换行符      : '\r\n'
 旧的Macintosh换行符: '\r'
 新的Mac Os 换行符  : '\n'

文本文件的迭代读取

 open()函数返回来的文件流对象是可迭代对象

示例:
f = open('abc.txt')
# 每次取出一行,相当于line = f.readline()
for line in f:
print(line)
f.close()

标准输入输出文件

模块名: sys
 sys.stdin  (默认为标准键盘输入设备)
    ctrl + d 输入文件末尾标识
sys.stdout (默认为屏幕终端)
 sys.stderr (默认为屏幕终端)

标准文件不需要打开和关闭就可以使用

二进制文件操作:

 'b' 二进制(binary)文件操作

对于二进制文件的读写通常需要用字节串(bytes)进行操作

示例:
f = open("infos.txt", 'rb') # 以二进制模式打开
# 在此处对f绑定的对象以bytes为单位进行读写
# ...
f.close()

F.seek() 方法

 F.seek(偏移量, whence=相对位置)
 偏移量:
     大于0代表向文件末尾方向移动
     小于0代表向文件头方向移动
 相对位置:
      0 代表人文件头开始
      1 代表从当前读写位置开始偏移
     2 代表从文件尾开始偏移

汉字编码:

 国标系列:
 GB18030 (二字节或四字节编码)
     GBK (二字节编码)
          GB2312 (二字节编码)
 (Windows 常用)
 国际标准:
 UNICODE(2/4字节)  <---> UTF-8 (1~6字节)
     (Linux / Mac OS X / IOS / Android 常用)

python 编码(encode) 字符串
'gb2312'
'gbk'
'gb18030'
'utf-8'
'ascii'
...

猜你喜欢

转载自www.cnblogs.com/-hjj/p/9934269.html