入门 N day
-
函数概念:
函数就是对实现某一特定功能代码的封装。
-
函数的分类(根据定义分类)
系统函数:python已经定义好的,可以直接使用的函数,例如:print、input、max、min…等等
自定义函数:由自己定义,自己使用,或者给别人使用的函数
-
定义函数
语法:
def 函数名 (形参列表):
函数说明文档
函数体
说明:
def 关键字,固定写法
函数名 自己命名,要求规范和变量名一样
要求:标识符不能是关键字
规范:字母小写,单词之间用_(下划线)隔开,见名知义(看到函数大概 知道函数的功能)
(): 固定写法(不能省略)
形参列表 以’变量名1,变量名2,变量名3,…'的形式存在,作用是价格函数外面的数 据传递到函数里面,如果实现函数的功能需要提供外部数据,那么这个函数 就需要形参
函数说明文档 函数的说明书,本质就是文档注释必须用三个双引号引起来“”“ ”“”
函数体 和def保持一个缩进的一条或者多条语句(至少一条)实现函数功能的代码段
注意:定义函数的时候不会执行函数体,在没用调用的情况下出错也不会报错
-
调用函数
语法:
函数名(实参列表)
说明:
函数名 需要使用的已经定义好的函数名
() 固定写法,不能省略
实参列表 以‘数据1,数据2,数据3,…’的形式存在,实参就是需要从函数外部传递 到函数内使用的具体的数据,默认情况下,被调用的函数有多少形参就需要 提供多少个实参
例1:定义一个函数求任意两个数字的和
def sum1(num1,num2): """ 求两个数字的和(函数功能说明区) :param num1: 提供第一个数字 (参数说明) :param num2: 提供第二个数字 (参数说明) :return: None (返回值说明) """ print(f'{num1}+{num2}={num1+num2}') sum1(1,2) # 1+2=3
例2:定义一个函数,求一个数的阶乘:
def factorial(num): """ 求一个数的阶乘 :param num: 指定的数字 :return: None """ nums=1 for i in range(1,num+1): nums*=1 print(f'{num}的阶乘是:{nums}') factorial(4) # 4的阶乘是:24
练习:写一个函数将两个字符串交叉合并
‘abc’、‘123’—>a1b2c3
‘abcde’、‘123’—>a1b2c3de
‘abc’、‘12345’—>a1b2c345def strs(str1,str2): new_str='' # 先交叉拼接相同长度的部分,遍历长度最小的字符串 for index in range(min(len(str1),len(str2))): new_str += str1[index]+str2[index] # 再确定尾部,利用切片拼接 if len(str1) > len(str2): new_str += str1[len(str2):] else: new_str += str2[len(str1):] print(new_str) strs('abcdef','123456456') # a1b2c3d4e5f6456 # 同一个函数可以调用多次 strs('abcdef','123') # a1b2c3def
-
函数的参数
位置参数:
以 ’ 实参1,实参2,实参3,…'的形式存在,让实参和形参一一对应
关键字参数:
以 ’ 形参1=实参1,形参2=实参2,…‘的形式存在,这个参数的位置可以随意更改
位置参数和关键字参数混用时,位置参数必须在关键字参数的前面
def func1(a,b,c): print(f'a:{a},b:{b},c:{c}') # 位置参数 func1(1,2,3) # a:1,b:2,c:3 func1(3,2,1) # a:3,b:2,c:1 # 关键字参数 func1(a=10,c=20,b=30) # a:10,b:30,c:20 # 位置参数和关键字参数混用 func1(10,c=20,b=1) # a:10,b:1,c:20
参数默认值
定义函数的时候可以直接给一个或者多个形参赋默认值
有默认值的参数在调用的时候可以不传参
def func2(a=1, b=2, c=3): print(f'a:{a},b:{b},c:{c}') func2() # a:1,b:2,c:3 func2(15, 16) # a:15,b:16,c:3 func2(b=100) # a:1,b:100,c:3 def func3(a, b, c=3): print(f'a:{a},b:{b},c:{c}') func3(10, 20) # a:10,b:20,c:3 func3(10, 20, 30) # a:10,b:20,c:30
有默认值的参数必须在没有默认值的参数后面,不然会报错
''' def func3(a, b=1, c): print(f'a:{a},b:{b},c:{c}') # SyntaxError: non-default argument follows default argument '''
-
不定长参数
定义函数的时候如果参数个数不确定,可以使用不定长参数
1.带*的不定长参数
在形参前加*,让这个形参变成不定长参数,可以同时接受多个实参(必须使用位置参数传参,不然会报错) 这个参数的本质是一个元组
2.带**的不定长参数
在形参前加**,让这个形参变成不定长参数,可以同时接受多个实参(必须使用关键字参数传参,不然会报错) 这个参数的本质是一个字典
定义一个函数,求多个数的平均值
def mean(*num): print(num) # ()元组 sum1 = 0 if len(num) != 0: for i in num: sum1 += i print(sum1/len(num)) else: print('0') mean(1,2,3,4) # 2.5 mean() # 0
一个*的情况
def func4(x,*y): print('x:', x, 'y:', y) func4(1) # x: 1 y: () def func5(*x,y): print('x:', x, 'y:', y) func5(1,2,3,4,5,y=100) # x: (1, 2, 3, 4, 5) y: 100
两个*的情况
def func6(*args,**kwargs): print(args,kwargs) func6(a=1,b=2) #() {'a': 1, 'b': 2} func6(1,2,name=1,name2=2) # (1, 2) {'name': 1, 'name2': 2} func6() # () {}