零基础学python之函数与模块(附详细的代码和安装发布文件过程)

时间:2022-02-23 21:14:24

代码重用——函数与模块

摘要:构建函数,创建模块,安装发布文件,安装pytest和PEP 8插件,确认PEP8兼容性以及纠错

重用代码是构建一个可维护系统的关键。

代码组是Python中对块的叫法。

对之前的vowels代码功能创建一个函数名为search_for_vowels( )

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

在函数调用时结果:

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

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 表示希望参数是一个字符串

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

第二行后面添加了一些内容,->set表示这个函数会返回一个集合。

在IDLE编辑窗口使用help(函数名)来查看函数的注释和注解。

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

函数知识小结:

  ü 函数是命名的代码块。

  ü 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,然后把刚才的文件放在里面,

导入模块直接调用即可

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

必须切换到模块的目录下,才可以导入模块,如果目录有误或无该模块,会报错。

现在给window上创建一个发布文件:

首先给文件夹mymodules中需要三个文件

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

Setup.py中:

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

README.txt为空文件即可。

vsearch.py中:

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

然后在命令提示符中切换到该目录下然后输入python setup.py sdist:

切换使用cd + 路径

python setup.py sdist

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

最后的结果表示一切正常,现在三个文件已经合并到一个发布文件中,这是一个可安装的文件,包含了模块的源代码,名为vsearch-1.0.tar.gz,在刚才的文件夹里已经创建了一个叫dist文件夹,

下来安装发布文件:

python -m pip install vsearch-1.0.tar.gz

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

模块知识小结:

  ü 模块就是将一个或多个函数保存在文件中。

  ü 将模块安装到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

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

经过一番安装之后,系统提示pip版本有些低,所以根据提示更新pip:

python -m pip install --upgrade pip

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

更新完成:

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

下来安装PEP8插件:

python -m pip install pytest-pep8

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

中间的提示目前来看暂且不用管,说路径的问题。

确认PEP8兼容性

下来从重新打开一个命令提示符,切换到vsearch.py所在的目录下,我的路径在桌面

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

文件里的内容是:

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

这个相信不陌生吧,就是之前创建模块的那个文件夹。

下来检查我们代码的兼容性:

py.test --pep8 vsearch.py

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

好像报了很多的错误,看来我们自己编写的代码是不符合兼容性要求的,下来针对每个问题进行分析。

第一个错误是:2:29 missing whitespace after ‘:’

也就是说在:之后需要加一个空格。

查看之前的代码

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

错误提示的2:29是第二行第29个字符也就是图中标注的位置之后缺少一个空格,我把类似的位置后面的空格都补充上。又检查了一遍。

第二个错误是:3:1 indentation contains tabs

tab有问题,删了那个tab(后面提到,这个办法是有问题的)

第三个错误:4:1 也多了一个tab

第四个错误:4:8 missing whitespace around operator

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

指到了那个等号,看来等号两端需要加空格。

后 面的问题是:逗号之后也需要加空格。最后面需要加一个空行。

出了一个问题:修正了所有的错误还有问题,就是tab键的问题,现在程序是这样:

零基础学python之函数与模块(附详细的代码和安装发布文件过程)


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))

报的错误是这样:

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

说的都是一个内容,我想是不是TAB键的空格数不符合兼容性要求呢?

百度上说把tab换成四个空格,终于好了!

零基础学python之函数与模块(附详细的代码和安装发布文件过程)

这下变绿了(哈哈)也即是说,现在这个代码不存在PEP8问题了。

小结PEP8:

  函数注释的提示冒号之后需要一个空格;

  等号两端需要空格;

  逗号之后需要空格;

  tab不如四个空格规范,可能是编辑器的问题;

  最后需要一个空行;

  每个函数前面要加两个空行;

上期回顾:3结构化数据 https://www.cnblogs.com/sebastiane-root/p/9267783.html

至此,内容就结束了,下期预告:构建web应用