2 共享代码:连接共享社区、语法、函数、技巧

  通过Python模块共享代码,在Python社区分享这些模块,让更多的人受益,

  不得不说,Python真的做的不错~

  Python提供了一组技术,用于模块共享和发布;

  关于模块:将包含Python代码的文件保存为以.py为结尾的文件;

  第三方的Python模块都放在了PyPI(Python Package Index )上;

  通过“”“注释内容"""来完成多行注释,用#注释单行;

  在ubuntu上可以用vi nester.py,建立一个.py文件,然后输入之前的那个递归函数,做为一个python模块。

  查看Python模块存放位置:在IDLE中输入:  

                    >>>import sys

                    >>>sys.path

   关于构建发布

    建立一个文件夹nester,里面放两个文件,一个是前面那个函数,另一个是名为setup.py的文件。

    setup.py的内容如下:

    from distutils.core import setup

    setup(

        name    = 'nester',

        version      = '1.0.0',

        py_modules = ['nester'],

        author     = 'hfpython',

        url      = 'http://www.headfirstlabs.com',

        description   = 'A simple printer of nested lists',

)

   然后,在nester文件夹下打开终端Terminal,输入:python3 setup.py sdist

      将发布安装到python本地副本中,输入:sudo python3 setup.py install

  导入模块并使用

    在python3下,输入:import nester

               cast = ['a','b','c','d']

               nester.print_lol(cast) 

              注:导入模块是不需要加.py扩展名。

  Python的模块实现命名空间

    Python中所有代码都与一个命名空间关联;

    主Python程序中的代码与一个名为“__main__”的命名空间关联,而nester模块的代码与nester的命名空间关联;

    命名空间就像是姓氏一样,所以:

        调用模块时需要加命名空间,如:nester.print_lol(movies)

  注册PyPI网站

    访问网站:http://pypi.python.org/,然后注册一个PyPI ID,记住username和password。

  向PyPI上传代码  

    打开终端,然后进到nester文件夹下,然后输入:

      python3 setup.py register

      选1选项:use your existing login

      输入username和password

      save your login:y保存PyPI设置

      python3 setup.py sdist upload上传模块

  可以从PyPI社区查看上传的代码模块,确认上传成功。

  问答:

    1 将代码模块安装到本地副本中和其他文件夹下都是可以的,在其他文件夹下,需要使用import sys;sys.path导入,比较麻烦。

    2 nester.pyc文件是Python解释器第一次执行模块代码时,将代码转换成中间字节码格式的文件,类似于Java的JVM工作原理,

     这样做的好处是,如果模块没有更改,下次编译会快很多,不用再重新生成中间代码模块了。

  用额外的参数控制行为:可以通过给函数添加参数,做成选项参数,用于函数不同功能的实现等。

  写新代码之前,优先考虑使用BIF。

    比如:range(),用于生成一个从0到指定数之间的一个数字列表,还可以提供需要的控制来迭代指定的次数。

    实例:更改print_lol(the_list,level):

          for each_item in the list:

              if isinstance(each_item,list):

              print_lol(each_item)  #这里是有问题的,没有调用print_lol的第二个参数

          else:

            for tab_stop in range(level):

              print("\t",end=")

            print(each_item)

  问答:

    1 使用BIF,不需要进行导入的操作。

     2 BIF的命名空间是__builtins__,使用时它们会自动导入到__main__的命名空间里。

     3 BIF已经经过了大量的测试,是很成熟的函数,善于使用可以事半功倍。

  Python 会尽力运行你的代码

    Python在运行之前不会全面检查代码的合法性,这样导致Python非常灵活,如:运行时动态地定义函数。

  跟踪代码  

    检查程序Bug,修改上面的递归调用:

                    if isinstance(each_item,list):

                         print_lol(each_item,level+1)

  用修改后的模块更新PyPI

    打开setup.py,更改里面的version为1.10,然后在终端输入:python3 setup.py sdist upload,完成更新。

     使用可选参数

    对于函数的参数,如果给参数赋值,那么这个参数就会变成一个可选参数;

            如果没有给参数赋值,那么这个参数就会变成一个必要值。

            如:def print_lol(the_list,level=0),其中the_list是必要值,level是可选值。

  最后一个修改函数,增加第三个参数

    增加一个新参数:indent,作用是:是否打开缩进功能;

      实例:

          def print_lol(the_list,indent=False,level=0):   #注意大小写

          for each_item in the_list:

            if isinstance(each_item,list):

              print_lol(each_item,indent,level+1)

            else:

              if indent:

                for tab_stop in range(level):

                  print("\t",end=' ')

                print(each_item)

         然后,更改setup.py的version为1.0.3,

            终端输入:python3 setup.py sdisk upload更新模块。

      注:1 使用BIF的print()时,包含end=' '时,会对输入自动换行;

        2 如果函数的参数被赋值,说明这个参数是可选的。

--------------------------------------------The End of Second Chapter--------------------------------

Python(Head First)学习笔记:二的更多相关文章

  1. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  2. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  3. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  4. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  5. python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字

    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...

  6. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  7. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

  8. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  9. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  10. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

随机推荐

  1. pull解析案例

    此pull解析案例是eclipes的对不对,不知道, private void getXml() { try { InputStream is = getAssets().open("new ...

  2. 基于.NET Core开发的个人博客发布至CentOS小计

    早些时候,使用 .NET Framework 开发网站,只能部署在 Windows 服务器上面,近两年 .NET Core 如火如荼,乘此机会赶紧上车,最近将自己利用 .NET Core 开发的个人博 ...

  3. 码农"混子"的思想转变

    首先介绍一下自己,在高中的时候学校对于我们这种普通班级采取的都是放养状态,所以高中的学习真是不咋地,可能除了自己擅长的数学以外其他也就考个三四十分,后来磕磕绊绊的在打游戏之余也会学习,第一次参加高考跟 ...

  4. (二十五)c#Winform自定义控件-有确定取消的窗体(一)

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...

  5. 7.4 元组tuple类型内置方法

    元组tuple 元组相当于不可变的列表,在定义完成后后面就不可以进行更改,因此元组只可取不可存 因为不可变,所以相对列表来说,他的功能也少了很多,所以,不难理解,他有个优点就是占用内存小. 作用:能够 ...

  6. wordpress修改登录密码

    wordpress忘记密码更改 网上搜到的方法: 1.后台邮件重置: 2,phpmyadmin登录数据库,执行mysql语句或者在wp_users表中重置密码: 3,利用php文件重置. 这是提供一种 ...

  7. c语言实现基本的数据结构(一) 线性表

    #include <stdio.h> #include <tchar.h> #include <stdlib.h> #define LIST_INIT_SIZE 1 ...

  8. Unity进阶之ET网络游戏开发框架 05-搭建自己的第一个Scene

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  9. 动图+源码,演示Java中常用数据结构执行过程及原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  10. 高德全链路压测平台TestPG的架构与实践

    导读 2018年十一当天,高德DAU突破一个亿,不断增长的日活带来喜悦的同时,也给支撑高德业务的技术人带来了挑战.如何保障系统的稳定性,如何保证系统能持续的为用户提供可靠的服务?是所有高德技术人面临的 ...