1.預設參數: 預設參數
def 函數名(形參1, 形參2=預設值):
...
2.關鍵字參數
def sum(a, b, c):
print(a)
print(b)
print(c)
print(a + b + c)
3.可變參數: 不定長參數
def print_arguments0():
print()
def print_arguments1(a):
print(a)
def print_arguments2(a, b):
print(a)
print(b)
def print_arguments3(a, b, c):
print(a)
print(b)
print(c)
"""
可變參數:
在形參前面加了 一個 *,這個參數就叫可變參數(不定長參數).
表示0個或者任意多個形參.
特點:
1. 前面 有一個 *
2. 表示0個或者任意多個形參
好處:
1.可以擴充函數的功能,更加通用.
"""
def print_arguments(* args):
# print(* args) # 解包:10 20
# print(args) # (10, 20)
# print(type(args)) # <class 'tuple'>
for e in args:
print(e)
# 如果函數的形參是一個可變參數,當調用函數時,python解釋器會自動把傳遞的
# 實參打包成一個元組,然後把元組傳遞給可變參數.
# print_arguments()
# print_arguments(10)
print_arguments(10, 20)
# print_arguments(10, 20, 30)
4.參數的混合使用
def sum_nums_3(a, *args, b=22, c=33, **kwargs):
print(a)
print(b)
print(c)
print(args)
print(kwargs)
sum_nums_3(100, 200, 300, 400, 500, 600, 700, b=1, c=2, mm=800, nn=900)
5.在實參前加星
def func1(* a, ** b):
print(a) # ((10, 20), {'m': 30, 'n': 40})
print(b) # {}
def func2(* args, ** kwargs):
print(args) # (10, 20)
print(kwargs) # {'m': 30, 'n': 40}
# 調用func1函數
# func1(args, kwargs)
# args是一個元組, kwargs是一個字典
# * 元組: 對元組解包,解成 元素1 元素2
# ** 字典: 對字典解包,解成 m=30, n=40形式的
func1(* args, ** kwargs) # func1(10, 20, m=30, n=40)
# func2(10, 20, m=30, n=40)
func2(10, 20, m=30, n=40)
6.組包和解包
組包:
把0或者多個資料 放到一個 容器中.
元組名 = 資料1,資料2
解包:
把容器中的資料取出來.
7.利用自動解包-交換兩個變量的值
a,b = b,a
8.引用1-引用的概念和特點
引用: 位址.
引用: 使用.
特點:
如果兩個變量的引用相同,對應的資料一定相同.
如果兩個變量對應的資料相同,引用不一定相同.
9.引用2-數字類型和字元串類型資料的緩存區
小整數池:-5-256
短字元串池:長度短于20的字元串
大整數或者長字元串會在第一次進行緩存
10.引用3-變量引用的變化
改變變量的引用:
改變它對應的位址,賦一個新的值.
11.可變類型和不可變類型
不可變類型:
如果改變了該類型的資料的值,位址 也發生了變化, 這種類型的資料,是不可變類型的資料.
常見類型:
int, float,bool, str, tuple
可變類型:
如果改變了該類型的資料的值,位址 沒有 發生了變化, 這種類型的資料,是可變類型的資料.
常見類型:
list,dict,set
12.引用4-引用作為函數的實參時對可變類型,不可變類型變量的影響
"""
python中隻有引用傳遞沒有值傳遞.
也就是說在調用函數傳遞實參時,給形參傳遞的是實參的位址,而不是具體的資料值.
"""
# def sum(a, b):
# print(a + b)
#
#
# sum(10, 20)
def print_list(list2=[]):
list2.append(2)
print(list2)
print(id(list2))
# list1 = [10, 20]
# print(id(list1))
# print_list(list1)
list1 = [10, 20]
print(id(list1))
print_list()
print(list1)
"""
a += 1
a = a + 1
這兩種寫法對應 不可變類型的 資料,是沒有差別的.
"""
a = 10
print(id(10))
a += 1
print(a)
print(id(a))
str1 = "hello"
print(id(str1))
str1 += " python"
print(str1)
print(id(str1))
print("-----------------------")
list1 = [10, 20]
print(id(list1))
# 隻是把第二個清單中的元素放到第一個清單中,第一個清單的位址沒有變,沒有産生第三個清單
# list1 += [30, 40]
# print(list1)
# print(id(list1))
# 是把兩個清單中的元素都放到第三個清單中,産生了第三個清單,把第三個清單指派給了list1
list1 = list1 + [30, 40]
print(list1)
print(id(list1))