Python函数和代码复用(二)

今天继续学习一下Python函数和代码复用。

代码复用和函数递归

代码复用与模块化设计

代码复用:同一份代码在需要的时间可以被重复使用

分而治之:

  • 通过函数或对象封装,将程序划分为模块及模块间的表达
  • 具体包括:主程序、子程序和子程序之间的关系
  • 分而治之:一种分而治之、分层抽象、体系化的设计思想

紧耦合:两部分之间交流很多,无法独立存在
松耦合:两部分之间交流较少,可以独立存在

模块内部尽量紧耦合,模块之间尽量松耦合

函数递归

递归的实现:
计算n!:

1
2
3
4
5
def fact(n):
if n == 0:
return 1
else:
return n*fact(n-1)

递归实现字符串反转:

1
2
3
4
5
def rvs(s):
if s == ""
return s
else :
return rvs(s[1:])+s[0]

斐波那契数列:

1
2
3
4
5
def f(n):
if n == 1 or n == 2
return 1
else :
return f(n-1) + f(n-2)

汉诺塔:

1
2
3
4
5
6
7
8
9
10
def hanoi(n,src,dst,mid):  #src 原来的柱子 dst目的柱子 mid中间过度柱子
global count
if n == 1 :
print("{}:{}->{}".format(1,src,dst))
count +=1
else:
hanoi(n-1,src,mid,dst)
print("{}:{}->{}".format(n,src,dst))
count +=1
hanoi(n-1,mid,dst,src)

Pyinstall库的使用

概述:将.py源代码转换成无需源代码的可执行文件
简单总结PyInstaller使用方法:
生成单一的exe文件:
pyinstaller -F test.py

下面对pyinstall库的使用进行详细介绍:

指令 说明
-F, –onefile 产生一个文件用于部署 .
-D, –onedir 产生一个目录用于部署 (默认)
-K, –tk 在部署时包含 TCL/TK
-a, –ascii 不包含编码.在支持Unicode的python版本上默认包含所有的编码.
-d, –debug 产生debug版本的可执行文件
-w,–windowed,–noconsole 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)
-c,–nowindowed,–console 使用控制台子系统执行(默认)(只对Windows有效)
-s,–strip 可执行文件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll无法使用.
-X, –upx 如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)
-o DIR, –out=DIR 指定spec文件的生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下.
-p DIR, –path=DIR 设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径
–icon=<FILE.ICO> 将file.ico添加为可执行文件的资源(只对Windows系统有效)
–icon=<FILE.EXE,N> 将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效)
-v FILE, –version=FILE 将verfile作为可执行文件的版本资源(只对Windows系统有效)
-n NAME, –name=NAME 可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字

实例:pyinstaller -i curve.ico -F 文件名.py #将图标与程序链接

科赫小雪花绘图:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import turtle
def koch(size, n):
if n== 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle. left(angle)
koch(size/3, n-1)
def main():
turtle.setup(600, 600)
turtle.penup()
turtle.pencolor("pink")
turtle.speed(0)
turtle.goto( - 200, 100)
turtle.pendown()
turtle.pensize(2)
level = 4
koch(400 ,level)
turtle. right (120)
koch(400,level)
turtle. right(120)
koch(400,level)
turtle.hideturtle()
main()

Python函数和代码复用(二)
https://chujian521.github.io/blog/2018/08/15/Python函数和代码复用-二/
作者
Encounter
发布于
2018年8月15日
许可协议