1. 程式人生 > >Life is short,Use Python!-----Python五殺!-----Python函式和程式碼複用

Life is short,Use Python!-----Python五殺!-----Python函式和程式碼複用

轉,轉,轉圈圈。。。 :-)

- 函式定義

def <函式名>(引數:<非可選引數>,<可選引數>,<*不定量引數>)     #位置傳遞,名稱傳遞
	 <函式體>
 	 return <返回值>   #可有可無,多個返回為 元組 型別

- 區域性變數&全域性變數

基本資料型別,無論重名與否,區域性和全域性不同
可通過global在函式內部宣告全域性變數
組合資料型別,如果區域性變數未真實建立,則為全域性變數

- lambda函式(匿名函式)

lambda 用於定義簡單的,在一行內表示的函式 <函式名> = lambda <引數> : <表示式>

>>>f = lambda x , y : x + y
>>>f(10,15)
25

>>>f = lambda : "lambda函式"
>>>print(f())
lambda函式

七段數碼管的繪製

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

數碼日曆

- 函式遞迴和程式碼複用

程式碼複用
程式碼資源化
程式程式碼是一種用來表達計算的“資源”
程式碼抽象化
使用函式等方法對程式碼賦予更高級別的定義
程式碼複用
同一份程式碼可以在需要時重複利用
抽象方式
函式
在程式碼層面建立初步抽象
物件
屬性和方法,在函式基礎上再次抽象
模組化設計和分而治之
模組內部緊耦合
模組外部鬆耦合

函式遞迴:基例鏈條 (通過函式+分支實現)

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

# 等效於s[ : :-1],將字串倒置

- PyInstaller庫

-h
檢視幫助
-clean
清理打包過程中的臨時檔案
-D,-onedir
預設值,生成dist資料夾
-F,-onefile
在dist資料夾中只生成獨立的打包檔案
-i<圖示檔名.ico>
指定打包程式使用的圖示檔案(icon)

科赫雪花曲線

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

3階科赫雪花曲線