函数:在一个完整的项目中,某些功能会反复的使用,那么会将功能封装成函数,当我们要使用函数的时候直接调用函数就可以。
本质:函数就是对功能的封装
优点:1、简化代码结构,增加了代码的复用
格式:def 函数名(参数列表):
语句
return 表达式
def:函数代码块已def关键词开始
函数名:遵循标识符规则
():参数列表的开始
参数列表:(参数1,参数2,……,参数n):任何传入函数的参数和变量必须放在括号之间,用逗号隔开。
语句:函数封装的功能
return:一般用于结束函数,并返回信息给函数的调用者(return可以不写,不写默认return None)
格式:函数名(参数列表)
函数名:要使用的函数的名字
参数列表:函数的调用者给函数传递的函数
本质:实参给形参赋值的过程
形参(形式参数):定义函数时,小括号中的参数
匿名函数(本人第一次考试被它考懵了)
偏函数(特地搜了搜的说)
本质:函数就是对功能的封装
优点:1、简化代码结构,增加了代码的复用
2、如果想修改某些功能,或者调试某个bug,只需要修改对应的函数即可。
格式:def 函数名(参数列表):
语句
return 表达式
def:函数代码块已def关键词开始
函数名:遵循标识符规则
():参数列表的开始
参数列表:(参数1,参数2,……,参数n):任何传入函数的参数和变量必须放在括号之间,用逗号隔开。
语句:函数封装的功能
return:一般用于结束函数,并返回信息给函数的调用者(return可以不写,不写默认return None)
表达式:为要返回给函数的调用者的信息
格式:函数名(参数列表)
函数名:要使用的函数的名字
参数列表:函数的调用者给函数传递的函数
本质:实参给形参赋值的过程
形参(形式参数):定义函数时,小括号中的参数
参数必须按顺序传递,个数对应
案例:
编写函数,给函数两个数,返回这两个数的和
def mySum(num1,num2):
#将结果返回给了函数的调用者
sum = num1 + num2
#执行完return语句,该函数结束,return后面的语句不执行
return sum
#return num1 + num2
res = mySum(1,2)
print(res)
传递参数:
值传递:传递不可变类型:string,tuple,number类型是不可变的
案例:
def func1(num):
num = 10
temp = 20
func1(temp)#num = temp
print(temp)
引用传递:传递的可变类型list,dict,set
案例
def func2(list):
list[0] = 100
li = [1,2,3,4,5]
func2(li)
print(li)
默认参数
调用函数时,如果没有传递参数,则使用默认参数,一般默认参数放到最后
def myprint(str="sunck is a good man",age=18):
print(str,age)
myprint("kaige good")
不定长参数
def function(*args,**kwargs):#用*args和**kwargs表示要传入的参数
print(*args,**kwargs)
function("sunck","good")
匿名函数(本人第一次考试被它考懵了)
不适用def这样的语句定义函数,使用lambda来创建函数
特点:
1.lambda只是一个表达式,函数体比def简单
2.实现的逻辑比较简单,主体是一个表达式,而不是代码块,仅仅只能在lambda中封装简单的逻辑
3.lambda函数有自己的命名空间,且不能访问自由参数列表之外的或全局命名空间里的参数
4.虽然lambda是一个表达式且看起来只能写一行,与c与c++内联函数不同
案例:
将函数表达式转为lambda的形式
def func(name,arg):
arg = arg + 10
return arg
l = lambda arg,name : arg + 10
print(l(10,"sunck"))
偏函数(特地搜了搜的说)
可是实现进制的转换,可以将字符串转为整数
案例
print(int("1010",base=2))#当成二进制算,最后输出10进制的数字
def int2(str,base=2):
return int(str,base )
print(int2("1010")) #把一个参数定住,形成一个新的函数 int3 =functools.partial(int,base = 2)
终于有时间上传了(哈哈哈哈)