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_Python(Head First)学习笔记:二相关推荐

  1. python中head_Python(Head First)学习笔记:六

    6 定制数据对象:数据结构自定义 打包代码与数据 james2.txt: James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-2 ...

  2. Python零基础入门(二)——Python中常见的数据结构[学习笔记]

    目录 1.Number(数字) 2.String(字符串) 3.List(列表) 4.Tuple(元组) 5.Set(集合) 6.Dictionary(字典) 1.Number(数字) Python ...

  3. python中continue用法_Python学习笔记之Break和Continue用法分析

    本文实例讲述了Python学习笔记之Break和Continue用法.分享给大家供大家参考,具体如下: Python 中的Break 和 Continue break:控制何时循环应该结束 conti ...

  4. python中documentelement_python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)...

    xml.dom篇 DOM是Document Object Model的简称,XML 文档的高级树型表示.该模型并非只针对 Python,而是一种普通XML 模型.Python 的 DOM 包是基于 S ...

  5. python中pandas格式_Python学习笔记之数据分析中Pandas常用知识

    前言 Pandas基于两种数据类型:series与dataframe. 一个series是一个一维的数据类型,其中每一个元素都有一个标签.series类似于Numpy中元素带标签的数组.其中,标签可以 ...

  6. python定义变量字符串_Python学习笔记二(变量和字符串)

    2017年年终确定的从2018年开始学习一门新的语言.随着机器学习人工智能的日渐深入,是时候有必要掌握以下Python了.博客今天更新第二篇学习记录,关于Python的变量和变量中字符串的使用,所有学 ...

  7. python中deepcopy函数_Python学习笔记函数之copy()和deepcopy()

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  8. python中elif语句_Python学习笔记控制流语句之elif语句

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  9. python中raise stoplteration_Python面向对象学习笔记3

    装饰器 用于拓展原有函数功能的一种函数 返回函数的函数 在不用更改原函数的代码前提下给函数增加新的功能 @funcname 直接在函数名前加@调用 def log(func): def wrapper ...

最新文章

  1. 聚焦数字货币的发展与监管
  2. python字典值的和计算_第一章Python数据结构和算法(字典的运算)
  3. Redis中的可用性保证之Sentinel故障转移
  4. mysql从节点放家里_添加MySQL 5.6 从节点 Slave
  5. UITextFeild的基本属性
  6. windows虚拟机_iOS 版虚拟机:在 iPhone 上运行 Windows 系统
  7. 无法设置或未定义null引用的属性innerHTML
  8. docker 1.8+之后ubuntu安装指定版本docker-engine
  9. 数仓建模—建模工具PdMan
  10. linux windows网络工程师,2020年软考中级网络工程师考点:Linux系统
  11. 高中计算机竞赛学什么,什么是高中数学竞赛,要怎么去做?
  12. Spring JMX注解的使用方式:@ManagedResource @ManagedOperation @ManagedAttribute
  13. 数据库:试图删除被依赖对象
  14. 异常篇 之 记录一次因“MIUI 优化”引发的无奈。。。
  15. TeKtronix TDS210数字示波器说明书
  16. 用【马科维茨资产组合选择模型】来咕叽咕叽
  17. 计算机 工程领域的应用论文,计算机工程硕士论文
  18. 实现正负值及多条Y轴 Echarts柱状图
  19. QQZone的需求介绍和数据库设计
  20. AD怎么输入坐标_双心软件回头曲线坐标计算?

热门文章

  1. python中valueerror是什_Python:ValueError和Exception的区别?
  2. C++局部重载new delete方法剖析
  3. CUDA 开启GPU之间的P2P通信功能
  4. 4KB/4MB 32位分页模式下的线性地址翻译以及CR3
  5. CentOS7救援模式以及救援模式的网络配置
  6. ld 用法:gcc 过程最后一步-链接
  7. /dev/tty和/dev/console
  8. 2018.12.11-21:45
  9. 荣耀 升级 鸿蒙,荣耀终于放出大招!4部荣耀旗舰可升级鸿蒙,网友:终于等到了...
  10. 数学打比方(函数和卷积)