毕业记

www.4688.com 1

head first python(第二章)–学习流程图

 
 背不完的国药药方,睡不醒的学院课堂,逼仄的八人宿舍,抠门儿的学习者食堂。和那个夏天潮热的风,一同截止在二零一七年五月。

www.4688.com 2

   再一次提笔写关于2012级针灸桑拿3班的故事,如梗在喉,无语凝噎。

1.函数转移为模块

函数转换为模块后,就可以灵活的运用模块,方便代码分类,防止代码堆积在一个文件上。当你写的python代码达到一定数额并且职能开首添加的时候,就非得要那样做了。而模块会设有python本地副本目录里面,所以须要打包,需求设置模块到副本目录,以便python解释器可以找到模块,然后使用。

python搜索模块的目录地点:(大约须要通晓就行了)

python

Python 2.6.6 (r266:84292, Jan 22 2014, 09:37:14) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python26.zip', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/site-packages']
>>> 

 
 黑板上“迎新班会”三个字还心心念念,印象里都是刚军训完,黑暗的瘦猴们羞涩地在讲台上做自我介绍的规范。我来自甘肃,我来自黑龙江,我来自新疆、吉林、山西、吉林、安卡拉、日本首都、广西、内蒙古。

1.1 创设目录和文书

成立目录nester

mkdir nester

跻身nester目录并创制nester.py 和setup.py

cd netster

vi nester.py

"""This is the "nester.py" module and it provides one function called print_lol() 
    which prints lists that may or may not include nested lists."""

def print_lol(the_list):
    """This function takes one positional argument called "the_list", which 
        is any Python list (of - possibly - nested lists). Each data item in the 
        provided list is (recursively) printed to the screen on it’s own line."""

for each_item in the_list:
    if isinstance(each_item, list):
        print_lol(each_item)
    else:
        print(each_item)

nester.py代码模块文件,格式要审慎,不必加上其余的事物。

vi setup.py

from distutils.core import setup

setup( 
    name         = 'nester', 
    version      = '1.0.0', 
    ## TODO: be sure to change these next few lines to match your details!
    py_modules   = ['nester'],
    author       = 'hfpython',
    author_email = 'hfpython@headfirstlabs.com',
    url          = 'http://www.headfirstlabs.com',
    description  = 'A simple printer of nested lists',
 )

setup.py是模块发表的元文件metafile,里面含有模块的部分宣布新闻。根据格式和须要编制即可。

   是或不是还记得?

1.2 使用python setup.py sdist命令打包代码,生成发布包

python setup.py sdist
running sdist
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
warning: sdist: standard file not found: should have one of README, README.txt
writing manifest file 'MANIFEST'
creating nester-1.0.0
making hard links in nester-1.0.0...
hard linking nester.py -> nester-1.0.0
hard linking setup.py -> nester-1.0.0
creating dist
tar -cf dist/nester-1.0.0.tar nester-1.0.0
gzip -f9 dist/nester-1.0.0.tar
tar -cf dist/nester-1.0.0.tar nester-1.0.0
gzip -f9 dist/nester-1.0.0.tar
removing 'nester-1.0.0' (and everything under it)

打包后会生成目录dist和文书MANIFEST

├── dist
│   └── nester-1.0.0.tar.gz
├── MANIFEST
├── nester.py
└── setup.py

cat MANIFEST

nester.py
setup.py

发布后会多了dist目录和MANIFEST文件,那2个是发布的扭转的包和相关安顿文件。

 
 这个考试当天早早来到体育场馆发现地点已被全部占满,只剩讲台正前寥寥无几的您;这些考试时候无可如何写不出答案,前边同学却用并不宽大的肌体挡住了答题卡的您;这个为“响应班团号召”,捐躯打lol的光阴去和田河一侧吹风捡垃圾的您;那些老师说要点名回答难题时恨不得把头埋进土里却依然中招忍不住要骂卧槽的你。

1.3 安装打包代码,纵然安装nester模块

python setup.py install

running install
running build
running build_py
copying nester.py -> build/lib
running install_lib
copying build/lib/nester.py -> /usr/lib/python2.6/site-packages
byte-compiling /usr/lib/python2.6/site-packages/nester.py to nester.pyc
running install_egg_info
Removing /usr/lib/python2.6/site-packages/nester-1.0.0-py2.6.egg-info
Writing /usr/lib/python2.6/site-packages/nester-1.0.0-py2.6.egg-info

安装后

.
├── build
│   └── lib
│   └── nester.py
├── dist
│   └── nester-1.0.0.tar.gz
├── MANIFEST
├── nester.py
└── setup.py

设置后悔出现build目录,这些就是用发布包解压出来的库和模块代码,会联合置于python的模块搜索目录里面去。

www.4688.com,   大家总算要和那些微小的窘迫说再见了。
终于要变为行事极为谨慎处事周详的另一个谈得来。生活狼狈,诱惑良多。白日放歌须纵酒,青春作伴好回村。但行好事,莫问前程。

1.4 模块使用的时候就是import nester

而是出现了错误

>>> import nester
>>> print_lol(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'print_lol' is not defined
>>> 

是因为命名空间的涉及,主python程序中(以及idle
shell中)的代码与一个名为main的命名空间关系。所以的话不能直接使用print_lol,而要加上命名空间nester.print_lol()

知识点:

1.命名空间是为了让python解释器就会知道去哪里找这个函数,命名空间格式:首先是模块名字,然后是一个点号,再后面是函数名。

2.如果使用from nester import print_lol,就会把指定的函数print_lol增加到当前命名空间中,这样就不用加上命名空间来调用函数了。

  祝2012级针灸拔罐3班全部同学毕业开心!

2.用额外的参数控制行为(须要对嵌套列表举行缩进)

诸如此类可以追加效益而不用增添多余函数代码(print_lol2)。

写新代码此前先考虑BIF(内置函数)

rang() 重返一个迭代器,依据必要生成一个指定范围的数字。

据悉必要写了这般的代码,但运行报错
追加了一个level参数,默许等于0,遭受嵌套列表就是用rang(level)来展开缩进

def print_lol(a_list, level=0):
    """Prints each item in a list, recursively descending
    into nested lists (if necessary)."""

for each_item in a_list:
    if isinstance(each_item, list):
        print_lol(each_item, level)
    else:
        for l in range(level):
            print("\t", end='')
        print(each_item)

并发谬误了:TypeError:print_lol() take exactly 2 positional arguments
(1 given)

原因是print_lol必要2个参数,近日唯有一个。

要改成

def print_lol(a_list, level=0):
    """Prints each item in a list, recursively descending
    into nested lists (if necessary)."""

for each_item in a_list:
    if isinstance(each_item, list):
        print_lol(each_item, level+1)  #因为不加1的话函数调用还是会出现level=0,就没有意义了
    else:
        for l in range(level):
            print("\t", end='')
        print(each_item)

然后更新代码宣布包

from distutils.core import setup

setup( 
    name         = 'nester', 
    version      = '1.1.0',     #这里改成1.1.0了,更新了新代码版本
    ## TODO: be sure to change these next few lines to match your details!
    py_modules   = ['nester'],
    author       = 'hfpython',
    author_email = 'hfpython@headfirstlabs.com',
    url          = 'http://www.headfirstlabs.com',
    description  = 'A simple printer of nested lists',
 )

  此别经年,我们漂流瓶联系。

3.改变了API

因为增添了level参数,改变了默许的一举一动(最原始的默许行为不想要缩进),导致打印出来的格式有充足,必要再充实一个可选参数,来控制缩进功用的行使。

增添一个indent参数来控制缩进是还是不是打开

def print_lol(a_list, indent=False, level=0):
    """Prints each item in a list, recursively descending
    into nested lists (if necessary)."""

for each_item in a_list:
    if isinstance(each_item, list):
        print_lol(each_item, indent, level+1)
    else:
        if indent:
            for l in range(level):
                print("\t", end='')
        print(each_item)

亟待专注的是有着代码倘若不是idel中运行以来,都亟需丰盛#!/usr/bin/python在顶部。


原稿链接:http://www.godblessyuan.com/2015/04/13/head\_first\_python\_chapter\_2\_learning/

                       2012级针灸按摩3班团支书

                             黄雅丽 敬上

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website