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 First)学习笔记:二的更多相关文章
- python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码
python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字
python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...
- python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法
python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- Django学习笔记二
Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...
随机推荐
- Zookeeper开源客户端Curator的使用
开源zk客户端-Curator 创建会话: RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3); CuratorFramewor ...
- JavaWeb——JSP表达式语言(EL)
1.JSP表达式语言(EL)用于在jsp从访问存储在JavaBean中的数据,例如 User ID: ${user.userId}<br /> 这里的${user.userId}就是JSP ...
- 重学计算机组成原理(六)- 函数调用怎么突然Stack Overflow了!
用Google搜异常信息,肯定都访问过Stack Overflow网站 全球最大的程序员问答网站,名字来自于一个常见的报错,就是栈溢出(stack overflow) 从函数调用开始,在计算机指令层面 ...
- Sqlmap过waf命令tamper各脚本的适用环境
0x00 相信很多小伙伴和我一样感同身受,站上明明有注入可是被万恶的WAF拦截了或者过滤了,这时候就需要用到SQLMAP强大的tamper了. 0x01 使用方法--tamper xxx.py apo ...
- vue-cli+v-charts实现移动端可视化图表
v-charts是饿了么团队开源的一款基于Vue和Echarts的图表工具,在使用 echarts 生成图表时,经常需要做繁琐的数据类型转化.修改复杂的配置项,v-charts 的出现正是为了解决这个 ...
- linux环境部署,docker如何安装redis
安装步骤 1. 安装Redis 通过docker search redis和docker pull redis下载redis镜像 2. 新建挂载配置文件夹 新建data和conf两个文件夹,位置随意. ...
- Spring-Boot:拦截器注解范例
package com.example.aop; import java.lang.annotation.Documented; import java.lang.annotation.Element ...
- shiro实现session共享(本文转自店蛋蛋)
session共享:在多应用系统中,如果使用了负载均衡,用户的请求会被分发到不同的应用中,A应用中的session数据在B应用中是获取不到的,就会带来共享的问题. 假设:用户第一次访问,连接的A服务器 ...
- 用Canvas实现Photoshop的钢笔工具(贝塞尔曲线)
前两天在用Canvas实现一个绘制路径的小功能.做完之后发现加以完善可以“复刻”一下PS里面的钢笔工具. PS里的钢笔工具对我来说是PS中最好用的工具! 所以本文主要介绍如何用Canvas来实现Pho ...
- Contour 学习笔记(一):使用 Contour 接管 Kubernetes 的南北流量
原文链接:Contour 学习笔记(一):使用 Contour 接管 Kubernetes 的南北流量 在 Kubernetes 中运行大规模以 Web 为中心的工作负载,最关键的需求之一就是在 L7 ...