python-函数

函数基础

函数可以实现一个特定的功能
print()在控制台输出
input()获取控制台输入的内容
type()获取变量的数据类型
len()获取容器哦长度
range()获取固定序列(0,n)

定义
函数:将多行代码(可以实现特定的功能)放在一块,并给它起个名字,在需要使用这多行代码的时候,可以直接通过名字调用

定义函数的好处:减少代码冗余(重复代码不用多次书写),提高编程效率

函数必须先定义再调用,函数定义就是给函数起名字的过程
定义语法:
def 函数名(参数): #def关键字,函数名要满足标识符的规则
实现功能的具体代码 #处在def缩进中的代码,都属于这个函数

函数的文档注释
函数的文档注释,本质就是注释,只不过作用和书写位置有特定的需求
作用:对函数的作用和使用方法进行说明,比如:有哪些参数,返回值是什么
书写位置:在def的下方,使用3对双引号来书写
查看:1.在函数名上,使用快捷键CTRL+q查看;
2.在函数名上,使用快捷键CTRL+B跳转到函数定义的地方查看
3.在函数名上,按住CTRL键,点击函数名跳转到函数定义的地方查看

函数参数
在函数定义的时候,在括号中写入的变量,这个变量就称为函数的参数,形式参数
在函数调用的时候,可以给定义时候的形参传递具体的数据值,提供使用,叫实际参数
即:在函数调用的时候,会将函数的实参传递给形参
好处:可以让函数更加的通用,函数中的数据值不是固定的

使用场景:判断函数中数据值是不是固定不变的,如果是变化的,就可以使用参数传递(注意:如果存在形参,必须传递相同个数的实参)

函数的嵌套调用
在一个函数中调用另一个函数
1.代码从上到下执行的
2.函数定义不会执行函数中的代码
3.函数调用会进入函数中执行函数中的代码
4.函数中的代码执行结束,会回到调用的地方继续向下执行
在这里插入图片描述

函数的返回值
返回值:函数的执行结果
print() ---->None
input()----->键盘输入的内容,类型字符串
type()----->变量的数据类型
len()----->容器长度
1.在一个函数中,想要返回一个数据(想要有返回值),需要使用return关键字
2.为什么返回值?在函数中可能通过各种代码,得到的数据结果,想要在函数外部使用,就需要使用返回值
3.如果函数有返回值,一般在调用的时候会使用变量来接收返回值,以便后续使用
4.return关键字作用:将一个数据值返回到调用的地址;函数遇到return会结束函数的执行
5.return关键字只能用在函数中
6.如果一个函数,没有写return,可以认为返回值是None
在这里插入图片描述

模块和包

模块
1.在python中,每个代码文件,都可以称为是一个模块
2.在模块中别人书写好的功能(变量、函数、类),我们都可以拿来直接使用
3.我们自己写的代码文件,想要作为模块让别人使用,你的代码文件名(模块名)需要满足标识符的规则
4.想要使用别人模块中写好的功能,需要先导入别人写好的功能
5.as关键字,可以给模块或者功能起别名

模块导入
方式一: import 模块名 #模块名就是代码文件名不带.py
使用其中的功能:模块名.功能名() #功能可以是变量、函数、类

方式二: from 模块名 import 功能名 #导入指定的功能
使用:功能名()#多用于导入自己书写的,或者是第三方模块,可以使用快捷键Alt回车
在这里插入图片描述

__name__的使用
1.导入模块的时候,会执行模块中的代码
2.如果在导入模块的时候,模块中的部分代码不想被执行,可以用用__name__来解决
3.__name__变量,是python解释器内置的变量(变量的值是自动维护的),每个代码文件中都有这个变量
4.在模块中直接右键运行代码文件,__name__变量的值是__main__哈
5.如果是被导入运行代码文件,__name__变量的值是模块名
在这里插入图片描述

模块的导入顺序
1.在导入模块的时候,会先从代码所在的目录进行导入
2.如果没有找到,会去python系统的目录查询导入
3.如果没有找到,报错
注意点:我们自己定义的代码文件名不要和导入的系统的模块文件名一样

包(package):将多个模块放在一个目录中集中管理,并在这个目录中创建一个__init__.py文件(可以为空),就是一个包

包的创建
在这里插入图片描述
包的导入
方式一:import 包名.模块名 #使用:包名.模块名.功能名()
方式二:from 包名 import 模块名 #使用:模块名.功能名()
方式三: from 包名.模块名 import 功能名 #使用:功能名()

变量的类型

引用
1.定义变量的时候,变量和数据都会在内存开辟空间
2.变量所对应的内存空间中存储的是数据所在内存的地址
3.变量中保存数据的地址,就称为是引用
4.python中所有数据的传递,传递的都是引用
5.赋值运算符(=),会改变变量的引用,只有=可以修改变量的引用
6.可以使用id(变量)函数,查看变量的引用
在这里插入图片描述

可变类型与不可变类型
根据内存中的数据是否允许修改,将数据分为可变类型与不可变类型
简单理解:不使用等号,能不能修改数据值
可变类型:可以修改
-列表(list) #例list.append()
-字典(dict) #例dict.pop()
-集合(set)
不可变类型:不允许修改
-数字类型(int,float,bool)
-字符串(str)
-元组(tuple)
特殊情况
在这里插入图片描述
局部变量
根据变量定义的位置将变量分为局部变量和全局变量;
在函数内部定义的变量称为是局部变量
特点:局部变量只能在当前函数内部使用;可以在不同函数内部定义名字相同的局部变量
生命周期(使用范围):在函数执行(调用)的时候被创建,函数执行结束被销毁
形参可以认为是局部变量
如果想要在函数外部使用局部变量的值,使用return返回

全局变量
在函数外部定义的变量
特点:全局变量,可以在任意函数内访问;想要在函数内部修改全局变量的引用,需要使用global关键字声明(使用global关键字可以声明为全局变量);如果在函数内部出现和全局变量名字相同的局部变量,在函数内部使用的是局部变量
生命周期:代码执行的时候创建,执行结束销毁
例:

#定义全局变量
a=10
def fun1():       # 全局变量a
    print('fun1a:',a)

def fun2():       #定义局部变量
    a=20
    print('fun2a:',a)

def fun3():       #声明为全局变量
    global a
    a=30
    print('fun3a:',a)

if __name__ == '__main__':
    print(a)      #执行结果:10
    fun1()        #执行结果:fun1a: 10
    fun2()        #执行结果:fun2a: 20
    fun1()        #执行结果:fun1a: 10
    print(a)      # 执行结果:10
    fun3()        # 执行结果:fun3a: 30
    print(a)      # 执行结果:30

函数高级

range()函数
range(start,end,step) #[start,end)步长是step,默认是1
例:

range(3)          #结果:0,1,2
range(1,3)       #结果:1,2
range(1,5,2)    #结果:1,3

sum()python中函数,可以对列表/元组中的数字求和(sum(list))

函数返回多个数据值
return关键字两个作用:1.返回数据值;2.结束函数的运行
函数中如果想要返回多个数据值,一般是组成元组进行返回(多个数据逗号隔开自动组包)
在这里插入图片描述

函数传参的方式
是指如何将实参的值传递给形参
位置传参:在函数调用的时候按照形参的顺序将实参的值传递给形参
关键字传参:在函数调用的时候,指定将实参传递给哪个形参
混合使用:1.位置参数必须写在关键字参数前面,关键字参数必须放在位置参数的后面;2.同一个形参只能接受一个实参值(不能即使用位置传参和关键字传参给同一个形参传参)
例:

def fun1(name,age):
    print(f'name:{name},age:{age}')

if __name__ == '__main__':
    fun1('晓晓',18)      #位置传参,执行结果:name:晓晓,age:18
    fun1(age=18,name='晓晓')        #关键字传参,执行结果:name:晓晓,age:18
    fun1('晓晓',age=18)        #混合传参执行结果:name:晓晓,age:18
    #fun1(18,name='晓晓')        #报错

缺省参数
定义:在定义函数定义的时候,给形参一个默认的数值,这个参数就是缺省参数(默认参数)
特点:在函数调用的时候,缺省参数可以不用传递实参值,如果不传实参值,使用默认值,如果传递实参值,使用实参值
例:

def fun2(name,age=18,sex='保密'):
    print(f'name:{name},age:{age},sex:{sex}')

if __name__ == '__main__':
    fun2('晓晓')        #使用默认参数,执行结果:name:晓晓,age:18,sex:保密
    fun2("晓晓",19,'女')     #使用实参,执行结果:name:晓晓,age:19,sex:女
    fun2("晓晓",sex='女')     #部分使用默认参数,执行结果:name:晓晓,age:18,sex:女

多值参数
在函数定义的时候,不确定在调用的时候,实参有多少个,此时可以使用多值参数
在普通的参数前边加上一个*,这个参数就变为多值参数
遇到*参数后,后面的所有参数必须使用关键字传参
这个参数可以接受任意多个位置传参的数据,类型元组
这个形参一般写作args
想要把列表(元组)中的数据作为位置参数进行传参,只需要在列表(元组)前面加上一个
,进行拆包即可
参数放置顺序:def 函数(普通,多值,缺省)
例:

def mysum(*args):
    sum=0
    for i in args:
        sum=sum+i
    return sum

if __name__ == '__main__':
    print(mysum())                      #执行结果:0
    print(mysum(1))                    #执行结果:1
    print(mysum(1, 2, 3, 4))        #执行结果:10
    print(mysum(*(1, 2, 3, 4)))    # 执行结果:10
    print(mysum(*[1, 2, 3, 4]))    # 执行结果:10

匿名函数
匿名函数:使用lambda关键字定义的表达式,称为匿名函数
语法:lambda 参数,参数:一行代码 #只能写一行代码,只能实现简单功能
#匿名函数一般不直接调用,作为函数的参数使用的
例:

"""定义匿名函数,可以对两个数字进行求和"""
func= lambda x,y:x+y  #将匿名函数地址保存到变量func中,所以func就指代函数

print(func(2,3))   #执行结果:5

匿名函数的应用
在排序中使用

user_list=[{'name':'张三','age':38,'title':'班主任'},
           {'name':'李氏','age':18,'title':'学生'},
           {'name':'袁哥','age':30,'title':'老师'}]

#user_list.sort()    #只能对数字,字符串排序,在这里使用报错

#根据字典age键排序,
#想要对列表中的字典排序,需要key形参来指定根据字典中的什么键进行排序
#key这个参数需要传递一个函数,使用匿名函数
user_list.sort(key=lambda x:x['age'])
print(user_list)    #执行结果:[{'name': '李氏', 'age': 18, 'title': '学生'}, {'name': '袁哥', 'age': 30, 'title': '老师'}, {'name': '张三', 'age': 38, 'title': '班主任'}]
#或者
def func(x):
    return x['age']
user_list.sort(key=func)
print(user_list)     #执行结果:[{'name': '李氏', 'age': 18, 'title': '学生'}, {'name': '袁哥', 'age': 30, 'title': '老师'}, {'name': '张三', 'age': 38, 'title': '班主任'}]

函数练习

学生信息管理系统
在这里插入图片描述

   """输出学生信息
    list:学生信息保存结果
    """
    print('______学生列表信息______')
    for i in range(len(list)):
        print(i+1,'    ',list[i][0],'    ',list[i][1])
    print('______________________')

def findinformatin(list):
    """查找学生信息
    list:学生信息保存结果
    """
    name=input("请输入要查询的学生姓名:")
    for i in range(len(list)):
         if list[i][0]==name:
             print(f'姓名:{list[i][0]},年龄:{list[i][1]}')
             break
    else:
         print(f"对不起,名字叫{name}的学生不存在")
if __name__ == '__main__':
    list=informationinput(3)
    informationoutput(list)
    print('学生总数',len(list))
    findinformatin(list)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值