Python学习----函数

函数

函数:组织好的,可重复使用的,用来实现特定功能的代码段
函数定义格式:(注意冒号和空格标识代码块)
参数不需要可以省略,返回值不需要可以省略。
先定义,后调用。要是调用写在定义之前,编辑器会报错

def 函数名(参数):
函数体
return 返回值

基础定义:
在这里插入图片描述
函数的形参和实参,与java含义一样

因为Python是弱类型语言,有返回值直接return就行,外部调用直接接收返回值即可。不需要想java那样定义返回值类型,接收类型还必须和返回值一样。
在这里插入图片描述
如果函数中没有return语句,那么函数有返回值吗
结果是有的
Python中有一个特殊的字面量,None,起类型是 <class ‘NoneType’>
无返回值的函数,实际上就是返回了:None这个字面量。
你也可以主动返回 None。 return None
在这里插入图片描述
用途:用在if判断上 , None等同于false。申明无内容变量 name = None (Python中变量在定义时必须赋初值,但是你现在没有初值时,就可以使用None代替)

函数的说明文档

作用:就是解释说明函数的含义,辅助理解函数的作用。就像java的注释,但是在Python中有一个单独的函数说明文档这个东西
输入单个双引号,然后回车,编辑器自动补全
PyCharm编辑器中,鼠标悬停函数调用,会有函数说明
在这里插入图片描述
函数的嵌套调用: 函数A 调用 函数B

变量的作用域

和java含义一样
局部变量:定义在函数体内部的变量,只在函数体内部生效。在外面无法进行调用(注意:需要和for循环进行区别,在for循环外部可以读取for循环内部的变量,这儿是说的函数体内部)
全局变量: 定义在函数体外面,可以在函数体内部使用,这个变量的作用域在定义之后的代码中都可以使用。

global 关键字

情景:
在这里插入图片描述
在test_2函数中 的num 相当于又定义了一个 局部变量,在 24行代码执行时,它会优先使用局部变量,当局部变量不存在时,再去寻找全局变量,所以在test_2函数中修改全局变量不成功。
那么我想在test_2方法中想修改 num的值,那么在全局变量num定义时 使用global关键
在test_2方法中使用global关键字进行说明,你这个变量是全局变量
在这里插入图片描述

函数的多返回值

按照返回值的顺序,写对应顺序的多个变量接收即可
语法:
def 函数名():
函数体
return 返回值1,返回值2

x , y = 函数名()
x = 返回值1 , y = 返回值2
变量直接使用逗号隔开,支持不同类型的数据return

在这里插入图片描述

函数参数

函数中有4种常见参数使用方式
位置参数
关键字参数
缺省参数
不定长参数

位置参数:
调用参数的时候根据函数定义的参数位置来传递参数
传递的参数和定义参数的顺序及个数必须一致

def user_info(name, age, gender):
	print(f"你的名字{name},年龄是{age},性别是{gender}")

user_info('Tom',20,'')

关键字参数:
函数调用时通过 “键=值” 形式传递参数
作用:可以让函数更加清晰,容易使用,同时也清除可参数顺序的要求

def user_info(name, age, gender):
	print(f"你的名字{name},年龄是{age},性别是{gender}")

# 关键字传参数
user_info(name = '小明' , gender = '男' , age = 18)

# 可以和位置参数混用,但是位置参数必须在前,且匹配参数的顺序
user_info('小红' , gender = '女' , age = 19)

缺省参数(默认参数)

# 默认值设置的时候必须放在最后面
def user_info(name, age, gender = '男'):
	print(f"你的名字{name},年龄是{age},性别是{gender}")

# 调用的时候不传参数就使用默认值,传了就使用传递的参数

不定长参数(可变参数)
不定长参数:也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参数也可以)的场景
不定长参数的类型: 位置传递,关键字传递

位置传递不定长
传递的所有参数都会被args变量收集,它会根据传进参数的位置,将其合并为一个元组(tuple),args是元组类型,这就是位置不定长传递
在这里插入图片描述

关键字传递不定长
参数是 : 键 = 值 形式,所有键值对都会被参数接收,同时会根据键值对组成字典
在这里插入图片描述

函数作为参数传递

这是一种计算逻辑的传递,而非数据的传递。
这个和java的接口有点像,我调用接口方法,但是具体的实现是实现类完成的。
就像如下代码,将函数作为参数传递,我在使用的时候不知道具体逻辑怎么实现,只管使用就行了。
问:为什么不使用函数的调用?这样逻辑更改test_func也需要更改代码,这样我只需要更改调用的传参就行。
在这里插入图片描述

Lambda 匿名函数

有名称函数可以重复使用,匿名函数只能使用一次
def 关键字,可以定义 命名函数, lambda 关键字可以定义 匿名函数
匿名函数语法:
lambda 传入参数:函数体(一行代码)
lambda是关键字,表示匿名函数定义
传入参数表示匿名函数的形式参数, 如 : x,y表示接受2个形式参数
函数体,就是函数的执行逻辑,要注意,只能写一行代码,无法写多行代码
lambda不用谢return,默认是将结果return回去
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值