ouch the True Programming of py : 函式,類
阿新 • • 發佈:2018-12-13
靈活的使用函式與類是任何一門程式語言的核心。 程式設計的正規化:
Procedural Programming 程式程式設計 Object-Oriented Programming 面向物件的程式設計 Functional Programming 功能程式設計
函式
函式顧明思義,跟我們學的數學定義一樣,引數進去,結果出來。 去重
a=[1,2,3,2,5,8,1,3,10,12,15,5]
b=list(set(a))
print(b)
##[1, 2, 3, 5, 8, 10, 12, 15]
基本功能 函式是用來重用你的功能性程式碼的:如果一件事情你要做多次,那就用函式。
def dedupe(items): collect = set() for item in items: if item not in collect: collect.add(item) return collect a=[1,2,3,2,5,8,1,3,10,12,15,5] b=list(dedupe(a)) print(b) ##[1, 2, 3, 5, 8, 10, 12, 15]
預設引數應該是不可變的!如果在預設引數中使用了[], {}這種可變型別,很快你的結果就會變得混亂。
import numpy as np
def abs(x=0):
y=x if x >= 0 else -x
return y
print(abs(-10))
print(abs())
def addlist(x=[]):
x.append(np.random.randint(5))
print(x)
return None
addlist()
addlist()
addlist()
##
10
0
[1]
[1, 3]
[1, 3, 0]
注意事項
- 在使用函式前必須定義函式,否則會引發NameError.
- 使用函式記得return,而且print不能等同於return。
- 注意return的正確位置(同階級看待問題)
def is_right(n): for i in range(2,n): print(i) if n%i==0: return False return True def is_wrong(n): for i in range(2,n): print(i) if n%i==0: return False return True print(is_right(9)) print("-----"*10) print(is_wrong(9)) #### 2 3 False -------------------------------------------------- 2 True
- 在書寫函式時,推薦在程式碼塊中附加文件,這個文件按照之前描述的,一般會在三引號中間。
##要學會寫函式的標註
def abs(x=0):
"""
功能
引數型別
函式計算後的型別變化
返回值
"""
return None
變數空間
函式內可以看到函式外的變數,函式外層無法看到內層的變數
##變數空間,包括內部變數
x="zheshisha"
def func():
print(x)
func()
##
zheshisha
x="zheshisha"
def func():
global x##代表全域性變數
x="zheyoushisha"
print(x)
func()
print(x)
##
zheyoushisha
zheyoushisha
全域性變數globals、區域性變數local
=[123,1243]
del a
globals()["a"]=1
print(a)
##
1
凶殘的eval( )和exec( ) evaluate 是對錶達式求值 execute 是直接執行字串裡面的語句
a=3
b=eval('a+2')
print(b)
##5
a=3
e=[2]
exec("b"+str(e[0])+"=a**2")##構建一個b2的變數
print(b2)
##9
裝飾器是接受函式作為引數返回結果,函式的話是接受變數作為引數返回結果。
def decorated(func):
print("Decorated first")
return func
def main_func():
print("Main called")
dec=decorated(main_func)##運用裝飾器語法可以省略
dec()
##
Decorated first
Main called
如果你有一批變數想統一按一個規則處理,並且需要縮減程式碼,你需要函式。
如果你有一批函式想統一按一個規則處理,並且需要縮減程式碼,你需要裝飾器(Decorator) 裝飾器的語法以@開頭,接著是裝飾器函式的名字和可選的引數。緊跟著裝飾器宣告的是被修飾的函式和裝飾函式的可選引數。
def decorated(func):
print("Decorated first")
return func
@decorated ##Decorator語法
def main_func():
print("Main called")
main_func()
##
Decorated first
Main called
面向物件程式設計:Object-Oriented Programming
在函式的基礎上,幫助程式設計師組織程式碼,並在適當的場合複用程式碼。
class Employee(object): #括號裡指明該類從哪個類繼承而來,object是所有類最終會繼承的“基本”類
def __init__(self,name):
self.name=name
def set_age(self,age):
self.age=age
def set_major(self,major):
self.major=major
def set_card(self,card):
self.card=card
Francoise=Employee('Francoise') # 構造一個例項
Francoise.set_age('22')
Francoise.set_major('Physics')
Francoise.set_card('000142')
print(Francoise.age)
print(Francoise.major)
print(Francoise.name)
##
22
Physics
Francoise
類之間的關係可以用繼承實現
class Manager(Employee):
qualification="5-year Experience Expert"
Alexandre=Manager('Alexandre')
Alexandre.set_age('25')
Alexandre.set_major('Mathematics')
Alexandre.set_card('00004512')
print(Alexandre.major)
print(Alexandre.qualification)
##
Mathematics
5-year Experience Expert