Python语言程序设计整理

第五周:函数和代码复用

1.函数的定义与使用

1.函数的理解与定义

函数是一段具有特定功能的、可重用的语句组,它是一种功能的抽象,一般函数表达特定功能。它有两个作用:降低编程难度代码复用

定义方式:

def (parameters)

return

2.函数的使用及调用过程

不整理

3.函数的参数传递

函数定义时可为某些参数指定默认值,构成可选参数,可选参数必须在非可选参数之后

对于参数不确定的情况下,函数定义时可以设计可变数量参数,即不确定参数总数量。格式如下,其中*b(其他名字也行)代表后面所有不确定的参数:

def (,*b):

return

参数传递有两种方式:按照位置传递按照名称传递

4.函数的返回值

不整理

5.局部变量与全局变量

规则1:局部变量和全局变量是不同的变量。局部变量是函数内部的占位符,与全局变量可能重名但不同。若使用全局变量,则使用前面加上global。

规则2:局部变量为组合数据类型且未创建,等同于全局变量。例如:

ls = ["F","f"]#通过使用[]真是创建了一个全局变量列表ls

def func(a):

ls.append(a)#此处ls是列表类型,未真实创建,等同于全局变量

return

func("C")

print(ls)

6.lambda函数

lambda函数返回函数名作为结果,它是一种匿名函数。使用方式:

=lambda

:

例如:

f = lambda x,y:x+y

谨慎使用lambda函数,它主要用作一些特定函数或方法的参数,它有一些固定使用方式。

2.实例7:七段数码管绘制

代码1:

import turtle

def drawLine(draw): #绘制单段数码管

turtle.pendown() if draw else turtle.penup()

turtle.fd(40)

turtle.right(90)

def drawDigit(digit): #根据数字绘制七段数码管

drawLine(True)if digit in [2,3,4,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,6,8] else drawLine(False)

turtle.left(90)

drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)

drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)

drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)

turtle.left(180)

turtle.penup()

turtle.fd(20)

def drawDate(date): #获得要输出的数字

for i in date:

drawDigit(eval(i)) #通过eval()函数将数字变为整数

def main():

turtle.setup(800, 350, 200, 200)

turtle.penup()

turtle.fd(-300)

turtle.pensize(5)

drawDate('20180411')

turtle.hideturtle()

turtle.done()

main()

结果:

图1

代码2:

import turtle, time

def drawGap(): #绘制数码管间隔

turtle.penup()

turtle.fd(5)

def drawLine(draw): #绘制单段数码管

drawGap()

turtle.pendown() if draw else turtle.penup()

turtle.fd(40)

drawGap()

turtle.right(90)

def drawDigit(d): #根据数字绘制七段数码管

drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)

drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)

drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)

drawLine(True) if d in [0,2,6,8] else drawLine(False)

turtle.left(90)

drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)

drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)

drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)

turtle.left(180)

turtle.penup()

turtle.fd(20)

def drawDate(date):

turtle.pencolor("red")

for i in date:

if i == '-':

turtle.write('年',font=("Arial", 18,"normal"))

turtle.pencolor("green")

turtle.fd(40)

elif i == '=':

turtle.write('月',font=("Arial", 18,"normal"))

turtle.pencolor("blue")

turtle.fd(40)

elif i == '+':

turtle.write('日',font=("Arial", 18,"normal"))

else:

drawDigit(eval(i))

def main():

turtle.setup(800, 350, 200, 200)

turtle.penup()

turtle.fd(-350)

turtle.pensize(5)

# drawDate('2018-10=10+')

drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))

turtle.hideturtle()

turtle.done()

main()

结果:

图2

3.代码复用与函数递归

1.代码复用与模块化设计

紧耦合:两个部分之间交流很多,无法独立存在。

松耦合:两个部分之间交流很少,可以独立存在。

2.函数递归的理解

函数中调用函数自身的方式被称为递归。递归中两个重要的特征是链条基例

链条是指递归链条。

基例存在一个或多个不需要再次递归的实例。

3.函数递归的调用过程

假设我们求一个5的阶乘,其调用过程如图3所示。

图3

4.函数递归实例解析

例1:字符串反转:将字符串反转后输出。

代码:原来可以使用s[::-1]实现反转。

使用递归代码如下:

def rvs(s):

if s =="":

return s

else:

return rvs(s[1:])+s[0]

s = "I LOVE YOU"

rm = rvs(s)

print(rm)

输出结果:

UOY EVOL I

例2:斐波那契数列

代码:

def fib(n):

if n==1 or n==2:

return 1

else:

return fib(n-1) +fib(n-2)

h=fib(7)

print("{}".format(h))

输出结果:

13

(06:23)

4.模块4:PyInstaller库的使用

在所需要打包的程序的目录下,运行cmd命令行,输入命令:

pyinstaller -F

记住,一定是使用命令行!!!!!

表NPyInstaller库常用参数

5.科赫雪花小包裹

代码:

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.goto(-200, 100)

turtle.pendown()

turtle.pensize(2)

level = 3 # 3阶科赫雪花,阶数

koch(400,level)

turtle.right(120)

koch(400,level)

turtle.right(120)

koch(400,level)

turtle.hideturtle()

main()

结果:

图4

打包过程:命令行调整到当前文件夹,然后输入:pyinstaller -Fhomework.py

打包完成,命令行效果如图5所示。

图5

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180601G0KXFK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券