疯狂Python讲义之函数笔记11

目录

1. 函数入门

1.1 定义函数和调用函数

1.2 为函数提供文档

1.3 多个返回值

1.4 递归函数

2. 函数参数

2.1 关键字( keyword )参数

2.2 参数默认值

2.3 参数收集(个数可变的参数)

 2.4 逆向参数收集

2.5 函数的参数传递机制

2.6 变量作用域

3. 局部函数

4. 函数的高级内容

4.1 使用函数变量

4.2 使用函数作为函数形参

4.3 使用函数作为返回值

5. 局部函数与lambda 表达式


函数是执行特定任务的一段代码,程序通过将一段代码定义成函数,并为该函数指定一个函数名,这样即可在需要的时候多次调用这段代码。因此,函数是代码复用的重要手段。

1. 函数入门

1.1 定义函数和调用函数

在使用函数之前必须先定义函数,定义函数的语法格式如下:

def 函数名(形参列表):
    // 由零条到多条可执行语句组成的函数
    [return [返回值]]

Python 声明函数必须使用def 关键字,对函数语法格式的详细说明如下。

  • 函数名: 从语法角度来看,函数名只要是一个合法的标识符即可;从程序的可读性角度来看,函数名应该由一个或多个有意义的单词连缀而成,每个单词的字母全部小写,单词与单词之间使用下画线分隔。
  • 形参列表: 用于定义该函数可以接收的参数。形参列表由多个形参名组成,多个形参名之间以英文逗号(,)隔开。一旦在定义函数时指定了形参列表,调用该函数时就必须传入到应的参数值一一谁调用函数,谁负责为形参赋值。

在函数体中多条可执行语句之间有严格的执行顺序,排在函数体前面的语句总是先执行,排在函数体后面的语句总是后执行。

## 定义一个函数,声明2个形参
#def my_max(x, y) : 
#	# 定义一个变量z,该变量等于x、y中较大的值
#	z = x if x > y else y
#	# 返回变量z的值
#	return z
def my_max(x, y) : 
	# 返回一个表达式
	return x if x > y else y

# 定义一个函数,声明一个形参
def say_hi(name) :
	print("===正在执行say_hi()函数===")
	return name + ",您好!"
a = 6
b = 9
# 调用my_max()函数,将函数返回值赋值给result变量
result = my_max(a , b) # ①
print("result:", result)
# 调用say_hi()函数,直接输出函数的返回值
print(say_hi("孙悟空")) # ②

1.2 为函数提供文档

为函数编写说明文档-一只要把一段字符串放在函数声明之后、函数体之前,这段字符串将被作为函数的部分,这个文档就是函数的说明文档。

程序既可通过help() 函数查看函数的说明文档,也可通过函数的__doc__属性访问函数的说明文挡。

def my_max(x, y) : 
    '''
    获取两个数值之间较大数的函数。

    my_max(x, y)
        返回x、y两个参数之间较大的那个
    '''
    # 定义一个变量z,该变量等于x、y中较大的值
    z = x if x > y else y
    # 返回变量z的值
    return z
# 使用help()函数查看my_max的帮助文档
help(my_max)
print(my_max.__doc__)

1.3 多个返回值

如果程序需要有多个返回值,则既可将多个值包装成列表之后返回,也可直接返回多个值。如果Python 函数直接返回多个值, Python 会自动将多个返回值封装成元组。

# coding: utf-8
def fun_mul_ret():
    return 1, 2, 3


a_tuple = fun_mul_ret()       # 元组封包
print(a_tuple)

a, b, c = fun_mul_ret()       # 元组解包
print(a, b, c)

*a_list, c = fun_mul_ret()    # 列表和单个
print(a_list)
print(c)

1.4 递归函数

在一个函数体内调用它自身,被称为函数递归。函数递归包含了一种隐式的循环, 它会重复执行某段代码,但这种重复执行无须循环控制。

当一个函数不断地调用它自身肘,必须在某个时刻函数的返回值是确定的,即不再调用它自身:否则,这种递归就变成了无穷递归,类似于死循环。因此,在定义递归函数时有一条最重要的规定: 递归一定要向己知方向进行。

def fn(n) :
	if n == 0 :
		return 1
	elif n == 1 :
		return 4
	else :
		# 函数中调用它自身,就是函数递归
		return 2 * fn(n - 1) + fn(n - 2)
# 输出fn(10)的结果
print("fn(10)的结果是:", fn(10))

2. 函数参数

2.1 关键字( keyword )参数

Python 允许在调用函数时通过名字来传入参数值。因此,Python 函数的参数名应该具有更好的语义一一程序可以立刻明确传入函数的每个参数的含义。

按照形参位置传入的参数被称为位置参数。如果使用位置参数的方式来传入参数值,则必须严格按照走义函数时指定的顺序来传入参数值。

如果根据参数名来传入参数值,则无须遵守定义形参的顺序,这种方式被称为关键字( keyword)参数。

调用函数时,混合使用关键字参数和位置参数,则关键字参数必须位于位置参数之后。换句话说,在关键字参数之后的只能是关键字参数。否则,提示语法错误!

# 定义一个函数
def girth(width , height): 
	print("width: ", width)
	print("height: ", height)
	retur
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值