python学习笔记

举报
zhxping 发表于 2017/12/07 20:45:48 2017/12/07
【摘要】 高阶函数: 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。 r = map(function,Iterator) function:方法,Iterator:列表、元组等 map():把function作用于Iterator中的每个元素,并返回一个新的Iterator list(r) r转化为list vl = reduce(function,I


高阶函数:

把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

r = map(function,Iterator)  function:方法,Iterator:列表、元组等  map():把function作用于Iterator中的每个元素,并返回一个新的Iterator

list(r) r转化为list

vl = reduce(function,Iterator) ,有点像递归,返回最终的操作结果

>>> def add(x, y):

...     return str(x) + str(y) x、y 第一次进来是1,2 后面x是前面一次计算的值,y是list中的下一个值,直到走完list中的每个值,方法执行完毕

...

>>> reduce(add, [1, 3, 5, 7, 9])

"13579"

filter()的作用是从一个序列中筛出符合条件的元素。由于filter()使用了惰性计算,所以只有在取filter()结果的时候,才会真正筛选并每次返回下一个筛出的元素。

list(filter(function,Iterator))  function: 过滤器,需返回True/False决定元素的去留 Iterator:列表、元组等  返回符合要求的元素

sorted() 排序

sorted(list,key=function, reverse=True) list:数组 key不能变,function为排序规则,reverse=True,反序/False,正序

一个函数可以返回一个具体值,也可以返回一个函数。

返回一个函数时,牢记该函数并未执行,返回函数中不要引用任何可能会变化的变量。

返回的函数应定义在改函数内部

def f1():

def f2():

return va

return f2

该函数不会立即返回va, 会返回f2整个方法,等需要用f2返回的va时,才会具体去执行。-----称之为"闭包"

每次调用返回的都是一个新的方法,即使传入的参数是一样的

匿名函数:避免命名冲突

lambda表达式:

lambda x: x * x   冒号前面为参数,后面为计算表达式  返回值为表达式计算的结果 (只能有一个表达式)

装饰器:代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)???????????

偏函数:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

>>> import functools

>>> int2 = functools.partial(int, base=2)


IO编程:从内存中输出到硬盘、网络(Output)或者从硬盘网络输入到内存(Input)

同步IO:

异步IO:

CPU与硬件速度不匹配造成

文件读写:

f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

f.read()

f.close()

open(文件路径及文件名和后缀,读/写("r:读/w:写文本/wb:写二进制"),encoding取读/写入文件用的编码--写入时会自动转换,errors='ignore'遇到无法识别的忽略)

文件不存在时会报IOError异常

操作完成后,必须关闭文件流

with open('/path/to/file', 'r') as f:

print(f.read())

with代替try fianlly,并且不用再次调用close()

read(size):size一次取读的文件大小,不设默认全部取读

readlines():一次取读一行

f.write(写入内容)

os,os.path:模块封装了操作系统的目录和文件操作,要注意这些函数有的在os模块中,有的在os.path模块中。

os.name --获取操作系统类型

"posix" :Linux、Unix或Mac OS X

"nt" :Windows

os.uname()  --获取操作系统类型详情(Windows下无此方法)

os.environ --获取系统中所有的环境变量

os.environ.get('key') --获取系统中某个环境变量的值

os.path.abspath('.') --查看当前目录的绝对路径

os.path.join('绝对路径', '新文件夹名称')  获取这个新文件夹的绝对路径 --主要处理不同操作系统的路径

os.mkdir("绝对路径") 创建文件夹

os.rmdir("绝对路径") 删除一个文件夹

os.path.split("文件绝对路径")--("文件的绝对路径,到文件夹","文件名称跟后缀") 一个元祖

os.path.splitext("文件绝对路径") --获取文件类型 ("文件绝对路径,到文件名","文件后缀")  

序列化(pickling):

反序列化unpickling:

object写入文件时,需序列化

pickle.dumps(d):序列化一个对象(序列化为bytes)

pickle.dump(obj,文件IO) 直接把对象序列化后写入一个file-like Object

pickle.loads(文件IO) :反序列化文件

(dumps(d)返回值为标准的json字符串)

import json

json.dumps(d)  把对象序列化为json

json.dumps(s, default=lambda obj: obj.__dict__)) 直接把一个class序列化为json(class不能直接序列化为json,需用lambda,调用obj.__dict__转为dict)

错误处理:

try:

except:

finally:

Python错误也是class  都继承自BaseException

import logging

记录错误信息

调试:

1、print()

2、断言(assert)

3、logging  ------王道

4、pdb

5、pdb.set_trace()

6、IDE

import logging

LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"

logging.basicConfig(filename='my.log', level=logging.DEBUG, format=LOG_FORMAT)

logging.debug("This is a debug log.")

logging.info("This is a info log.")

logging.warning("This is a warning log.")

logging.error("This is a error log.")

logging.critical("This is a critical log.")

basicConfig()可接收参数

filename 指定日志输出目标文件的文件名,指定该设置项后日志信心就不会被输出到控制台了

filemode 指定日志文件的打开模式,默认为'a'。需要注意的是,该选项要在filename指定时才有效

format 指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。

datefmt 指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效

level 指定日志器的日志级别

stream 指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发ValueError异常

style Python 3.2中新添加的配置项。指定format格式字符串的风格,可取值为'%'、'{'和'$',默认为'%'

handlers Python 3.3中新添加的配置项。该选项如果被指定,它应该是一个创建了多个Handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename、stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。

format可定义参数

asctime %(asctime)s 日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896

created %(created)f 日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值

relativeCreated %(relativeCreated)d 日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的)

msecs %(msecs)d 日志事件发生事件的毫秒部分

levelname %(levelname)s 该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')

levelno %(levelno)s 该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)

name %(name)s 所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger

message %(message)s 日志记录的文本内容,通过 msg % args计算得到的

pathname %(pathname)s 调用日志记录函数的源码文件的全路径

filename %(filename)s pathname的文件名部分,包含文件后缀

module %(module)s filename的名称部分,不包含后缀

lineno %(lineno)d 调用日志记录函数的源代码所在的行号

funcName %(funcName)s 调用日志记录函数的函数名

process %(process)d 进程ID

processName %(processName)s 进程名称,Python 3.1新增

thread %(thread)d 线程ID

threadName %(thread)s 线程名称


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。