函数及匿名函数

函数

1. 函数

1.1 自定义函数

def 关键字 表示定义一个函数。

1
2
3
4
# 定义函数
def 函数名(参数1,参数2,...,参数 n):
函数体
return 函数体中的返回值

  • 当需要调用定义的函数时,使用 函数名() 来调用。(先定义,后调用)
  • return [表达式] 结束函数,选择性地返回一个值给调用方。
    • 不带表达式的 return 相当于返回 None。
1
2
3
4
5
6
def sum(num1,num2):
"两数之和"
return num1+num2

# 调用函数
print(sum(5,6)) # 11

1.2 函数的返回值

  1. 函数的返回值 return 语句不是必须的,但是如果没有 return,函数的返回值是 None
  2. 函数中可以出现多个 return ,但必须位于不同的分支,否则后面的 return 无效
  3. return 后面的表达式,可以返回任意类型的对象,包括:字符串、数字、列表、元组、字典等。
  4. 函数返回值一次返回多个时, 返回的数据类型是元组,

函数要返回结果,就必须要使用 return 关键字,后面加上返回的结果对象

1
2
3
4
5
def squarep(num1,num2):
return num1**2 + num2**2

ret = squarep(1, 2)
print(ret) # 5
1
2
3
4
5
6
def jueduizhi(a):
if a>=0:
return a
else:
return -a
print(jueduizhi(6)) # 6

1.3 函数的参数

  • 函数定义时的参数叫做 形参 ,函数调用时的参数叫做 实参
  • 函数的在调用时,当前面的参数使用完整写法时,后面的参数也必须使用完整写法,否则报错。
1
2
3
4
5
6
7
8
9
def sumdata(a,b):
return a+b

# 正确写法
print(sumdata(a=34,b=56)) #实参的完整写法,当使用完整写法时,参数的顺序可以进行调换
print(sumdata(34,b=56)) #前面用简写,后面用完整写法

# 错误写法
print(sumdata(a=34,56)) #错误的写法:前面用完整写法,后面用简写

1.3.1 默认参数

  • 默认参数:定义在函数体中,在函数调用时,如果用户没有输入该参数,则使用默认值。
  • 默认参数必须放在参数列表的后面。
  • 默认参数的值必须是不可变的对象,比如None、True、False、数字或字符串
1
2
3
4
def print_user_info(name,age=18,sex='男'):
print('姓名:%s,年龄:%d,性别:%s'%(name,age,sex))

print_user_info('张三') # 姓名:张三,年龄:18,性别:男

1.3.2 关键字参数(位置参数)

python中可以通过形参名来传参,不用按顺序传参.

1
2
3
4
def print_user_info(name,age,sex='男'):
print(f'姓名: {name}, nmage: {age}, 性别: {sex}')

print_user_info(name='张三',age=18,sex='男') # 姓名: 张三, nmage: 18, 性别: 男

函数的 缺省值,当用户 未输入 缺省值时,作为默认值使用;
当用户 输入 了该值,则以用户输入为准。

函数的参数定义,一旦有缺省值后,后面所有的参数必须都有缺省值。

1
2
3
4
5
def sumdata(a,b,c=100):
return a+b+c

print(sumdata(10,20,c=1)) # 31
print(sumdata(10,20)) # 130

1.3.3 只接受关键字参数

将强制关键字参数放到 *参数或者单个*后面就能达到只接受关键字参数的功能。

1
2
3
4
def print_user_info(name, *, age, sex='男'):
print(f'姓名: {name}, nmage: {age}, 性别: {sex}')

print(print_user_info('张三',age=18,sex='男')) # 姓名: 张三, nmage: 18, 性别: 男

1.3.4 可变参数

  • 使用 *args 表示可变长度参数,可以写任意个。
    • *args 的类型为 元组(tuple)
  • 使用 **kwargs 表示关键字参数,它是一个字典 可以写任意个。
    • **kwargs 的类型为 字典(dict)
1
2
3
4
def fun5(a,*args,**kwargs):
return a,args,kwargs

print(fun5(100,22,33,79,qq=98)) # (100, (22, 33, 79), {'qq': 98})

2. 匿名函数

python 使用 lambda 来创建匿名函数,也就是不再使用 def 语句这样标准的形式定义一个函数

匿名函数的特点:

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

语法格式:

1
lambda 参数1,参数2,参数3: 函数体

1
2
3
sum = lambda x,y:x+y

print(sum(1,2)) # 3

3. 局部变量与全局变量

局部变量:定义在函数体内,只在该函数内部有作用。
全局变量:定义在函数体外,作用于整个模块文件。
使用 global 可以将局部变量变为全局变量。

1
2
3
4
5
6
upChars = '零壹贰叁肆伍陆柒捌玖'

def getZh(num):
print('对应的汉字是:' + upChars[num])

getZh(5) # 对应的汉字是:伍