美文网首页
012-函数

012-函数

作者: 小D修行笔记 | 来源:发表于2022-07-30 12:35 被阅读0次

\color{red}{函数、函数的嵌套、局部变量、全局变量、函数的返回值、拆包、交换变量的值、引用当做实参}

函数的作用

  • 可以将具有重复功能的代码封装成函数
  • 简化代码量,方便调用
  • 函数就是一段具有独立功能的代码块
  • 更高效的实现代码重用

函数的使用步骤

  • 先定义,再使用
  • 不同的需求,参数可有可无
  • 函数名满足标识符命名规则

定义函数

def 函数名(参数):
  代码1
  代码2
  ……

调用函数

函数名(参数)

# 定义函数
def showMessage():
    print('-' * 30)
    print('show message'.center(30))
    print('-' * 30)

# 调用函数
print('调用函数展示信息')
showMessage()

输出结果

调用函数展示信息
------------------------------
         show message         
------------------------------

函数的注意事项

  • 函数需要先定义再调用
  • 函数内部的代码,只有调用才会执行
  • 当调用函数的时候,解释器会到定义函数的地方去执行下方缩进的代码,当这些代码执行完,回到调用函数的地方,继续向下执行

函数的参数

  • 让函数变得更加灵活
  • 参数由实参传递到形参
  • 实参的参数应该和形参一一对应

函数的返回值

  • 返回给用户一个结果
  • 返回的结果在函数调用的地方,可以使用变量接收
  • return 后面的代码不会被执行

函数的说明文档

  • 快速提示函数的作用

help(函数名) # 查看函数的说明文档

定义函数的说明文档

def 函数名(参数):
  """说明文档的位置"""
  代码
  ……

# 定义带参数的函数
def sum(num1, num2):
    """求和函数"""
    return num1 + num2
# 查看函数的说明文档
help(sum)

输出结果

Help on function sum in module __main__:

sum(num1, num2)
    求和函数

def 函数名(参数):
  """
    :param 参数1: 参数1的说明
    :param 参数2: 参数2的说明
    ……
    :return:返回值的说明
  """
  代码
  ……

# 定义带参数的函数
def sum(num1, num2):
    """
    求和函数
    :param num1:参数1 
    :param num2: 参数2
    :return: 返回连个数的和
    """
    return num1 + num2
# 查看函数的说明文档
help(sum)

输出结果

sum(num1, num2)
    求和函数
    :param num1:参数1
    :param num2: 参数2
    :return: 返回连个数的和

函数的嵌套

  • 一个函数里面又调用了另外一个函数
# 嵌套函数
# 定义函数testB
def testB():
    print('-' * 30)
# 定义函数testA
def testA():
    testB()  # 调用函数testB
    print('testA'.center(30))
    testB()
# 调用函数
testA()

输出结果

------------------------------
            testA             
------------------------------

局部变量

  • 定义在函数体内部,即只在函数体内部生效
  • 临时保存数据,即当函数调用完成后,销毁局部变量

全局变量

  • 所谓全局变量,指的是在函数体内、外都能生效的变量
  • 定义在函数外的变量
  • 在函数体内部不能直接修改全局变量
    如果直接给全局变量赋新值 a = 200,这相当于定义了一个局部变量
    如果使用赋值运算符给全局变量赋值 a += 200,则会报错
  • 要想在函数内部修改全局变量,需要使用 global 声明变量
# 全局变量
a = 100
def testA():
    print(f'testA中打印:{a}')
def testB():
    global a  # 声明 a 为全局变量
    a += 200
    print(f'testB中打印:{a}')
testA()
testB()
print(f'函数外部打印:{a}')

输出结果

testA中打印:100
testB中打印:300
函数外部打印:300

函数的返回值

  • return a, b写法,返回多个数据的时候,默认的数元组类型
  • return 后面可以连接列表、元组或字典以返回多个值

return返回元组

# 返回元组
def return_num():
    return 1, 2
result = return_num()
print(result)

输出结果

(1, 2)

函数的参数

位置参数

  • 调用函数时根据函数定义的参数位置来传递参数
  • 传递和定义参数的顺序及个数必须一致
# 位置参数
def user_info(name, age, gender):
    print(f'您的名字是:{name},年龄是:{age},性别是:{gender}')
user_info('Tom', 20, '男')

输出结果

您的名字是:Tom,年龄是:20,性别是:男

关键字参数

  • 函数调用,通过‘键 = 值‘形式加以指定
  • 可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求
  • 函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字之间不存在先后顺序
# 关键字参数
def user_info(name, age, gender):
    print(f'您的名字是:{name},年龄是:{age},性别是:{gender}')
user_info(name='Tom', age=20, gender='男')
user_info(age=20, name='Rose', gender='女')
user_info('Tom', age=20, gender= '男')  # 位置参数需要在关键字参数前面

输出结果

您的名字是:Tom,年龄是:20,性别是:男
您的名字是:Rose,年龄是:20,性别是:女
您的名字是:Tom,年龄是:20,性别是:男

缺省参数

  • 缺省参数也叫默认参数,用于定义函数,为参数提供默认值
  • 调用函数时可不传入该默认参数的值
  • 所有位置参数必须出现在默认参数前,包括函数定义和调用
  • 函数调用时,如果为缺省参数传值则修改默认参数值;否则使用这个默认值
# 缺省参数
def user_info(name, age, gender='男'):
    print(f'您的名字是:{name},年龄是:{age},性别是:{gender}')
user_info('Tom', 20, '男')
user_info('Jack', 18)  # 缺省参数可以不传,则使用默认值

输出结果

您的名字是:Tom,年龄是:20,性别是:男
您的名字是:Jack,年龄是:18,性别是:男

不定长参数

  • 不定长参数也叫可变参数。
  • 用于不确定调用的时候会传递多少个参数(不传参数也可)的场景
  • 此时,用于包裹位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便
包裹位置传递
# 包裹位置传递
def user_info(*args):
    print(args)
user_info('Tom')
user_info('Tom', 20)

输出结果

('Tom',)
('Tom', 20)
  • 传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组
  • args是元组类型,这就是包裹位置传递
包裹关键字传递
# 包裹关键字传递
def user_info(**kwargs):
    print(kwargs)
user_info(name='Tom',age=20)

输出结果

{'name': 'Tom', 'age': 20}
  • 传进的所有参数被kwargs收藏,合并为一个字典
  • kwargs是字典类型

拆包

元组拆包

# 元组
def return_num():
    return 100, 200
num1, num2 = return_num()
print(num1)
print(num2)

输出结果

100
200

字典拆包

# 字典
dict1 = {'name': 'Tom', 'age': 20}
a, b = dict1
print(a) 
print(b)
print(dict1[a])
print(dict1[b])

输出结果

name
age
Tom
20
  • 字典拆包,拆出来的是对应的key,可以根据 key 获取对应的value

交换变量的值

借助第三方变量

# 交换变量的值
a = 10
b = 20
c = a
a = b
b = c
print(a)
print(b)

输出结果

20
10

使用直接赋值的方式交换两个变量的值

a = 1
b = 2
a, b = b, a
print(a)
print(b)

输出结果

2
1

引用

  • 在Python中,值是靠引用来传递的
  • 我们可以用 id(数据) 来判断两个变量是否为同一个值的引用,id为内存地址标识符

int类型

# int类型
a = 1
b = a
print(id(a))
print(id(b))
a = 2
print(b)
print(id(a))
print(id(b))

输出结果

4335897776
4335897776
1
4335897808
4335897776
  • int 类型为不可变类型

list类型

# list类型
list1 = [10, 20]
list2 = list1
print(id(list1))
print(id(list2))
list1.append(30)
print(list2)
print(id(list1))
print(id(list2))

输出结果

140238548220296
140238548220296
[10, 20, 30]
140238548220296
140238548220296

引用当做实参传递

不可变参数

# 不可变参数
def test1(a):
    print(a)
    print(id(a))
    a += a
    print(a)
    print(id(a))

b = 100
test1(b)

输出结果

100
4434209040
200
4434212240

可变参数类型

# 可变参数
def test1(list1):
    print(list1)
    print(id(list1))
    list1.append(30)
    print(id(list1))
list1 = [10 , 20]
print(id(list1))
test1(list1)
print(list1)

输出结果

140644895160968
[10, 20]
140644895160968
140644895160968
[10, 20, 30]
140644895160968
  • 可变类型,改变后元数据也跟着改变

相关文章

  • 012-函数

    函数的作用 可以将具有重复功能的代码封装成函数 简化代码量,方便调用 函数就是一段具有独立功能的代码块 更高效的实...

  • 【Python】-012-函数-基本语法

    声明函数 变量作用域 Python变量作用域的四种情况: B:build-in 系统固定模块里面的变量,也叫系统变...

  • 012-日志

    springboot默认日志Logback。 默认情况下,Spring Boot会用Logback来记录日志,并用...

  • 012-柠檬

    012-柠檬1.如果说加入易效能才发现,曾经的岁月都变成了将就,而我不愿意再将就了。 2.临危受命,成为C5班班长...

  • 012-童年

    *&--->One 池塘边滴榕树上 知了在'吱吱'滴叫着夏天 操场边滴秋千上 只有那蝴蝶还停在上面 黑板上老师的粉...

  • 012-关系

    Q:二狗子,你老表舅家儿子在大企业上班,和你在一个城市,你联系联系。A:好。 过了大半年。 Q:二狗子,你联系那个...

  • 012-蓄水

    描述 给定一个非负数组表示一个高度图,其中每一项的宽度都是1,计算这个高度图能装多少水。 例如:输入[0,1,0,...

  • 012-【送别】

    送别 唐代:王维 下马饮君酒,问君何所之? 君言不得意,归卧南山陲。 但去莫复问,白云无尽时。 王维这首《送别》用...

  • 我想回家,可我找不到回家的路

    012-张东雄《不负如来不负卿》_知梦成佛在线听_情感美文-喜马拉雅FM[http://m.ximalaya.co...

  • 非暴力沟通之观察

    一个目标: 非暴力沟通课程总结之观察 三个步骤: 1:2019.6.4 012-汪秀明打卡第3天 2:课程总结: ...

网友评论

      本文标题:012-函数

      本文链接:https://www.haomeiwen.com/subject/edgcwrtx.html