1. 程式人生 > 遊戲攻略 >《原神攻略》煙緋詳細培養攻略

《原神攻略》煙緋詳細培養攻略

1.1 函式

函式是可以反覆執行的程式碼塊,具有函式名,引數,返回值。

1.2 定義函式

函式必須先定義後執行。

def 函式名(引數列表):
    函式體
    return 返回值

沒的返回資料時,返回None

def circle_area(radius: float) -> float:
    return 3.14 * radius * radius

radius = 15
area = circle_area(radius)
print("半徑是{}圓的面積是:{}.".format(radius, area))

1.3 函式的引數

傳遞引數有多種形式

1.3.1 使用關鍵字引數

在呼叫時寫上引數的名稱。

  • 呼叫時可以不按定義順序,指定名稱就可以。
  • 如果一個引數用關鍵字引數,後面的引數都需要用關鍵字引數
def rect_area(width: float, height: float) -> float:
    return width * height


print(rect_area(width=100,height=30))

1.3.2 引數預設值

在定義函式時為引數指定一個預設值,呼叫時不傳遞資料則按預設值計算。

def rect_area(width: float, height: float = 30.0) -> float:
    return width * height


print(rect_area(width=100, height=30))
# 結果同上,height按預設值30計算
print(rect_area(width=100))

1.3.3 可變引數

一個函式可以接收不確定數量的引數。

1.3.3.1 *可變引數

可以傳遞任意數量的引數(位置引數)

# *args會被包裝成一個元組
def calc_sum(*args) -> float:
    print(type(args))  # tuple
    _sum = 0
    for value in args:  # 遍歷元組獲取裡面的值
        _sum += value
    return _sum

print(calc_sum(1,2,3,4,5))

# 如果傳遞的是一個元組物件,必須解包: *元組物件
print(calc_sum(*(3,4,5)))

對於可變引數後面有普通引數的的呼叫:

def calc_sum(*args, multiple:int) -> float:
    print(type(args))
    _sum = 0
    for value in args:
        _sum += value
    return _sum * multiple

# 在呼叫時必須按關鍵字引數指定其名稱
print(calc_sum(1,2,3,4,5, multiple=10))
1.3.3.1 **可變引數

這些引數會被包裝成一個字典(關鍵字引數)

def put_student(**info) -> None:
    print(type(info))  # dict
    for key, value in info.items():
        print("{} -> {}".format(key, value))


put_student(name="張三", sex="男", age=10)

# 如果傳遞的是字典物件,必須解包: **字典物件
put_student(**{'name': '李四', 'sex': '男', 'age': 10})

1.3.4 強制位置引數

Python3.8 新增了一個函式形參語法 / 用來指明函式形參必須使用指定位置引數,不能使用關鍵字引數的形式。

在以下的例子中,形參 a 和 b 必須使用指定位置引數,c 或 d 可以是位置形參或關鍵字形參,而 e 和 f 要求為關鍵字形參:

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

以下使用方法是正確的:

f(10, 20, 30, d=40, e=50, f=60)

以下使用方法會發生錯誤:

f(10, b=20, c=30, d=40, e=50, f=60)   # b 不能使用關鍵字引數的形式
f(10, 20, 30, 40, 50, f=60)           # e 必須使用關鍵字引數的形式

1.4 函式返回值

返回值有三種形式:

  • 無返回值
  • 返回單一值: return 5
  • 返回多個值:return 5,6

1.4.1 無返回值

無返回值實際上返回一個None,表示沒有。

Python中的None 是什麼?

  • python中的None是一個特殊的常量

  • 它既不是0,也不是False,也不是空字串。它只是一個空值的物件,也就是一個空的物件

  • None可作為一個物件,該物件的型別為:NoneTye

  • None 表示的含義,更多的是一種不存在,是真正的空,而不是空列表([])的空,也不是空的字串

def test():
    return
    return None  # 這兩個返回意義一樣。

1.4.2 返回單一值

def test():
    return 3

1.4.3 返回多個值

多個值之間用逗號分隔,會被打包成元組。

import random

def random_value():
    a = random.randint(0, 100)
    b = random.randint(0, 100)
    return a, b

v = random_value()
print(v, type(v))  # 輸出兩個值的元組

1.5 遞迴函式

就是自己呼叫自己

  • 要有一個出口,防止死迴圈。(結束條件)
def r_sum(n: int) -> int:
    if n == 1:
        return 1  #出口
    else:
        return n + r_sum(n - 1)

print(r_sum(100))

1.6 匿名函式

就是一個沒有名稱的函式,所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函式。

匿名函式有許多引數,但只能有一個程式碼錶達式,然後將結果返回。

lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。

匿名函式一般與高階函式一同使用。

1.6.1 定義匿名函式

lambda:引數1,引數2,... : 一個表示式
f_add = lambda x, y: x + y  # 匿名函式賦值給一個變數,這個變數就是一個函式物件

print(type(f_add))  # <class 'function'>
print(f_add(3,4))

1.7 巢狀函式

預設定義的函式都是全域性的,在一個函式內定義函式稱為“巢狀函式”

def calc_fun(op):
    # 定義兩個巢狀函式
    def add(a, b):
        return a + b

    def sub(a, b):
        return a - b

    # 返回函式物件
    if op == '+':
        return add
    else:
        return sub

f1 = calc_fun('+')
f2 = calc_fun('-')

print(f1(3,3,))  # 6
print(f2(3,3,))  # 0

1.8 高階函式

1.8.1 filter()過濾函式

filter(function, iterable)

iterable是可迭代物件,函式執行時iterable會被遍歷,它的元素逐一傳入function函式,function函式返回布林值,如果為True留下。

返回filter可迭代物件

users = ['Tony', 'Tom', 'Den', 'Alex']
a = filter(lambda x: x.startswith('T'), users)
print(list(a))  # ['Tony', 'Tom']
print(users)  # ['Tony', 'Tom', 'Den', 'Alex']

1.8.2 map()對映函式

map(function,iterable)

iterable是可迭代物件,函式執行時iterable會被遍歷,它的元素逐一傳入function函式,function函式對傳遞的元素進行變換, 返回map可迭代物件。

users = ['Tony', 'Tom', 'Den', 'Alex']
a = map(lambda x: x.lower(), users)
print(list(a))  # ['tony', 'tom', 'den', 'alex']