第六章函数

第六章函数

6.1函数概述

代码复用

补充

1.函数的使用过程

  1. 定义
  2. 调用
  3. 执行
  4. 返回

2.函数作用

  1. 使程序模块化
  2. 减少冗余
  3. 提高效率

6.2函数的定义和调用

6.2.1定义函数

def 关键字

格式

def 函数名 ([参数列表]):
	["""文档字符串"""]
    函数体
    [return语句]
  • def 关键字:函数的开始标志

  • 函数名:函数的唯一标识,遵循标识符的命名规则

  • 参数列表:负责接收传入函数中的数据,可以包含一个或多个参数,也可以为空

  • 冒号:函数体的开始标志

  • 文档字符串:有一对三引号包裹的,用于说明函数功能的字符串,可以省略

  • 函数体:实现函数功能的具体代码

  • return语句:函数结束非标志,返回处理结果

    • 没返回值不需要print()
    • 有返回值调用函数用变量保存返回值或直接print()打印

6.2.2调用函数

格式:函数名 ([参数列表])
嵌套定义

定义的函数里再定义函数

定义的内层函数只能在定义的外层函数里调用

例えば

def add_modify(a,b):
    result = a+b
    print(result)
    def test():
        print("我是内层函数")
add_modify(10,20)

#运行结果
30


def add_modify(a,b):
    result = a+b
    print(result)
    def test():
        print("我是内层函数")
    test()
add_modify(10,20)

#运行结果
30
我是内层函数

6.3函数参数的传递

形式参数(简称形参):定义函数时设置的参数

实际参数(简称实参):调用函数时传入的参数

6.3.1位置参数的传递

调用函数时,将实参按照相应位置依次传递给形参

例えば

def add_modify(a,b):
    result = a+b
    print(result)
add_modify(10,100)    #10->a 100->b

6.3.2关键字参数的传递

形参=实参

例えば

def add_modify(a,b):
    result = a+b
    print(result)
add_modify(a=10,b=100)    

“ / ” 仅限位置形参

限定部分形参只接受采用位置参数传递方式的实参

例えば

def add_modify(a,b,/,c):
    result = a+b+c
    print(result)
add_modify(10,100,c=1000)

6.3.3默认参数传递

没有传值给形参时,直接使用形参默认值

例えば

def add_modify(a=10,b=100):
    result = a+b
    print(result)
add_modify(1000)  
#结果 1100

补充

将有默认值的形参往后排

如果形参有多个,调用函数是只填入一个实参,默认传给第一个形参

例えば

#错误写法
def add_modify(a=10,b):
    result = a+b
    print(result)
add_modify(10) #此时,b获取不到值
#正确写法
def add_modify(a,b=100):
    result = a+b
    print(result)
add_modify(1000) 

6.3.4参数的打包与解包

1.打包

在形参前加上“ ***** ”,可以接收以元组形式打包的多个值

在形参前加上“ ****** ”,可以接受以字典形式打包的多个值

例えば

def test(*args):
    print(args)
test(11,22,33,44,55)
#运行结果
(11,22,33,44,55)

def test_one(**kwargs):
    print(kwargs)
test_one(a=11,b=22,c=33,d=44,e=55)
#运行结果
{'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}

2.解包

“ * ”可将元组拆分为多个值

“ ** ”可将字典拆分为多个键值对

例えば

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

nums = (11,22,33,44,55)
test(*num)
#结果
11 22 33 44 55
num = {'a':11,'b':22,'c':33,'d':44,'e':55}
test(**num)
#结果
11 22 33 44 55

6.3.5混合传递

按优先级从高到低依次为按位置参数传递、按关键字参数传递、按默认参数传递、按打包传递

6.4函数的返回值

如果函数的返回值存在两个以上,则以元组的形式保存

补充

  1. return 可以出现在函数任何位置
  2. 可以返回0个,1个,多个返回值

6.5变量作用域

6.5.1局部变量和全局变量

1.局部变量

在函数内部定义的变量,只能在函数内部使用

2.全局变量

可以在整个程序的范围内起作用,不受函数范围影响

在函数内部可以使用,但不能直接修改

LEGB原则

程序中搜索变量时所遵循的原则

L:局部作用域

E:嵌套作用域

G:全局作用域

B:内置作用域

6.5.2 global和nonlocal关键字

1.global关键字

将局部变量声明为全局变量

global 变量

例えば

number = 10
def test_one():
    global number
    number += 1
    print(number)
test_one()
print(number)
#结果
11
11
2.nonlocal 关键字

在局部作用域中修改嵌套作用域中声明的变量

nonlocal 变量
def test():
    number = 10
    def test_in():
        nonlocal number
        number = 20
    test_in()
    print(number)
test()
#结果
20

6.6实例

1.定义函数:判断是否为回文

def hw(a) :
    # a = input("请输入一个整数:")
    c = str(a)
    b = list(c)
    e = list(c)
    b.reverse()
    if b == e:
        print("{} 是回文".format(a))
    else:
        print("{}不是回文".format(a))

hw(11111)
#结果
11111 是回文
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值