浔阳地僻无音乐,终岁不闻丝竹声——python函数

浔阳地僻无音乐,终岁不闻丝竹声。
住近湓江地低湿,黄芦苦竹绕宅生。
其间旦暮闻何物?杜鹃啼血猿哀鸣。

1 函数使用

1.1 函数的作用和特性

作用:

  函数就是封装了一部代码,实现一定功能的语义代码块,声明后可以被调用执行
特性:
  声明函数不会执行函数中的代码
  调用函数才会执行函数中的代码
  优势:函数提高了代码的复用性

1.2 函数的声明和调用、使用方式

函数的声明:

def 函数名称([参数]):  # 名称遵循变量命名规则
    """文档注释:函数的作用"""
    代码
    [return 返回结果]  # []表示可选


# def:固定语法,关键字,专门用来声明函数
# 函数名称,就是一个标识符,命名规则参考变量
# 参数:函数中的代码执行时需要的数据
# 函数中的代码:封装起来的需要重复利用执行的代码块
# return的作用:1)返回函数中代码的执行结果 2)结束函数,后面的代码不会再执行
# 函数声明前后空2行

为方便展示,本文函数省略文档注释,实际使用中请根据情况添加。

函数调用:

  多次调用不同的过程相互独立,互相不影响

  无参数无返回值:函数名称()
  有参数无返回值:函数名称(传递给参数的数据)
  无参数有返回值:变量 = 函数名称()
  有参数有返回值:变量=函数名称(传递给参数的数据)

函数使用:

  当程序中需要一个重复使用的功能,定义函数
  当功能在执行时需要资源,定义参数
  当执行的结果,在后续代码中需要,返回结果

2 函数的参数

2.1 按照参数的作用

形式参数(形参
  位置:声明函数时放在函数名称后面括号中的变量
  作用:描述函数执行时形式上需要的数据

实际参数(实参)
  位置:调用执行函数时放在函数名称后面括号中的数据
  作用:实际传递给函数执行时的数据,可以参与真实运算

2.2 按照参数的操作方式

2.2.1 位置参数

调用函数时,实际参数按照前后顺序依次给形式参数赋值的过程

def test(a, b):
    print(a, b)


a = "音乐"
b = "丝竹"
test(a, b)  # 音乐 丝竹
2.2.2 关键字参数

形参=实参 的形式忽略形参的定义顺序进行的传参的传参方式
关键字参数必须位置参数后面

def test(a, b, c):
    print(a, b, c)


# 关键字参数与位置无关,交换位置得到相同的效果
test("终岁", c="丝竹声", b="不闻")  #  # 终岁 丝竹声 不闻
2.2.3 默认值参数

如果调用有给默认参数传递数据,则使用实际传递数据
如果没有传递,则使用默认数据(声明时赋值给形式参数)

def test(a, b="终岁不闻丝竹声"):
    print(a, b)


# 没有传递是使用默认值
test("浔阳地僻无音乐")  # 浔阳地僻无音乐 终岁不闻丝竹声

# 有传递则使用传递数据
test("浔阳地僻无音乐", "窗前明月光")  # 浔阳地僻无音乐 窗前明月光
test("浔阳地僻无音乐", b="疑是地上霜")  # 浔阳地僻无音乐 疑是地上霜
2.2.4 可变参数–元组参数

元组参数是符号 * 开头的参数
不确定函数执行时需要接受参数的类型和个数,可使用元组参数接收数据, 将变量包装成元组
未知参数要放在可变参数前

# args是习惯写法,可用其他字母代替
def test(*args):
    print(args)


s = ("住近湓江地低湿", "黄芦苦竹绕宅生")
test("浔阳地僻无音乐", "终岁不闻丝竹声")  # ('浔阳地僻无音乐', '终岁不闻丝竹声')
test(s[0])  # ('住近湓江地低湿',)
2.2.5 可变参数–字典参数

不确定函数执行过程中接受什么类型的参数个数,可使用字典参数(关键字参数)
给形参前面添加**使参数变成一个字典,所有传递的参数变成字典的键值对

# kwargs是习惯写法,可用其他字母代替
def test(**kwargs):
    print(kwargs)  


test(s1="浔阳地僻无音乐", s2="终岁不闻丝竹声")  # {'s1': '浔阳地僻无音乐', 's2': '终岁不闻丝竹声'}
# *只作为标记,后面的是关键字参数,必须写成关键字
def test(a, *, b, c):
    print(a, b, c)


test("黄芦", b="苦竹", c="绕宅生")  # 黄芦 苦竹 绕宅生
2.2.6 强制关键字参数

某些特殊应用项目中,需要强制调用者使用关键字参数调用函数,提高代码可读性

# * 只作为标记,后面的是关键字参数,必须写成关键字
def test(a, *, b, c):
    print(a, b, c)


test("黄芦", b="苦竹", c="绕宅生")  # 黄芦 苦竹 绕宅生
2.2.6 万能参数

语义上的可以接受所有合法参数格式的数据,通常默认的表示方式(*args, **kwargs)

def test(*args, **kwargs):
    print(args)
    print(kwargs)


test("其间旦暮", "闻何物", s1="杜鹃啼血", s2="猿哀鸣")
('其间旦暮', '闻何物')
# ('其间旦暮', '闻何物')
# {'s1': '杜鹃啼血', 's2': '猿哀鸣'}

2.3 参数定义顺序

位置参数>元组参数>默认参数>字典参数
先定义位置参数,再定义关键字参数,字典参数必须最后

3 函数的返回值

函数的返回值:即函数中的代码执行的结果
函数执行的结果,如果在后续的代码中需要使用,就需要在函数中定义返回值并且在调用的时候接收返回值

# 返回单个数据
def test():
    return "浔阳地僻无音乐,终岁不闻丝竹声"


s1 = test()  # 浔阳地僻无音乐,终岁不闻丝竹声
print(s1)


# 返回一组数据
def test2():
    return ["住近湓江地低湿", "黄芦苦竹绕宅生"]  # 可指定数据类型(元组,列表)


s2 = test2()
print(s2)  # ['住近湓江地低湿', '黄芦苦竹绕宅生']


# 返回多个数据(元组)
def test3():
    return "其间旦暮闻何物", "杜鹃啼血猿哀鸣"


s3 = test3()  # ('其间旦暮闻何物', '杜鹃啼血猿哀鸣')
print(s3)

# 连续赋值接收
a, b = test3()
print(a)  # 其间旦暮闻何物
print(b)  # 杜鹃啼血猿哀鸣

4 函数的互相调用和递归函数

4.1 函数相互调用

在代码中,一个函数调用另一个函数
需要注意函数什么时候执行结束

def test1():
    print("浔阳地僻无音乐", end=" ")


def test2():
    test1()
    print("终岁不闻丝竹声")


test2()  # 浔阳地僻无音乐 终岁不闻丝竹声

4.2 递归函数

递归调用就是函数自己调用执行自己

递归函数的两个条件:
  1)必须留出口
  2)自己调用自己

递归调用一定要注意:
  每次调用自己都会在内存中多复制一份~如果递归次数过多,最终会导致申请的内存消耗完了[内存溢出],导致程序崩溃。

# 打印5次指定字符
def test(num):
    if num == 0:
        return
    print("浔阳", num, end=" ")
    num = num - 1
    return test(num)  # 浔阳 浔阳 浔阳 浔阳 浔阳


test(5)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值