天天看點

python函數

函數的階段

定義階段

定義函數需要使用關鍵字def,函數在定義階段隻檢測函數體文法不執行函數體代碼。

調用階段

調用函數需要使用:函數名加括号。如果函數需要參數那麼則需要額外傳遞參數,而且在調用函數時才會執行函數體代碼。

函數的傳回值

傳回值

就是執行完某個方法該方法回報出來的結果

如何擷取傳回值

通過變量名和指派符号即可,變量名 = 函數()

傳回值的情況

情況一

def index():
    print('from index')
# 當函數體沒有return關鍵字的時候 預設傳回None
res = index()
print(res)  # None即空 表示沒有      

情況二

python函數

情況三

def index():
    print('from index')
    return 123
# return關鍵字後面寫什麼函數就傳回什麼
res = index()
print(res)  # 123      

情況四

python函數

函數的類型

無參函數

函數在定義階段沒有參數調用也不需要參數。

def index():
    print('from index')
index()      

有參函數

函數在定義階段括号内填寫了變量名即需要參數。

def index(x):
    print('from index', x)
index(1)      

python函數

空函數

沒有具體的函數體代碼。

"""一般用于前期的架構搭建"""
def run():
    pass  # pass用于補全文法結構,本身沒有任何含義
def fight():
    pass
def talk():
    pass      

函數的參數

形參

函數在定義階段括号内書寫的變量名稱之為函數的形式參數,簡稱為形參,相當于變量名。

實參

函數在調用階段括号内書寫的值稱之為函數的實際參數,簡稱為實參,相當于變量值。

使用

兩者在調用函數的時候臨時綁定,函數運作結束分開。

def index(name):  # 形參
    print(name)
index('jason')  # 實參  name = 'jason'      

位置參數

按照位置一一對應傳值,資料個數既不能多也不能少。

def index(x, y):
    print(x, y)
index()  # 不傳不可以
index(1)  # 傳少了也不行
index(1, 2)  # 個數正确可以
index(1, 2, 3, 4, 5, 6, 7)  # 傳多了也不行      

關鍵字參數

指定給某個形參傳值,可以打破位置限制。

def index(x, y):
    print(x, y)
index(y=111, x=222)
index(111, y=222)
# index(111, x=222)  # 報錯
# print(y=111,222)  # 報錯 位置參數一定要在關鍵字參數的前面      

python函數

預設參數

函數在定義階段就給形參指派。

def index(x, y):
    print(x, y)
def register(name, age, gender='male'):
    print(name, age, gender)
'''預設參數不給值的情況下就使用預設的 給了就使用給了的'''
register('jyb', 12)
register('yrsbyq', 22)
register('wplsq', 33)
register('sadgirl', 18, 'female')      
python函數

可變長參數

無論接收多少個位置參數都可以正常運作,無論接收多少個關鍵字參數都可以正常運作。

完成這個需求可以使用* 和** 完成。

def func(*a, **b):
    print(a, b)
func(1, 2, 3, a=1, b=2, c=3)
func(1, 2, 3, 4, 5, 6, 7)
func(a=1, b=2, c=3)      

* 和 ** 的使用

形參中的使用

*在形參中使用

會接收多餘的位置參數組織成元組的形式指派給*後面的變量名。

**在形參中使用

會接收多餘的關鍵字參數組織成字典的形式指派給**後面的變量名。

python函數

實參中的使用

*在實參中使用

會将清單/元組内的元素打散成一個個位置參數傳遞給函數。

**在實參中使用

會将字典内的元素打散成一個個關鍵字參數傳遞給函數。

python函數

在定義階段,使用 * 和 ** 時,預設的變量名是args和kwargs,這兩個單詞是約定俗成的使用,不用也行。

python函數

函數封裝

面條版代碼封裝步驟

1.先寫def和函數名

2.将代碼縮進

3.檢視内部需要的資料

4.在形參中定義出來

盡量做到一個函數就是一個具體的功能

def auth_username(username):
    # 校驗使用者名是否存在
    with open(r'info.txt', 'r', encoding='utf8') as f:
        for line in f:
            real_name = line.split('|')[0]
            if real_name == username:
                print('使用者名已存在')
                return True
    return False


def get_info():
# 擷取使用者名和密碼
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
  # 傳回兩個值
    return username, password


def write_data(username, password):
    # 将使用者名和密碼寫入檔案
    with open(r'info.txt', 'a', encoding='utf8') as f:
        f.write('%s|%s\n' % (username, password))
        print('%s注冊成功' % username)

# 注冊功能
def register():
   username, password = get_info()
    # 調用校驗使用者名是否存在的函數
    is_exist = auth_username(username)
    if is_exist:
        return
    write_data(username, password)

# 登入功能
def login():
    username, password = get_info()
    with open(r'info.txt', 'r', encoding='utf8') as f:
        for line in f:
            real_name, real_pwd = line.split('|')
            if real_name == username and password == real_pwd.strip('\n'):
                print('登入成功')
                return
    print('使用者名或密碼錯誤')

# 字典
func_dict = {'1': register,
             '2': login
             }
while True:
    print("""
    1 注冊
    2 登入
    """)
    choice = input('請輸入執行功能編号>>>:').strip()
    if choice in func_dict:
     # .get 從字典中根據key擷取對應的value值
        func_name = func_dict.get(choice)
        func_name()
    else:
        print('請輸入正确的編号')      

内置函數

python函數

雖然表格上的函數很多,但是其實不需要全部掌握的,隻需要掌握一小部分即可,其他的想用的時候再百度就行。

print(abs(-100)) # 絕對值 100
print(all([1, 2, 3, 4, 0]))  # and
print(any([1, 2, 3, 4, 0]))  # or

print(bin(100))  # 進制轉換 二進制
print(oct(100))  # 八進制
print(hex(100))  # 十六進制
      
python函數
name = 'jyb'
def index():
    pass
# 能否加括号調用
print(callable(name))  # False
print(callable(index))  # True

print(chr(65))  # 傳回ASCII對應字元  A      
l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
print(max(l))  # 取最大值 11
print(min(l))  # 取最小值 1
print(sum(l))  # 求和    56