今天学习了函数的相关内容,以及面向过程和面向对象,以下是相关笔记

'''
文件说明:函数
为什么要使用函数:
1、提高代码复用性--抽象出来,封装为函数
2、将复杂的大问题分解成一系列小问题,分而治之--模块化设计的思想
3、利于代码的维护和管理
函数的定义和调用
白箱子:输入-处理-输出
三要素:参数,函数体,返回值
1.定义
def 函数名 (参数):
函数体
return 返回值
2.调用
函数名 (参数)
参数的传递:
1,形参与实参
形参(形式参数):函数定义时的参数,实际上就是变量名
实参(实际参数):函数调用时的参数,实际上就是变量的值
2,位置参数
严格按照位置顺序,用实参对形参进行赋值(关联)
一般用在参数比较少的时候
def function(x,y,z)
print(x,y,z)
function(1,2,3)#x=1:y=2:2=3
实参与形参个数必须--对应,一个不能多,一个不能少
3,关键字参数
打破位置限制,直呼其名的进行值的传递(形参=实参)
必须遵守实参与形参数量上一一对应
多用在参数比较多的场合
def function(x,y, z):print(x,y,z)
function(y=1 z=2,x=3)
位置参数可以与关键字参数混合使用
但是,位置参数必须放在关键字参数前面
function(1, z=2, y=3)
不能为同一个形参重复传值
def function(x,y, z):print(x,y,z)
function(1, z=2, x=3) #这是错误的
4,默认参数
在定义阶段就给形参赋值--该形参的常用值
机器学习库中类的方法里非常常见
调用函数时,可以不对该形参传值
def register(name, age, sex="male")print(name,age,sex)
register("大杰仔”,18)
也可以按正常的形参进行传值
register("林志玲”,38,"female”
位置形参必须在默认形参的前面
默认参数应该设置为不可变类型(数字、字符串、元组)
def function(ls=[]):print(id(1s))ls.append(1)print(id(1s))print(1s)
function() #列表的地址不会发生变化,但内容会发生变化
让参数变成可选的
def name(first name, last_name,middle_name=None):
if middle_name :
return first_name+middle_name+last_name
else:
return first_name+last_name
print(name("捡","起"))
print(name("大","咋","尊"))
5.可变长参数 *args
不知道会传过来多少参数“args
该形参必须放在参数列表的最后
def foo(x,y,z,*args):print(x,y,z)print(args)
foo(1,2,3,4,5,6)#多余的参数,打包传递给args
实参打散
def foo(x,y,z,*args):print(x,y,z)print(args)
foo(1,2,3,[4,5,6])
foo(1,2,3,*[4,5,6]#打散的是列表、字符串、元组或集合
可变长参数**kwargS
def foo(x,y,2,**kwargs):
print(x,y,z)
print(kwargs)
foo(1,2,3, a-4, b=5,c=6)#多余的参数,以字典的形式打包传递给kmargs
字典实参打散
def foo(x,y,z,**kwargs):
print(x,y,z)
print(kwargs)
foo(1,2,3,**{"a”:4,“b”:5,“c”:6})
可变长参数的组合使用
def foo(*args,+*kwargs):
print (args)
print (kwargs)
foo(1,2,3, a-4,b=5, c=6)
函数体与变量作用域
函数体就是一段只在函数被调用时,才会执行的代码,代码构成与其他代码并无不同
局部变量--仅在函数体内定义和发挥作用
def multipy(x,y):
z = x*y
return 2
multipy(2, 9)
print(z)#函数执行完毕,局部变量z已经被释放掉了
全局变量--外部定义的都是全局变量
全局变量可以在函数体内直接被使用
n=3
1s =[0]
def multipyx, y):
# global z
z= n*x*y
ls. append(z)
return z
print (multipy(2, 9))
ls
通过global 在函数体内定义全局变量
def multipy(x, y):
global z
z= x*y
return z
print(multipy(2, 9))
print(z)
返回值
1.单个返回值
def foo(x):
return x**2
2.多个返回值--以元组的形式
def foo(x=1):
returnl,x,x**2,x**3#逗号分开,打包返回
print (foo(3))
a,b,c,d=foo(3) # 解包赋值
print(a)
print(b)
print(c)
print(d)
3.可以有多个return 语句,一旦其中一个执行,代表了函数运行的结束
def is_holiday(day):
if day in ["Sunday", "Saturday"]
return "Is holiday"
else:
return "Not holiday"
print("啦啦啦德玛西亚,啦啦啦啦”) #你丫根本没机会运行。
print(is_holiday("Sunday"))
print(is_holiday("Monday"))
4.没有return语句,返回值为None
几点建议
1、函数及其参数的命名参照变量的命名
字母小写及下划线组合
有实际意义
2、应包含简要阐述函数功能的注释,注释紧跟函数定义后面
def foo():
#这个函数的作用是为了给大家瞅一瞅,你瞅啥,瞅你咋地。
pass
3.函数定义前后各空两行
def f1():
pass
# 空出两行,以示清白
def f2():
pass
def f3(x=3): #默认参数赋值等号两侧不需加空格pass
pass
匿名函数
1.基本形式
lambda 变量: 函数体
2.常用用法
在参数列表中最适合使用匿名匿名函数,尤其是与key=搭配
排序sort()sorted()
Is=[(93,88),(79,100),(86,71),(85,85),(76,94)]
Is.sort()
IS
Is=[(93,88),(79,100),(86,71),(85,85),(76,94)]
Is.sort(key=lambda x:x[1])
IS
#总成绩升
Is=[(93,88),(79,100),(86,71),(85,85),(76,94)]
temp=sorted(Is,key=lambda x:x[1]+x[0])
temp
#总成绩降
Is=[(93,88),(79,100),(86,71),(85,85),(76,94)]
temp=sorted(Is,key=lambda x:x[1]+x[0],reverse=True)
temp
max()
1s=[(93,88),(79,100),(86,71),(85,85),(76,94)]
n=max(ls, key=lambda x:x[1])
n
min()
1s=[(93,88),(79,100),(86,71),(85,85),(76,94)]
n=min(ls, key=lambda x:x[1])
n
'''

5598



被折叠的 条评论
为什么被折叠?



