python自定義函數和內置函數


函數

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])

  

 


免責聲明!

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



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