我的短期目标:python+CTF reverse 一起加油!
#1,函数介绍
1,功能性 函数目的
2,隐藏性 (封装) (避免写重复代码)
例:
1 #round为保留小数的函数 2 3 a = 3.1415 4 result = round(a,2) 5 printf(result) 6 7 #输出:3.14
#2,函数的使用
1,参数列表可以没有
2,函数中无return 代表返回None(空值)
例:
#1,实现两个数字的相加 #2,打印输入的参数 def add(x,y) result = x + y return result def print(code) printf(code) add(1,1) print('python') #自己调用自己 递归次数太多 报错 #如何修改python递归995次数限制 import sys sys.setrecursionlimit(1000000) #修改限制为100万次递归次数 #所以 函数的定义不要与python内置的关键字相同
1 def add(x,y) 2 result = x + y 3 return result 4 5 def print_code(code) 6 printf(code) 7 8 a = add(1,1) 9 b = print_code('python') 10 11 print(a,b) 12 13 #输出 14 python #调用到了print_code 所以会首先输出print(python) 15 2 16 None #无返回值 所以输出None
3,返回值(可多个)
例:
1 def damage(skill1,skill2): 2 demage 1 = skill1 * 3 3 demage 2 = skill2 * 2 + 10 4 return damage1,damage2 5 6 damages = damage(3,6) 7 8 print(type(damages)) #输出为tuple类型 说明在return时不用强制加() 9 10 #调用时 11 print(damages[0],damages[1]) 12 13 #不如序列解包 即用 两个变量接分别收 demage函数的返回值 14 15 dagame_skill1,damage_skill1 = damage(3,6)
4,序列解包(接收返回值)和链式赋值
1 #链式赋值 2 a = 1 3 b = 2 4 c = 3 5 a,b,c = 1,2,3 6 a=b=c=1 7 8 d = 1,2,3 9 print(type(d)) #<class ' tuple '> 10 11 a,b,c = d #序列解包 12 13 a,b = [1,2,3] #too many values to unpack(expected 2)
5,必须参数与关键字参数
①,必须参数 实参 形参
②,关键字函数(可以不用考虑传入参数的顺序)
例:
1 def add(x,y): 2 result = x + y 3 return result 4 5 c = add(y=3,x=2) 6 7 c = add(x = 2) #报错 定义多少形参就要传递多少实参
6,默认参数
①默认参数即使函数的某些参数赋有初值 (非默认参数必须放置到默认参数之前)
例:
1 def prinf_student_files(name,gender='男生',age=18,college='人民路') 2 print('我叫' + name) 3 print('我是' + gender) 4 print('我今年' + str(age)) 5 print('我在' + college +'上学') 6 7 print_student_files('大头') 8 #输出 9 10 我叫大头 11 我是男生 12 我今年18岁 13 我在人民路上学 14 15 #默认参数必须放到参数列表后面 即必须参数不能放置到默认参数后面 16 17 #如果要修改默认参数的值,全部用关键字参数传值的方式(XXX=XXX)修改,不能混用关键字参数传值与必须参数传值 18 19 def cs(a,c,b=2): 20 print(a,b,c) 21 cs(a=5,b=6,c=7) 22 #输出 5 6 7 23 24 def cs(a,c,b=2): 25 print(a,b,c) 26 cs(5,b=6,7) 27 #报错