pyhthon基础知识【6】:内置函数、Jason/Pickle序列化操作与软件书写规范

本节内容:
1、内置函数
2、Jason/Pickle序列化操作
3、软件书写规范

----------------------------------------------------------------------------/---------------------------------------------------------------
1、内置函数
1、内置函数全括
详细解释可参见 http://www.runoob.com/python3/python3-built-in-functions.html ,或者通过搜索引擎搜索
2、重点函数关注
2.1 help( )
help() 函数用于查看函数或模块用途的详细说明。
>>>help('sys')             # 查看 sys 模块的帮助
……显示帮助信息…… 
>>>help('str')         # 查看 str 数据类型的帮助 
……显示帮助信息…… 
>>>a = [1,2,3] 
>>>help(a)             # 查看列表 list 帮助信息
……显示帮助信息…… 
>>>help(a.append)     # 显示list的append方法的帮助
……显示帮助信息……
2.2 dir( )
dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
>>> dir ( )       # 获得当前模块的属性列表
[ ' __builtins__ ' ,   ' __doc__ ' ,   ' __name__ ' ,   ' __package__ ' ,   ' arr ' ,   ' myslice ' ]   >>>   dir ( [   ] )   # 查看列表的方法   [ ' __add__ ' ,   ' __class__ ' ,   ' __contains__ ' ,   ' __delattr__ ' ,   ' __delitem__ ' ,   ' __delslice__ ' ,   ' __doc__ ' ,   ' __eq__ ' ,   ' __format__ ' ,   ' __ge__ ' ,   ' __getattribute__ ' ,   ' __getitem__ ' ,   ' __getslice__ ' ,   ' __gt__ ' ,   ' __hash__ ' ,   ' __iadd__ ' ,   ' __imul__ ' ,   ' __init__ ' ,   ' __iter__ ' ,   ' __le__ ' ,   ' __len__ ' ,   ' __lt__ ' ,   ' __mul__ ' ,   ' __ne__ ' ,   ' __new__ ' ,   ' __reduce__ ' ,   ' __reduce_ex__ ' ,   ' __repr__ ' ,   ' __reversed__ ' ,   ' __rmul__ ' ,   ' __setattr__ ' ,   ' __setitem__ ' ,   ' __setslice__ ' ,   ' __sizeof__ ' ,   ' __str__ ' ,   ' __subclasshook__ ' ,   ' append ' ,   ' count ' ,   ' extend ' ,   ' index ' ,   ' insert ' ,   ' pop ' ,   ' remove ' ,   ' reverse ' ,   ' sort ' ]  
>>>
2.3 enumerate( ) 
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
1.用法实例
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter'] 
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] 
>>> list(enumerate(seasons, start=1))     # 小标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]


2.和for循环配合
>>>seq = ['one', 'two', 'three'] 
>>> for i, element in enumerate(seq):
... print i, element 
...

输出
0 one 
1 two
2 three
2.4 filter( )
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
#!/usr/bin/python # -*- coding: UTF-8 -*- 
def is_odd(n): 
    return n % 2 == 1 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(newlist)
输出:
[1, 3, 5, 7, 9]
2.5 exec()
exec 执行储存在字符串或文件中的Python语句,相比于 eval,exec可以执行更复杂的 Python 代码。
输入:
x   =   10  
expr   =   """  
z = 30 
      sum = x + y + z print(sum)
      """  
def   func ( ) :
    y   =   20   exec ( expr )
    exec ( expr , { ' x ' :   1 ,   ' y ' :   2 } )  
    exec ( expr , { ' x ' :   1 ,   ' y ' :   2 }, { ' y ' :   3 ,   ' z ' :   4 } )  

func ( )

输出:
60
33
34

2、Jason/Pickle序列化操作
2.1 序列化与反序列化
序列化:把当前某些工作状态存储到文件的过程
反序列化:把存储某些工作状态的文件重新读取到程序中的过程,与序列化互为逆操作

2.2两者使用方法是一样的,只是导入时的包名不一样
2.3二者的区别是Jason是用于字符串 和 python数据类型间进行转换(即序列化后的文件可以给其他语言识别,如JAVA等),而Pickle是用于python         特有的类型 和 python的数据类型间进行转换(即仅仅Python程序之间互相交互,其他语言无法识别)
2.4 Jason模块提供了四个功能:dumps、dump、loads、load
      pickle模块提供了四个功能:dumps、dump、loads、load
2.5 dumps与dump用于序列化
      loads与load用于反序列化

3、软件书写规范(以下部分是转载的http://www.cnblogs.com/alex3714/articles/5765046.html
3.1 文件夹结构:
如要写一个叫shoppingcar的程序
shoppingcar/
|-- bin/                                             #存放项目的一些可执行文件,当然你可以起名script/之类的也行。
|   |-- shoppingcar                             #软件启动文件,通过这个文件去调用shoppingcar文件夹里面的main.py开始程序
|
|-- shoppingcar/                              #源代码和相关的包存放文件夹
|   |-- tests/                                        
|   |   |-- __init__.py
|   |   |-- test_main.py
|   |
|   |-- __init__.py
|   |-- main.py
|
|-- docs/                                            #一些文档,包括配置文件等
|   |-- conf.py
|   |-- abc.rst
|
|-- setup.py                                       #用于安装、部署、打包的脚本。
|-- requirements.txt                           #存放软件依赖的外部Python包列表。
|-- README                                      #项目说明文件
3.2 关于README的内容
它需要说明以下几个事项:
1.软件定位,软件的基本功能。
2.运行代码的方法: 安装环境、启动命令等。
3.简要的使用说明。
4.代码目录结构说明,更详细点可以说明软件的基本原理。
5.常见问题说明。

3.3 setup.py
一般来说,用setup.py来管理代码的打包、安装、部署问题。业界标准的写法是用Python流行的打包工具setuptools来管理这些事情。这种方式普遍应用于开源项目中。不过这里的核心思想不是用标准化的工具来解决这些问题,而是说,一个项目一定要有一个安装部署工具,能快速便捷的在一台新机器上将环境装好、代码部署好和将程序运行起来。
这个我是踩过坑的。
我刚开始接触Python写项目的时候,安装环境、部署代码、运行程序这个过程全是手动完成,遇到过以下问题:
1.安装环境时经常忘了最近又添加了一个新的Python包,结果一到线上运行,程序就出错了。
2.Python包的版本依赖问题,有时候我们程序中使用的是一个版本的Python包,但是官方的已经是最新的包了,通过手动安装就可能装错了。
3.如果依赖的包很多的话,一个一个安装这些依赖是很费时的事情。
4.新同学开始写项目的时候,将程序跑起来非常麻烦,因为可能经常忘了要怎么安装各种依赖。
setup.py可以将这些事情自动化起来,提高效率、减少出错的概率。"复杂的东西自动化,能自动化的东西一定要自动化。"是一个非常好的习惯。
setuptools的文档比较庞大,刚接触的话,可能不太好找到切入点。学习技术的方式就是看他人是怎么用的,可以参考一下Python的一个Web框架,flask是如何写的: setup.py
当然,简单点自己写个安装脚本(deploy.sh)替代setup.py也未尝不可。

3.4 requirements.txt
这个文件存在的目的是:
1.方便开发者维护软件的包依赖。将开发过程中新增的包添加进这个列表中,避免在setup.py安装依赖时漏掉软件包。
2.方便读者明确项目使用了哪些Python包。
这个文件的格式是每一行包含一个包依赖的说明,通常是flask>=0.10这种格式,要求是这个格式能被pip识别,这样就可以简单的通过 pip install -r requirements.txt来把所有Python包依赖都装好了。

3.5 关于配置文件的使用方法
注意,在上面的目录结构中,没有将conf.py放在源码目录下,而是放在docs/目录下。
很多项目对配置文件的使用做法是:
1.配置文件写在一个或多个python文件中,比如此处的conf.py。
2.项目中哪个模块用到这个配置文件就直接通过import conf这种形式来在代码中使用配置。
这种做法我不太赞同:
1.这让单元测试变得困难(因为模块内部依赖了外部配置)
2.另一方面配置文件作为用户控制程序的接口,应当可以由用户自由指定该文件的路径。
3.程序组件可复用性太差,因为这种贯穿所有模块的代码硬编码方式,使得大部分模块都依赖conf.py这个文件。
所以,我认为配置的使用,更好的方式是,
1.模块的配置都是可以灵活配置的,不受外部配置文件的影响。
2.程序的配置也是可以灵活控制的。
能够佐证这个思想的是,用过nginx和mysql的同学都知道,nginx、mysql这些程序都可以自由的指定用户配置。
所以,不应当在代码中直接import conf来使用配置文件。上面目录结构中的conf.py,是给出的一个配置样例,不是在写死在程序中直接引用的配置文件。可以通过给main.py启动参数指定配置路径的方式来让程序读取配置内容。当然,这里的conf.py你可以换个类似的名字,比如settings.py。或者你也可以使用其他格式的内容来编写配置文件,比如settings.yaml之类的。

















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值