函數python
1、函數的理解和定義git
1.函數是一段具備特定功能的、可重用的語句組express
2.函數是執行特定功能的代碼的封裝,將函數內部的代碼與主體代碼分離開編程
3.輸入(實參形參)、處理(語句)、輸出(return)ide
4.兩個做用:下降編程難度、實現代碼複用模塊化
5.函數是IPO(import process output)函數
2、def 與 returnspa
1.函數能夠有參數,也能夠沒有參數,當運行函數時,無論有沒有返回值,整個函數都會運行一遍,最後若是有返回值,return返回值。Return 0 也表示程序什麼都不返回orm
2.局部變量,就是用來佔位的,自己並非真正的變量,因此即便和全局變量重名,也沒有關係。blog
3.global保留字:在函數內部使用全局變量。很形象:讓global 後的變量,變成全球都是使用的,而不單單是在函數裏面使用的。
4.函數中沒有建立列表,卻操做了列表,這是列表默認是全局變量,不須要global。但若是建立了,該列表就是局部變量了,局部變量不return出來的話,就被釋放了,也就沒什麼用了。
5.#global 須寫在def後的第一行!
3、參數傳遞
1.便可以是,位置傳參,也能夠是關鍵字傳參
2.可選參數傳遞:有默認值的參數(default argument),在用戶看來,就是能夠輸入,也能夠不輸入直接使用默認值的參數,便可選參數。位置在
3.可變參數傳遞:*a 參數的數量不肯定。也就是說,a是組合數據類型(通常是tuple),是一個能夠容納多個變量的容器。
4.關鍵參數:傳參時,必須使用賦值語句,a = ?
5.python參數順序:正常參數(能夠有多個)>默認參數>可變參數>關鍵字參數
(1)全部正常參數,必須在默認參數前面
(2)若是有可變參數,那麼默認參數必定會被從新賦值,即便是可變參數,無參數傳遞進去,這時print(可變參數) 得 ( ) 即空元組
(3) 在可變參數後面,必定是關鍵字參數,須要使用賦值語句傳參。
(4)關鍵字參數也有,可選關鍵字參數(默認關鍵字參數),和可變關鍵字參數(**a)(一般是字典類型)
def io (a,c,b=1,*d,f,g=3,**h):
print(a,b,c,d,f,g,h)
s = io(2,10,12,f=1,g=2,h=34,i=57,j=23)
print(s)
>>>2 12 10 () 1 2 {'h': 34, 'i': 57, 'j': 23}
4、lambda保留字 函數
1.格式:函數名 = lambda 變量1,變量2, :expression
2.例如:f = lambda s,r :s//r
f(10,3) = 3
3.謹慎使用lambda保留字
(1)Lambda定義的函數,主要用做參數
(2)有一些固定的使用方式
(3)建議使用def
5、實例:七段數碼管繪製
1.If True :
Expression1
就是執行expression1 至於爲何不直接寫expression1,是由於還有
If False:
Expression2
即,在只有兩種選擇的時候,能夠分別使用true ,false做爲分支條件
2. 初版
import turtle as t
def drawline(draw):
t.pendown() if draw else t.penup()
t.fd(40)
t.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,3,4,5,6,7,8,9] else drawline(False)
drawline(True) if digit in [0,2,3,5,6,8] else drawline(False)
drawline(True) if digit in [0,1,2,6,8] else drawline(False)
t.left(90)
drawline(True) if digit in [0,1,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,2,3,4,7,8,9] else drawline(False)
t.left(180)
t.penup()
t.fd(20)
def drawdate(date):
for i in date:
drawdigit(eval(i))
def main():
t.setup(800,350,200,200)
t.penup()
t.fd(-300)
t.pensize(5)
drawdate('20191127')
t.hideturtle()
t.done()
main()
3.第二版
import turtle as t
import time
def drawgap():
t.penup()
t.fd(5)
def drawline(draw):
t.pendown() if draw else t.penup()
t.fd(40)
t.right(90)
def drawdigit(digit):
drawgap()
drawline(True) if digit in [2,3,4,5,6,8,9] else drawline(False)
drawgap()
drawline(True) if digit in [0,3,4,5,6,7,8,9] else drawline(False)
drawgap()
drawline(True) if digit in [0,2,3,5,6,8,9] else drawline(False)
drawgap()
drawline(True) if digit in [0,1,2,6,8] else drawline(False)
t.left(90)
drawgap()
drawline(True) if digit in [0,1,4,5,6,8,9] else drawline(False)
drawgap()
drawline(True) if digit in [0,2,3,5,6,7,8,9] else drawline(False)
drawgap()
drawline(True) if digit in [0,2,3,4,7,8,9] else drawline(False)
t.seth(0)
t.penup()
t.fd(20)
def drawdate(date):
for i in date:
if i == '-':
t.write('年',font=("Arial",18,"normal"))
t.pencolor('green')
t.fd(40)
elif i =='=':
t.write('月',font=("Arial",18,"normal"))
t.pencolor("blue")
t.fd(40)
elif i == '+':
t.write('日',font=("Arial",18,"normal"))
else:
drawdigit(eval(i))
def main():
t.penup()
t.fd(-300)
for i in range(10):
drawdigit(i)
t.seth(0)
t.penup()
t.fd(20)
def main2():
t.setup(800,350,200,200)
t.penup()
t.fd(-350)
t.pensize(5)
t.pencolor('red')
drawdate(time.strftime('%Y-%m=%d+',time.gmtime()))
t.hideturtle()
t.done()
main2()
6、Thoughts
1.函數:模塊化思惟,分而治之,「封裝」,「接口」
2.規則化思惟:不寫特定場景下的函數,使用參數控制,讓一個函數,能作一類事情,而不是一件事情
3.高內聚低耦合