1. 程式人生 > >ouch the True Programming of py : 函式,類

ouch the True Programming of py : 函式,類

靈活的使用函式與類是任何一門程式語言的核心。 程式設計的正規化:

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]

注意事項

  1. 在使用函式前必須定義函式,否則會引發NameError.
  2. 使用函式記得return,而且print不能等同於return。
  3. 注意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
  1. 在書寫函式時,推薦在程式碼塊中附加文件,這個文件按照之前描述的,一般會在三引號中間。
##要學會寫函式的標註
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