文章目錄
1.函數定義和使用
1.1 函數理解與定義
(1)解釋:
- 函數是一段具有特定功能的,可重用的語句組
- 函數是一種功能的抽象,一般函數表達特定功能
- 兩個作用:降低編程難度和代碼複用
(2)表示
def <函數名> (<參數(0個或多個)>):
<函數體>
return <返回值>
(3)舉例:計算n!
def fact(n) :
s = 1
for i in range(1,n+1)
s*=i
return s
1.2 函數的使用及調用過程
調用過程:
1.3 函數的參數傳遞
解釋:函數可以有參數,也可以沒有,但一定要有括號
(1)可選參數傳遞
解釋:函數定義時可以爲某些參數指定默認值,構成可選參數
************必選參數必須在前面****************
def <函數名> (<必選參數>,<可選參數>):
<函數體>
return <返回值>
舉例:
(2)可變參數傳遞
解釋:函數定義時可以設計可變數量參數,即不確定參數總數量
def <函數名> (<參數>,*b):
<函數體>
return <返回值>
舉例:
(3)參數傳遞的兩種方式
1.4 函數的返回值
1.5 局部變量和全局變量
(1)規則1:局部變量和全局變量是不同變量
- 局部變量是函數內部佔位符,與全局變量可能重名但不同
- 函數運算結束後,局部變量被釋放
- 可以用
global
保留字在函數內部使用全局變量
舉例:
(2)規則2:局部變量爲組合數據類型且未創建,等同於全局變量
舉例1:
舉例2:
1.6 lambda函數
解釋:
lambda
函數是一種匿名函數,即沒有名字的函數- 使用
lambda
保留字定義,函數名是返回結果 lambda
函數用於定義簡單的,能夠在一行內表示的元素- 主要用作一些特定函數或方法的參數
用法:
<函數名> = lambda <參數>:<表達式>
舉例:
>>>f = lambda x,y :x+y
//解釋:定義了lambda函數。這個函數有xy兩個參數,執行的是x+y的運算
>>>f(10,15)
25
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()
運行效果:
3.代碼複用與函數遞歸
3.1 代碼複用與模塊化設計
(1)代碼複用
(2)模塊化設計
緊耦合
:兩個部分之間交流很多,無法獨立存在鬆耦合
:兩個部分之間交流很少,可以獨立存在
3.2 函數遞歸的理解
兩個基本要素:
鏈條
:計算過程中存在遞歸鏈條基例
:存在一個或多個不需要再次遞歸的基例
3.3 函數遞歸的調用過程
- 遞歸本身是一個函數,需要函數定義方式描述
- 函數內部,採用分支語句對輸入參數進行判斷
- 基例和鏈條,分別編寫對應代碼
3.4 函數遞歸的實例解析
3.4.1 字符串反轉
dev rvs(s):
if s == "":
return s
else:
return rvs(s[1:]) + s[0]
3.4.2 斐波那契數列
dev f(n):
if n == 1 or n == 2:
return 1
else:
return f(n-1) + f(n-2)
3.4.3 漢諾塔
count = 0
def hanoi(n,src,dst,mid):
gloibal 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)
4.PyInstaller庫的使用
4.1 安裝
- 打開dos命令行,輸入
pip install pyinstaller
,哪個文件夾下不要緊 - 如果報錯
Preparing wheel metadata ... error
,就先執行pip install wheel -i https://pypi.tuna.tsinghua.edu.cn/simple
- 安裝好了wheel,再執行
pip install Pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
4.2 使用
(1)cmd命令行下
pyinstaller -F 文件名.py
(2)放.py文件的文件夾下會多出三個文件夾
4.3 常用參數
舉例:
(3)打開dist文件夾下的.exe文件即可執行
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
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.right(120)
koch(400,level)
turtle.hideturtle()
main()
運行效果: