python123.io作业_Python自动化开发学习3
函數
通過函數,可以定義一段代碼塊,之后通過函數名可以反復調用
定義一個函數:def alert():
"打印Hello World"
print("Hello World")
使用def來定義函數,第二行建議使用使用文檔字符串進行函數說明。
之后使用函數名就能夠反復調用函數。alert()
函數的返回值
函數的最后可以使用return定義返回值,沒用retrun或者return后面不帶表達式,返回值都是None。一上面的函數為例def alert():
"打印Hello World"
print("Hello World")
return # 這行有和沒有都一樣,之后可以去掉這行再試一下
a = alert() # 調用函數,并把返回值賦值給a
print(a) # 來看一下a是不是None
有返回值的情況,返回值應該可以是任意類型,并且可以返回多個值def test1():
print("This is test1")
return 0
def test2():
print("This is test2")
return 1,"Hello",["Sunday","Monday"],{"name":"Bob"}
a = test1()
b = test2()
print(a)
print(b)
返回多個值的情況,應該也是按一個值來處理的。這里看到最終結果是將所有的值放到一個元組里來作為返回值。
返回值的總結:return數量=0:返回None
return數量=1:返回object
return數量>1:返回tuple
函數的參數
定義一個帶參數的函數def alert(msg):
"打印msg,如果是字符串返回1,否則返回0"
print(msg)
return 1 if type(msg) is str else 0
a = alert(123) # 調用函數時,也必須帶上參數
print(a) # 返回是0,因為是數字不是字符串
b = alert("123")
print(b) # 返回是1,參數是字符串
形參:變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。函數調用結束返回主調用函數后則不能再使用該形參變量
實參:可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使參數獲得確定值def power(x,y):
"計算x的y次方并返回"
return(x**y)
a,b = 3,2
c = power(a,b)
print(c)
上面函數中的x和y就是形參。而后面調用函數時的a和b就是實參。
關鍵參數
上面調用函數時應用的參數必須一一對應,數量和位置都不能錯。也可以用關鍵參數來引用。def power(x,y):
"計算x的y次方并返回"
return(x**y)
a,b = 3,2
c = power(y=a,x=b)
print(c)
也可以這樣混用,但是關鍵參數必須在位置參數后面def power(x,y):
"計算x的y次方并返回"
return(x**y)
a,b = 3,2
c = power(a,y=b)
print(c)
參數a是位置參數,值傳給了x;剩下的y=b是關鍵參數,b的值也能傳給y。
默認參數
看一個默認參數的例子:def introduce(name,age,country="China"):
print("My name is %s"%name)
print("I am %d years old"%age)
print("I am from %s"%country)
introduce("Jack",23)
introduce("Jack",23,"Amarica")
如果定義函數的時候給參數預先賦了值,那么這個參數就有了默認參數。在調用的時候可以省略這個默認參數,如果省略就取默認值,如果有值就使用調用的值
其他運用場景:默認安裝路徑,連接服務的默認端口號
非固定參數
定義函數時,可以使用*args和**kwargs。這樣在調用函數的時候,多余的實參會傳入這2個形參里。def test1(x,*args): # *args會把多傳入的參數變成一個元組
print(x,args)
test1(1,2,3,4,5)
test1(1,*[2,3,4,5]) # 也可以用這種形式調用
def test2(x,*args,**kwargs): # **kwargs會把多傳入的關鍵參數變成一個字典
print(x,args,kwargs)
test2(1,2,3,a=4,b=5)
test2(1,*[2,3],**{'a':4,'b':5}) # 也可以用這種形式調用
這里*和**后面理論上可以使用任意的符合變量命名規則的名字,但是建議使用固定的名字*args和**kwargs。
局部變量和全局變量
在子程序中定義的變量稱為局部變量,在程序中定義的變量稱為全局變量。
全局變量作用域是整個程序,局部變量作用域是定義該變量的子程序。
當全局變量與局部變量同名時:在定義局部變量的子程序內,局部變量起作用;在其它地方全局變量起作用。name = "Alice" # 先定義2個全局變量
age = 23
def test1():
print(name,age) # 這里的2個變量還是全局變量
def test2():
name = "Jerry" # 這里定義了局部變量name,對全局變量并沒有影響
print(name,age) # 這里的name就是局部變量,age還是全局變量
test1()
test2()
print(name,age) # 這里的2個全局變量的值并沒有改變
所以在子程序中既可以使用全局變量也可以使用自己的局部變量。如果全局變量和局部變量同名的情況下,改變局部變量也不會影響到全局變量。
但是如果想在子程序用改變全局變量,可以通過global聲明。name = "Alice" # 先定義2個全局變量
age = 23
def test2():
global name # 聲明name是全局變量
name = "Jerry" # 這里改變了name的值,看看全局變量是否也變了
print(name,age)
print(name,age) # 先打印2個全局變量
test2() # 調用一次函數,其中修改了name
print(name,age) # 這里的全局變量也被修改了
方法能實現,但是盡量不用這么用,不要在子程序中改變全局變量,更不要去定義全局變量。
最后再看一下列表在子程序中的情況,列表、字典、集合這類數據類型沒有局部變量。name = ['Alice','Bob','Carl'] # 定義全局變量
def test():
print(name[1])
name[1] = "Jack" # 修改數組的一個元素
print(name) # 先打印一次數組
test() # 調用函數,函數中改變了數組中的一個元素
print(name) # 雖然函數中未使用global,但是數組中的元素還是被改變了
遞歸
在函數內部,可以調用其他函數。如果一個函數調用的是其自身,那么這個函數就是遞歸函數。
遞歸的特性:必須有一個明確的結束條件
每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少
遞歸效率不高,遞歸層次過多會導致棧溢出。(Python最多遞歸999層,到了會報錯)
遞歸的例子:def halve(n):
"每次減半并轉為×××,直到0為止"
print(n)
n = int(n/2)
if n > 0 :
halve(n)
halve(100)
高階函數
變量可以指向函數,函數的參數能接收變量。另外,一個函數也可以接收另一個函數作為參數,這種函數就稱之為高階函數。舉例說明:def fxy(x,y,f):
"返回x和y經過f函數處理之后的值"
return f(x,y)
a = fxy(3,6,min) # min是內置函數,求最小值
b = fxy(3,6,max) # max是內置函數,求最大值
c = fxy(3,6,pow) # pow是內置函數,求冪。3的6次方是729
print(a,b,c)
作業
工資管理系統
Alex 100000
Rain 80000
Egon 50000
Yuan 30000
-----以上是info.txt文件-----
實現效果:
從info.txt文件中讀取員工及其工資信息,最后將修改或增加的員工工資信息也寫入原info.txt文件。
效果演示:
1. 查詢員工工資
2. 修改員工工資
3. 增加新員工記錄
4. 退出
>>:1
請輸入要查詢的員工姓名(例如:Alex):Alex
Alex的工資是:100000。
1. 查詢員工工資
2. 修改員工工資
3. 增加新員工記錄
4. 退出
>>:2
請輸入要修改的員工姓名和工資,用空格分隔(例如:Alex 10):Alex 10
修改成功!
1. 查詢員工工資
2. 修改員工工資
3. 增加新員工記錄
4. 退出
>>:3
請輸入要增加的員工姓名和工資,共空格分割(例如:Eric 100000):Eric 100000
增加成功!
1. 查詢員工工資
2. 修改員工工資
3. 增加新員工記錄
4. 退出
>>:4
再見!
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的python123.io作业_Python自动化开发学习3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python小屋_Python小屋——P
- 下一篇: html登录界面设计代码_Python登