python函數—調用函數+定義函數


抽象

函數就是最基本的一種代碼抽象的方式。

調用函數

可以通過help(abs)查看abs函數的幫助信息

abs(x)  : return position number
# 常見報錯:abs() takes exactly one argument (2 given        )abs()有且僅有1個參數, 不能為兩個
# TypeError: bad operand type for abs(): 'str' str是錯誤的參數類型
max() : return the max of the argument
# max()可以接收任意多個參數,並返回最大的那個
int() ,float() ,bool(), str() ,float()
#常用函數還包括數據類型轉換函數,可以把其他數據類型轉換為對應類型

# 函數名其實就是指向一個函數對象的引用,完全可以把函數名賦給一個變量,相當於給這個函數起了一個“別名”:
a = max
print(a(1,2,3))

# hex()函數把一個整數轉換成十六進制表示的字符串
print(hex(123))
#0x7b

print(sum([1,2,3,4]))
#10 這里參數要一個列表集合

定義函數

Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然后,在縮進塊中編寫函數體,函數的返回值用return語句返回

def boolean_position_num(x):
    if x >= 0 :
        return True
    else :
        return False

print(boolean_position_num(int(input())))

函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,並將結果返回。因此,函數內部通過條件判斷和循環可以實現非常復雜的邏輯。
如果沒有return語句,函數執行完畢后也會返回結果,只是結果為None。return None可以簡寫為return

def boolean_position_num(x):
    if x >= 0 :
       print('position num')
    else :
        print('not position num')
# 默認return None

print(boolean_position_num(int(input())))
# 10  None

命令行格式

#調用別的文件里的函數
# main.py
from func import boolean_position_num
print(boolean_position_num(int(input())))

# func.py
def boolean_position_num(x):
    if x >= 0 :
       print('position num')
    else :
        print('not position num')

空函數

#定義一個什么事也不做的空函數,可以用pass語句
def non():
    pass
#pass可以用來作為占位符,比如現在還沒想好怎么寫函數的代碼,就可以先放一個pass,讓代碼能運行起來。不加pass就會報錯
if x >= 18:
     pass

參數檢查

TypeError: my_abs() takes 1 positional argument but 2 were given : 參數數量不對
自己寫的函數跟內置函數的區別為:自己寫的函數很多都不能支持其他的數據類型,內置函數可以
數據類型檢查可以用內置函數isinstance()實現:

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')        
    if x >= 0:
        return x
    else:
        return -x

返回多個值? 只是返回一個tuple值 Python函數返回的仍然是單一值。

用途:在游戲中經常需要從一個點移動到另一個點,給出坐標、位移和角度,就可以計算出新的坐標:

def return_nums(x , y):
    return int(x),int(y)
if __name__ == '__main__':
    print(return_nums(1,2))
# (1 , 2)

小結

定義函數時,需要確定函數名和參數個數;
如果有必要,可以先對參數的數據類型做檢查;
函數體內部可以用return隨時返回函數結果;
函數執行完畢也沒有return語句時,自動return None。
函數可以同時返回多個值,但其實就是一個tuple。

練習

ax^2+bx+c=0

from cmath import sqrt
def quadratic(a, b, c):
    a = float(a)
    b = float(b)
    c = float(c)
    temp = pow(b, 2) - 4 * a * c
    if temp<0 :
        print('該方程無解')
    x1 = (-b + (sqrt(temp))) / (2 * a)
    x2 = (-b - (sqrt(temp))) / (2 * a)
    if temp == 0:
        print('該方程只有一個解')
        return x1
    return x1, x2
if __name__ == '__main__':
    print('quadratic(2, 3, 1) =', quadratic(2, 3, 1))
    print('quadratic(1, 3, -4) =', quadratic(1, 3, -4))

    if quadratic(2, 3, 1) != (-0.5, -1.0):
        print('測試失敗')
    elif quadratic(1, 3, -4) != (1.0, -4.0):
        print('測試失敗')
    else:
        print('測試成功')
-------------------------------------------------------------------------------
import cmath
def quadratic(a,b,c):

     if not (isinstance(a,(int,float) ) and isinstance(b,(int,float)) and isinstance(c,(int,float)) ):

         raise TypeError('bad operation type')

     elif b**2-4*a*c < 0 :

         print('該方程沒有實數解')

     else :

         x1 = (-b + math.sqrt(b**2-4*a*c))/(2*a)

         x2 = (-b - math.sqrt(b**2-4*a*c))/(2*a)

         return x1, x2

print(quadratic(3,5,1))

print(quadratic(a,c,1))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM