零基础学python之函数与模块(附详细的代码和安装发布文件过程)
代码重用——函数与模块
摘要:构建函数,创建模块,安装发布文件,安装pytest和PEP 8插件,确认PEP8兼容性以及纠错
重用代码是构建一个可维护系统的关键。
代码组是Python中对块的叫法。
对之前的vowels代码功能创建一个函数名为search_for_vowels( )
在函数调用时结果:
Bool内置函数,提供某个值时它会返回这个值计算为true还是false
任何非空的数据结构都是true。
内置函数:
int(字符串,基数):将数字字符串以基数形式转为整数十进制。
int(浮点数):将浮点数转为整数十进制。
hex(整数):将十进制转为16进制
oct(整数):将十进制转为8进制
bin(整数):将十进制转为2进制
pow(底数,幂):计算底数的幂
abs(实数):求绝对值
float(实数):将数字转为浮点数
sum()min()max()
len(序列):求序列的长度
chr(整数):获取ASCII编号的字符
ord(字符串):获取单个字符的ASCII编号
range(整数):产生一组连续的数字
input()print()
str(序列):将序列转化为字符串
set(序列):将序列转化为集合
list(序列):将序列转化为列表
tuple(序列):将序列转化为字典
函数注解:
在参数后加:str 表示希望参数是一个字符串
第二行后面添加了一些内容,->set表示这个函数会返回一个集合。
在IDLE编辑窗口使用help(函数名)来查看函数的注释和注解。
函数知识小结:
ü 函数是命名的代码块。
ü def关键字用来命名函数,函数代码在def关键字下缩进。
ü Python中’’’可以用来增加多行注释。
ü 函数可以接受任意多个命名参数,也可以没有参数。
ü Return语句允许函数返回任意多个值(也可以不返回任何值)。
ü 函数注解可以用来描述函数参数的类型以及函数的返回类型。
现在函数的版本如下:
def search_for_vowels(word:str)->set:
'''FUNC:display any vowels found in an asked-for word.'''
vowels=set('aeiou')
return vowels.intersection(set(word))
建立一个通用的函数:允许用户指定要搜索的字母集合,而不总是使用五个元音。
PEP8建议所有顶层函数上下都有两个空行,这是一些默认的规定,便于程序的可读。
def search_for_letters(phrase:str,letters:str='aeiou')->set:
'''FUNC:return a set of 'letters' found in 'phrase' . '''
return set(letters).intersection(set(phrase))
#set(letters),从letters中创建一个集合对象。
#intersection是取两个集合中的交集。
#最后利用return语句将这个交集操作的结果返回给调用代码。
#letters:str='aeiou'是给letters提供一个默认值,不指定时使用aeiou
关于赋值:
在shell界面调用时输入:函数名(‘参数1’,‘参数2’)
这是位置赋值,根据函数定义时的顺序进行赋值。
关键字赋值时不需要保持顺序:
函数名(关键字1=‘参数1’,关键字2=‘参数2’)
函数知识小结2:
ü 函数可以隐藏复杂性,可以把一行复杂的代码抽象成一个简单的函数使用。
ü 任何函数都可以在def行赋一个默认值。
ü 赋值时有两种方法,不指定关键字时按照顺序赋值。
创建模块
首先建一个文件夹mymodules,然后把刚才的文件放在里面,
导入模块直接调用即可
必须切换到模块的目录下,才可以导入模块,如果目录有误或无该模块,会报错。
现在给window上创建一个发布文件:
首先给文件夹mymodules中需要三个文件
Setup.py中:
README.txt为空文件即可。
vsearch.py中:
然后在命令提示符中切换到该目录下然后输入python setup.py sdist:
切换使用cd + 路径
python setup.py sdist
最后的结果表示一切正常,现在三个文件已经合并到一个发布文件中,这是一个可安装的文件,包含了模块的源代码,名为vsearch-1.0.tar.gz,在刚才的文件夹里已经创建了一个叫dist文件夹,
下来安装发布文件:
python -m pip install vsearch-1.0.tar.gz
模块知识小结:
ü 模块就是将一个或多个函数保存在文件中。
ü 将模块安装到site-packages,将允许导入模块并使用模块中的函数,而不论当前的工作目录。
记得之前提到过的PEP 8插件,这是一个用来检查Python代码编码规范的工具,当符合这个原则时,则证明我们的代码更加的标准,可读性和兼容性也更强,若是每个人对于同一个功能的代码差距非常大,那么就不是我们学习Python的初衷了,标准化有很多好处。
回顾之前的vsearch.py代码:(我删除了后面的#开头的注释)
def search_for_vowels(phrase:str)->set: '''FUNC:display any vowels found in an asked-for word.''' vowels=set('aeiou') return vowels.intersection(set(phrase)) def search_for_letters(phrase:str,letters:str)->set: '''FUNC:return a set of 'letters' found in 'phrase' . ''' return set(letters).intersection(set(phrase))
安装pytest和PEP 8插件
上文中我们已经使用pip工具把vsearch.py模块安装到计算机的Python解释器中。Pip工具还可以用来为解释器安装第三方代码。
现在使用pip安装pytest测试框架和PEP 8插件:
搜索cmd.exe右键使用管理员身份运行
py -3 -m pip install pytest
经过一番安装之后,系统提示pip版本有些低,所以根据提示更新pip:
python -m pip install --upgrade pip
更新完成:
下来安装PEP8插件:
python -m pip install pytest-pep8
中间的提示目前来看暂且不用管,说路径的问题。
确认PEP8兼容性
下来从重新打开一个命令提示符,切换到vsearch.py所在的目录下,我的路径在桌面
文件里的内容是:
这个相信不陌生吧,就是之前创建模块的那个文件夹。
下来检查我们代码的兼容性:
py.test --pep8 vsearch.py
好像报了很多的错误,看来我们自己编写的代码是不符合兼容性要求的,下来针对每个问题进行分析。
第一个错误是:2:29 missing whitespace after ‘:’
也就是说在:之后需要加一个空格。
查看之前的代码
错误提示的2:29是第二行第29个字符也就是图中标注的位置之后缺少一个空格,我把类似的位置后面的空格都补充上。又检查了一遍。
第二个错误是:3:1 indentation contains tabs
tab有问题,删了那个tab(后面提到,这个办法是有问题的)
第三个错误:4:1 也多了一个tab
第四个错误:4:8 missing whitespace around operator
指到了那个等号,看来等号两端需要加空格。
后 面的问题是:逗号之后也需要加空格。最后面需要加一个空行。
出了一个问题:修正了所有的错误还有问题,就是tab键的问题,现在程序是这样:
def search_for_vowels(phrase: str)->set: '''FUNC:display any vowels found in an asked-for word.''' vowels = set('aeiou') return vowels.intersection(set(phrase)) def search_for_letters(phrase: str, letters: str)->set: '''FUNC:return a set of 'letters' found in 'phrase' . ''' return set(letters).intersection(set(phrase))
报的错误是这样:
说的都是一个内容,我想是不是TAB键的空格数不符合兼容性要求呢?
百度上说把tab换成四个空格,终于好了!
这下变绿了(哈哈)也即是说,现在这个代码不存在PEP8问题了。
小结PEP8:
函数注释的提示冒号之后需要一个空格;
等号两端需要空格;
逗号之后需要空格;
tab不如四个空格规范,可能是编辑器的问题;
最后需要一个空行;
每个函数前面要加两个空行;
上期回顾:3结构化数据 https://www.cnblogs.com/sebastiane-root/p/9267783.html
至此,内容就结束了,下期预告:构建web应用
零基础学python之函数与模块(附详细的代码和安装发布文件过程)的更多相关文章
- [零基础学python]为什么要开设本栏目
这个栏目的名称叫做"零基础学Python". 如今网上已经有不少学习python的课程.当中也不乏精品.按理说,不缺少我这个基础类型的课程了.可是,我注意到一个问题.无论是课程还是 ...
- 零基础学python》(第二版)
---恢复内容开始--- 零基础学python>(第二版) python学习手册 可以离线下载, .chn格式, 插入小幽默笑话,在学习累的时候看看笑话 放松一下 欢迎下载转载,请注明出处,谢 ...
- 零基础学python,python视频教程
零基础学python,python视频教程 这是我收集到的互联网上的视频资源,所有内容均来自互联网.仅供学习使用. 目前我在也在学习过程中,会把学习过程中遇到问题以及解决问题的方式,总结到我的公众号[ ...
- 小甲鱼零基础学python第25讲课后习题动手练习--通讯录
小甲鱼零基础学python第25讲课后习题动手练习---通讯录 **************************通讯录要求******************************* 输入指令: ...
- Python学习课程零基础学Python
python学习课程,零基础Python初学者应该怎么去学习Python语言编程?python学习路线这里了解一下吧.想python学习课程?学习路线网免费下载海量python教程,上班族也能在家自学 ...
- 零基础学python之构建web应用(入门级)
构建一个web应用 前面的学习回顾: IDLE是Python内置的IDE,用来试验和执行Python代码,可以是单语句代码段,也可以是文本编辑器中的多语句程序. 四个内置数据结构:列表.字典.集合和元 ...
- 零基础学Python之结构化数据(附详细的代码解释和执行结果截图)
3结构化数据 字典(查找表).集合.元组.列表 3.1字典 是有两列任意多行的表,第一列存储一个键,第二列存储一个值. 它存储键/值对,每个唯一的键有一个唯一与之关联的值.(类似于映射.表) 它不会维 ...
- 零基础学python之入门和列表数据(附详细的代码解释和执行结果截图)
Python学习笔记 1 快速入门 下载安装好Python之后,在开始找到 双击打开一个窗口,这是一个shell界面编辑窗口,点击左上角的file——new file新建一个窗口,这里可以输入完整的代 ...
- 零基础学Python不迷茫——基本学习路线及教程!
什么是Python? 在过去的2018年里,Python成功的证明了它自己有多火,它那“简洁”与明了的语言成功的吸引了大批程序员与大数据应用这的注意,的确,它的实用性的确是配的上它的热度. Pyt ...
随机推荐
- Cloudera Manager 4.6 安装部署hadoop CDH集群
Cloudera Manager 4.6 安装详解 1. Cloudera Manager介绍 1.1. 功能介绍 Cloudera Manager是一个针对hadoop集群的管理工具,功能包括:cd ...
- nginx配置解析之客户端真实IP的传递
前后端分离之后,采用nginx作为静态服务器,并通过反向代理的方式实现接口跨域的方式,在降低开发成本的同时也带来了诸多问题,例如客户端真实IP的获取. 在一些特殊场景下,比如风控和支付流程,往往需要获 ...
- React 异步组件
之前写过一篇 Vue 异步组件的文章,最近在做一个简单项目的时候又想用到 React 异步组件,所以简单地了解了一下使用方法,这里做下笔记. 传统的 React 异步组件基本都靠自己实现,自己写一个专 ...
- Java虚拟机16:Java内存模型
什么是Java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致 ...
- Day5 类和对象
面向对象编程OOP 类:相似对象的集合. 对象 对象:实体.一切可以被描述的事物. 属性:特征. 方法:动作,行为. 类和对象的区别 [1]类时抽象的,对象是具体的. [2]类是一个模板,创建出来的对 ...
- C 六学家的困惑 【YY】 (2019年华南理工大学程序设计竞赛(春季赛))
冲鸭,去刷题:https://ac.nowcoder.com/acm/contest/625/C 小六喜欢两全其美的事情,今天就正好有一个这样的机会. 小六面前有两根管子,管子里面放满了数字为1到9的 ...
- LayIM.AspNetCore Middleware 开发日记(一)闲言碎语
前言 前几天写博客的时候突然看见了历史上的今天.不禁感慨时光如梭,这系列博客后来被我标注了已经过时,但是还有很多小伙伴咨询我.既然过时就要更新,正好 .NET Core 也出来很久了,于是乎想到把La ...
- oracle之修改/忘记用户密码
一.修改/忘记用户密码: ## 修改oracle用户名和密码 sqlplus /nolog ## DBA角色进入 conn /as sysdba; ## 查看用户列表 select username ...
- smtp ssl模式邮件发送与附件添加
#!/usr/bin/python3 import os import smtplib from email.mime.text import MIMEText from email.mime.mul ...
- 检测ip和地区
获取当前位置所在省份城市和所用网络IP <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...