1、创建函数
def 函数名([参数]):
//可选参数,有多个时,用逗号隔开即可
//注释,函数体
//有返回值的话,return 即可
2、调用函数
函数名([参数])
//执行函数
3、参数传递
-
函数参数的作用:传递数据给函数使用
-
形参:定义函数时的参数
实参:函数被调用时的参数
实参按值传递(不可变)或引用传递(可变)给形参 -
值传递:只改变形参的值,实参的值保持不变
引用传递:形参和实参的值一同改变/* def add(num): print("原值:",num) num +=num print("值传递") num=1 add(num) print("值传递后:",num) print("引用传递") num=[2,1] add(num) print("引用传递后:",num) */ /* 值传递 原值: 1 值传递后: 1 引用传递 原值: [2, 1] 引用传递后: [2, 1, 2, 1] */
-
位置参数
必备参数,必须按照正确的顺序传到函数中,调用时的数量和位置必须和定义时一样
-
关键字参数
使用形参的名字来确定输入的参数值。
def add(num2,num1) add(num1=1,num2=2)
-
为形参设置默认值
def add(num2=2,num1) 函数名._defaults_ /* 查看函数的默认值的当前值,其结果是一个元组 add._defaults_ ('2',) */ 为形参设置默认值,默认参数必须指向不可变对象
-
可变参数
-
可变参数也称为不定长参数,即传入函数中的实际参数可以是任意多个
-
主要有两种形式:*参数,**参数
-
*参数
表示接收任意多个实际参数并将其放到一个元组中
#定义函数 def num1(*num): for i in num: print(i) #调用函数 ber=[1,2] num1(*ber) //使用一个已存在的列表作为函数的可变参数,需要在列表的名称前加* num1(1,2,3) //将1,2,3这三个值当成一个元组,传入到函数中 /* 1 2 */ num1(ber) //[1,2]
-
**参数
表示接收任意多个类似关键字参数一样显式赋值的实际参数,并将其放到一个字典中
def num1(**num): for i in num: print(i) ber={'1':'2','3':'4'} num1(**ber) num1(我='6',是='8') /* 1 3 我 是 */
-
4、返回值
-
作用:将函数的处理结果返回给调用它的程序
-
实现
return [val] /* val是可选参数,用于指定要返回的值,可以返回一个值,也可以返回多个值 可将返回值赋给一个变量,返回一个值,变量可是任意参数,返回多个值,变量保存的是一个元组 */ /* def num1(): a=[3,4] b=2 return a,b a=num1() print(a[0],a[1]) //a[0]=[3, 4] a[1]=2 def test(): list1=[1,2,3] return list1 list2=test() print(list2) //[1,2,3] */
5、变量的作用域
-
指程序代码能够访问该变量的区域
-
局部变量
- 函数内部定义并使用的变量
- 函数内部的变量只在函数运行时才会创建,在函数运行结束后系统自动删除
-
全局变量
- 能够作用于函数内外的变量
- 函数外直接定义,函数内外都可以访问
- 函数内定义,使用关键字global即可
/* def num1(): a=1 print('函数体内a=:',a) a=2 print('全局变量原值:',a) //全局变量原值: 2 num1() //函数体内a=: 1 print('调用完函数后',a) //调用完函数后 2 允许全局变量和局部变量重名 */ /* def num1(): global a=1 print('函数体内a=:',a) a=2 print('全局变量原值:',a) //全局变量原值: 2 num1() //函数体内a=: 1 print('调用完函数后',a) //调用完函数后 1 */
6、匿名函数
-
指没有名字的函数,一次性函数,用lambda表达式创建
result=lambda[可选参数]:必选参数 /* result——用于调用lambda表达式 可选参数——用于指定要传递的参数列表 必选参数——用于指定一个实现具体功能的表达式 */ /* r=10 result=lambda r:r*r print('结果是',result) //结果是 <function <lambda> at 0x000001BE801DE320> print('结果是',result(r)) //结果是 100 */ /* list1=[('第一',3,4),('第二',1,2)] list1.sort(key=lambda x:(x[1],x[1]/x[2])) //按照指定规则 print(list1) //[('第二', 1, 2), ('第一', 3, 4)] */
emo~