函數
1.定義
- 函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。
- 先定義,后使用
1.2分類
- 系統函數
- 自定義函數
1.3語法:
def functionname(parameters):
"函數_文檔字符串"
function_suite
return [expression]
1.4函數的返回值
- 函數執行完畢之后的返回的結果
- 如果沒有給出返回值,默認返回None
- 返回多個值時,返回類型為元組
2.參數問題
2.2分類
位置參數
- 默認情況下,函數調用時參數的個數,位置參數與函數定義時一致
def fun1(a, b): print(a, b) fun1(1, 2)
關鍵字參數
- 可以將實參的值通過關鍵字來指定給具體給哪個形參
- 如:
def fun1(a, b):
print(a, b)
fun1(b=1, a=2)
默認參數
- 在定義時,形參如果給出了默認值,這時候,就是默認參數。 所有的默認參數必修放在最后
默認參數在調用時,如果沒有實參對他進行賦值,他的值為默認值,否則為指定值
def fun1(a, b=2, c=3): print(a, b, c) fun1(1) fun1(1, 3, 4)
可變參數(可以實現函數定義,以及函數調用時,參數個數不匹配的情況)
-
*args :可以給任意個參數
def fun1(*args):
print("type(args):", type(args))
print("args:", args)
print("*args:", *args)
print("-" * 30)
fun1()
fun1(1)
fun1(1, 2)
fun1([1, 2, 3])

**kwargs :只能給鍵值對的參數(a=1, b=2)
def fun1(**kwargs):
print("type(kwargs):", type(kwargs))
print("kwargs:", kwargs)
print("-" * 30)
fun1()
fun1(a=1, b=2, c=3)

*args 與 **kwargs 一起使用
def fun1(*args, **kwargs):
print("type(args):", type(args))
print("args:", args)
print("*" * 10)
print("type(kwargs):", type(kwargs))
print("kwargs:", kwargs)
print("-" * 30)
fun1()
fun1(1)
fun1(1, 2, 3, a=4, b=5)

2序列解包
使用 *:
- 完成str、list、tuple的解包
- 對於字典,只解包key
- 返回類型:tuple
a = [1, 2, 3] b = *a, print(type(b)) print(b)

a = [1, 2, 3]
b = (1, 2, 3)
c = "hello"
d = {'a': 1, 'b': 2}
print("a:", *a, "\nb:", *b, "\nc:", *c)
print("d:", *d)

使用 **:
- 完成dict的解包
- 解包為: key1=value1 key2=value2
- 不能直接打印
def fun1(**kwargs):
print(kwargs)
d = {'a': 1, 'b': 2}
fun1(a=1, b=2)
fun1(**d)

3. 內置函數
3.1查看內置函數
-
import builtins print(dir(builtins))
3.2 常用內置函數
abs(x):求絕對值
- x : 數值表達式,可以是整數,浮點數,復數。
max(x):求最大值
- x :Iterable(list,tuple,str,dict,set)
- 關鍵字key,默認以每個元素中的0號索引值查找最大元素
list1 = [(1001, "James", 40), (1000, "Jack", 20), (1002, "Lucy", 28)] m = max(list1) print(m)

- 指定關鍵字key,自定義選擇每個元素中的索引值,查找最大元素
list1 = [(1001, "James", 40), (1000, "Jack", 20), (1002, "Lucy", 28)] m = max(list1, key=lambda item:item[2]) print(m)

map() :
- 有兩個參數,第一個參數是一個函數,第二個參數是可迭代的內容。函數會依次作用在可迭代內容的每一個元素上進行計算,然后返回一個新的可迭代內容
如:
def fun1(n):
return n ** 2
list1 = [1, 2, 3, 4]
list2 = map(fun1, list1)
print(type(list2)
print([item for item in list2])

def fun1(a, b):
return a + b
list1 = [1,2,3,4]
list2 = [2,3,4]
list3 = map(fun1, list1, list2)
# list3 = map(lambda a,b:a+b, list1, list2)
print([item for item in list3])

filter():
- 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新“列表”(迭代器)
def func2(x): return x % 2 == 0 list1 = filter(func2, [1, 2, 3, 4, 5]) print(type(list1)) print([item for item in list1])

zip():
- zip 函數接受任意多個可迭代對象作為參數,將對象中對應的元素打包成一個tuple,然后返回一個可迭代的zip對象。這個可迭代對象可以使用循環的方式列出其元素。若多個可迭代對象的長度不一致,則所返回的列表長度與參數中長度最短的可迭代對象相同
list1 = [1,2,3]
tuple1 = ('a', 'b', 'c', 'd')
str1 = "Hello"
v = zip(list1, tuple1, str1)
print(type(v))
print([item for item in v])

