Python3函数和lambda表达式

函数入门

定义函数和调用函数

  • 定义函数
def 函数名([参数1, 参数2, ...]) :
	'''
	说明文档
	'''
	函数体
	[return [返回值]]
  • 调用函数
函数名([实参列表])

多个返回值

  • 如果程序需要多个返回值,则即可将多个值包装成列表之后返回,也可以直接返回多个值,Python会自动将多个返回值封闭成 元组

函数的参数

关键字(keyword)参数

# 定义一个函数
def girth(width, height):
	print("width:", width)
	print("height:", height)
	return 2 * (width + height)

# 传统调用函数的方式,根据位置传入参数
print(girth(3.5, 4.8))

# 根据关键字传入参数
print(girth(width = 3.5, height = 4.8))

# 使用关键字参数时可交换位置
print(girth(height = 4.8, width = 3.5))

# 部分使用关键字,部分使用位置参数
print(girth(3.5, height = 4.8))

参数默认值

  • 可以在定义函数时为一个或多个形参指定默认值。这样在调用函数时可以省略参数值,也可以传入参数值。
def (say_hi(name = "alex")):
	print("Hi ", name)

可变(个数)参数

  • 在定义函数时,在形参前加 一个 星号(*),该参数可接收多个值,并被当成 元组 传入
  • 在形参前加 两个 星号(**),可将关键字参数收集成字典
def test(*names, **scores):
	print(names)
	print(scores)

test("alex", "jack", 语文=89, 数学=94)
"""
输出结果:
('alex', 'jack')
{'语文': 89, '数学': 94}
"""

逆向参数收集

  • 指在程序已有列表、元组、字典等对象的前提下,把元素“拆开”后传给函数的参数
def test(name, message):
	print(name)
	print(message)

my_list = ['alex', 'Hello']
test(*my_list) # 使用逆向参数时,在实参前加上*号

my_dict = {'name': 'alex', 'message': 'hello'}
test(**my_dict) # 使用字典时,在实参前加上两个*号

变量作用域

  • 局部变量:在函数内部中定义的变量,包括参数
  • 全局变量:在函数外、全局范围内定义的变量

Python规定:在函数内部可以引用全局变量,但不能修改全局变量的值

  • 如需要在函数内部修改全局变量的值,可以使用 global 来声明全局变量
name = 'Charlie'
def test():
	print(name)
	global name
	name = "Alex"

test()
print(name)

函数的高级用法

使用函数作为函数形参

在函数中定义函数形参,这样即可在调用该函数时传入不同的函数作为参数,从而动态改变函数体的代码

def map(data, fn):
	result = []
	for e in data:
		result.append(fn(e))
	return result

def square(n):
	return n * n

def cube(n):
	return n * n * n

data = [3, 4, 9]
print("计算列表元素中每个数的平方")
print(map(date, square))
print("计算列表元素中每个数的立方")
print(map(data, cube))

局部函数

  • 在函数体内部定义的函数,称为局部函数
def get_math_func(type):
	# 定义局部函数
	def square(n):
		return n * n

	def cube(n):
		return n * n * n

	if type == 'square':
		return square
	elif type == 'cube':
		return cube

# 调用get_math_func(),程序返回一个嵌套函数
math_func = get_math_func('square')
print(math_func(3))
math_func = get_math_func('cube')
print(math_func(3))

局部函数与lambda表达式

语法

lambda [参数列表]: 表达式

即:
def add(x, y):
	return x + y
可改写为:
lambda x, y: x + y

Python要求lambda表达式只能是单行表达式

修改上例局部函数使用lambda表达式

def get_math_func(type):
	if type == 'square':
		return lambda n: n * n
	elif type == 'cube':
		return lambda n: n * n * n

转载于:https://my.oschina.net/zerobit/blog/3073748

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值