三、组包和拆包
1.组包拆包基本应用
#组包 a = 1,2,3,4,5 print(a) print(type(a)) #拆包 a,b = 1,2 print(a,b) print("_________________________________________________") #注意拆包时,容器中的元素个数要和变量个数相同 a = 1,2,3,4,5 a1,a2,a3,a4,a5 = a print(a1,'--',a2,'--',a3,'--',a4,'--',a5)
2.拆包的字典问题
a = {'a':1,'b':2,'c':3,'d':4,'e':5} a1,a2,a3,a4,a5 = a print(a1,'--',a2,'--',a3,'--',a4,'--',a5)
四、python函数的一些特性
1.函数返回多个数据
求一个列表数据中的最大值和最小值
def get_max_min(): cl = [1,0,3,4,5,2,3,1,55,43] cl.sort() max = cl[len(cl) -1] min = cl[0] return max,min print(get_max_min()) ret = get_max_min() print(ret) print(type(ret))
2.函数的嵌套调用
def func_a(): print('func A start') func_b() print('func_a stop') def func_b(): print('func b start') func_c() print('func_b stop') def func_c(): print('func c start') print('func_c stop') func_a()
3.递归调用
避免死循环的问题
def factorial(n): if n == 1: return 1 return n * factorial(n-1) n = factorial(5) print(n) print("----------------------------------------") n = factorial(2) print(n) print("----------------------------------------") n = factorial(10) print(n)
4.变量作用域
#全局变量 num = 100 def func_a(): print(num) def func_b(): #局部变量 num = 11 print(num) func_a() func_b()
全局变量先进入堆空间,所以函数引用的并不一定为初始值
#全局变量 num = 100 def func_a(): print(num) def func_b(): #局部变量 num = 11 print(num) num = 12 def func_c(): print(num) func_a() func_b() func_c()
函数内部想要修改全局变量,需要加上global
全局变量
num = 100 def func_a(): print(num) def func_b(): #global global num num = 11 print(num) num = 12 def func_c(): print(num) func_a() func_b() func_c()
5.可变类型和不可变类型
因为list是可变类型,所以内部函数引用不用提前声明
#全局变量 num = 100 c_list = [] def func_a(): print(num) print(c_list) def func_b(): #global global num num = 11 c_list.append(100) print(num) num = 12 def func_c(): print(num) print(c_list) func_a() func_b() func_c()
6.函数参数问题
函数中有初始值的参数不能定义在无初始值参数之前
func_a(a,b=0,c): print(a,b,c) func_a(1,2)
传参是可以无序的
def show(n,s): print(n,s) show(1,'hello') show('hello',1)
传参要注意如果后面引用的类型需要是可迭代类型的就会报错
def show(n,s): for c in s: print(f'{n} --- {c}') show(1,"hello") #这里会报错,因为s要为可迭代的类型后面for in才可以使用 show("hello",1)
赋值时最好标参数名=值
def show(n,s): for c in s: print(f'{n} --- {c}') show(s="hello",n=1)
7.可变长参数
相当于一个是列表,一个是字典
def my_f(*args): print("_____________________") print(args) s = 0 for i in args: s += i print(s) my_f(1,2) my_f(1,23,4,2) my_f(23,432,211,2,3,4)
混合参数
必须要有位置定义
可变参数二次传递
#元组只是一个对象,虽然闭包了,但是还是会出问题 def show(a,*args,**kwargs): print(a) print(args) display(args) def display(a,b,c,d,e): print("dis: ",a,b,c,d,e) show(1,23,4,123,432,1)
我们需要把元组对象分解
#元组只是一个对象,虽然闭包了,但是还是会出问题 def show(a,*args,**kwargs): print(a) print(args) #我们需要解包 display(*args) def display(a,b,c,d,e): print("dis: ",a,b,c,d,e) show(1,23,4,123,432,1)
结语
点个👍吧,高强度搬运笔记,还有几万个字。。。。