一,初始函数
1,什么是函数:函数就是 对代码块和功能的封装和定义.(就是对一种功能的封装)
函数的定义, 函数名, 函数体以及函数的调⽤
def 函数名(): # 在定义的时需要的参数,类似于占位符 函数体 #调用 函数名() # 在调用时需要传入的参数是实参 #这里的函数名的命名规则和使⽤和变量量基本一样.⾃⼰己回顾⼀下变量的命名规则. 函数体: 就是函数被执行之后要执行的代码
2,return的用法和作用:
2.1,函数中遇到return,此函数结束,不再继续执行
def yue(): print("会家") print("吃饭") print("约小姐姐") return print("约起看电影") # 这句话不会被执⾏ yue() # 这里的执行结果没有'约谁啊'
2.2, 给函数的调用者一个访问结果
def yue(): print("回家") print("早点回家") print("约小姐姐") return "等我" #直接给函数一个返回值 a = yue() print(a) # 等我 def fun(): print('没有') # return 5 print(fun()) # 没有 None 当没有return时,函数的值永远时None print(fun) #只要定义了一个函数都会生成一个地址,就像门牌号 <function fun at 0x00000158B8FD2E18>
2.3,函数的返回值可以有多个结果,且返回的结果是一个元组,我们可以通过解构的方式获取,如 return 4,5 ,可以通过 a,b = 函数名()
def yue(): print("回家") print("七夕了") print("约小姐姐") return "去游泳", "去吃火锅" girl = yue() # (去游泳 ,去吃火锅) print(type(girl)) # tuple
总结: 如果return什么都不写 或者 ⼲脆不写return .那么返回的就是None
如果return后⾯写了⼀个值. 则调⽤用者可以接收一个结果
如果return后⾯写了多个结果, 则调⽤用者可以接收一个tuple, 调用者可以直接解构成 多个变量量
二, 函数的参数:
1,参数, 函数在调⽤的时候指定具体的⼀个变量的值. 就是参数. 语法:
def 函数名(参数列列表): 函数 def my_len(l): # l 形式参数 形参 print(l) count = 0 for j in l: count += 1 return count a = 'fdsafdsafdsagfsadf' print(my_len(a)) # 实际参数 ,实参 print(my_len([1,2,3]))
2,1. : 1,形参: 写在函数声明的位置的变量叫形参. 形式上的一个完整. 表示这个函数需要xxx
2. 实参: 在函数调用的时候给函数传递的值. 叫实参, 实际执行的时候给函数传递的信息. 表⽰给函数 xxx
3. 传参: 给函数传递信息的时候将实际参数交给形式参数的过程被称为传参.
3.1: 按照实参的角度,可以把参数分为: 位置参数, 混合参数,关键字参数 分别如下:
#1,位置传参 (位置必须按照顺序一一对应) def func(a,b,c): print(a) print(b) print(c) # 位置参数必须给它传值否则会报错!!! func('fdsafdas',3,4) # 有点⼉儿麻烦, 我们在这里学⼀个三元运算符. def my_max(a, b): c = a if a > b else b # 当a>b成立返回a, 否则返回b return c my_max(5,21) #2,关键字参数 (可以没有顺序,但是必须是全部关键字加上一个值) def max_min(a,b): return a if a > b else b print(max_min(b = 300,a = 200)) 3.混合传参,就是包含关键字和位置参数的混合 (但是必须把关键字参数放在最后) def func1(a,b,c,d,e): print(a) print(b) print(c) print(d) print(e) func1(1,2,d=4,c=3,e=5) func1(1,4,d=2,c=3,e=5)
4,按照形式参数分类: 位置参数 , 默认参数
#位置参数 def func(a,b,c): print(a) print(b) print(c) func('fdsafdas',3,4) #默认参数 def stu_info(name,sex = "male"): """打印学生信息函数,由于班中大部分学生都是男生, 所以设置默认参数sex的默认值为'male' """ print(name,sex) stu_info('alex') # 默认是男的 stu_info('eva','female') 注意,默认参数这里有一个坑,默认参数是个可变类型时: ef defult_param(a,l = []): l.append(a) print(l) defult_param('alex') defult_param('egon') #结果['alex'] ['alex', 'egon']
5,动态参数: 按位置传值多余的参数都由args统一接收,保存成一个元组的形式
def trans_para(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) trans_para("jinxin",12,[1,2,3,4],[3,4,],(1,4,7),{"a":"123","c":456},country="china") 动态参数,也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你就用*args,**kwargs接收,args是元祖形式,接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中。 在函数里我们把args和kwargs分别进行调用就可以得到想要的值了