python中head_Python(Head First)学习笔记:二
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)学习笔记:二相关推荐
- 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 ...
- Python零基础入门(二)——Python中常见的数据结构[学习笔记]
目录 1.Number(数字) 2.String(字符串) 3.List(列表) 4.Tuple(元组) 5.Set(集合) 6.Dictionary(字典) 1.Number(数字) Python ...
- python中continue用法_Python学习笔记之Break和Continue用法分析
本文实例讲述了Python学习笔记之Break和Continue用法.分享给大家供大家参考,具体如下: Python 中的Break 和 Continue break:控制何时循环应该结束 conti ...
- python中documentelement_python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)...
xml.dom篇 DOM是Document Object Model的简称,XML 文档的高级树型表示.该模型并非只针对 Python,而是一种普通XML 模型.Python 的 DOM 包是基于 S ...
- python中pandas格式_Python学习笔记之数据分析中Pandas常用知识
前言 Pandas基于两种数据类型:series与dataframe. 一个series是一个一维的数据类型,其中每一个元素都有一个标签.series类似于Numpy中元素带标签的数组.其中,标签可以 ...
- python定义变量字符串_Python学习笔记二(变量和字符串)
2017年年终确定的从2018年开始学习一门新的语言.随着机器学习人工智能的日渐深入,是时候有必要掌握以下Python了.博客今天更新第二篇学习记录,关于Python的变量和变量中字符串的使用,所有学 ...
- python中deepcopy函数_Python学习笔记函数之copy()和deepcopy()
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- python中elif语句_Python学习笔记控制流语句之elif语句
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- python中raise stoplteration_Python面向对象学习笔记3
装饰器 用于拓展原有函数功能的一种函数 返回函数的函数 在不用更改原函数的代码前提下给函数增加新的功能 @funcname 直接在函数名前加@调用 def log(func): def wrapper ...
最新文章
- 聚焦数字货币的发展与监管
- python字典值的和计算_第一章Python数据结构和算法(字典的运算)
- Redis中的可用性保证之Sentinel故障转移
- mysql从节点放家里_添加MySQL 5.6 从节点 Slave
- UITextFeild的基本属性
- windows虚拟机_iOS 版虚拟机:在 iPhone 上运行 Windows 系统
- 无法设置或未定义null引用的属性innerHTML
- docker 1.8+之后ubuntu安装指定版本docker-engine
- 数仓建模—建模工具PdMan
- linux windows网络工程师,2020年软考中级网络工程师考点:Linux系统
- 高中计算机竞赛学什么,什么是高中数学竞赛,要怎么去做?
- Spring JMX注解的使用方式:@ManagedResource @ManagedOperation @ManagedAttribute
- 数据库:试图删除被依赖对象
- 异常篇 之 记录一次因“MIUI 优化”引发的无奈。。。
- TeKtronix TDS210数字示波器说明书
- 用【马科维茨资产组合选择模型】来咕叽咕叽
- 计算机 工程领域的应用论文,计算机工程硕士论文
- 实现正负值及多条Y轴 Echarts柱状图
- QQZone的需求介绍和数据库设计
- AD怎么输入坐标_双心软件回头曲线坐标计算?
热门文章
- python中valueerror是什_Python:ValueError和Exception的区别?
- C++局部重载new delete方法剖析
- CUDA 开启GPU之间的P2P通信功能
- 4KB/4MB 32位分页模式下的线性地址翻译以及CR3
- CentOS7救援模式以及救援模式的网络配置
- ld 用法:gcc 过程最后一步-链接
- /dev/tty和/dev/console
- 2018.12.11-21:45
- 荣耀 升级 鸿蒙,荣耀终于放出大招!4部荣耀旗舰可升级鸿蒙,网友:终于等到了...
- 数学打比方(函数和卷积)