python--实验7 函数(1)

知识点

函数的定义与调用

  • 函数分类:内置函数和自定义函数。
  • 函数定义:使用def关键字定义函数,包括函数名、参数列表和函数体。
  • 注意:
    • (1)即使该函数不需要接收任何参数,也必须保留一对空的圆括号。
    • (2)python的参数不需要声明数据类型
    • (3)括号后面的冒号不能省略。
    • (4)函数体相对于def关键字必须保持一定的空格缩进。  
    •   (5)return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return           相当于返回 None。强调了即使函数不需要参数,也必须保留空括号,参数不需要声明数据类型,函数体需要适当的缩进,以及return语句的使用。
  • 无参函数有参函数:无参数和有参数的函数。
  • 空函数:使用pass关键字定义空函数的情况
  • 函数调用:如何调用函数,包括无参数和有参数的情况。
    • 如果调用的是无参数函数,则实参列表省略。 通常将函数定义和函数调用都放在一个程序文件中,然后运行程序文件。
    • 嵌套调用

递归函数

  • 递归定义:指一个函数的函数体中又直接或间接地调用该函数本身的函数。
  • 递归出口与递归体:如何设置递归的终止条件(出口)和递归的计算过程(体)。
  • 实例:提供了计算阶乘和求和的递归函数示例。

函数参数的传递

  • 参数传递:Python中参数传递的机制,区分了不可变对象和可变对象的传递方式。在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。当参数类型为固定数据类型(如整数、浮点数、字符串、元组等)时,类似 C++ 的值传递,在函数内部直接修改形参的值不会影响实参。当参数类型为可变数据类型(如列表、字典、集合等)时,类似 C++ 的引用传递。在函数内部使用下标或其他方式为其增加、删除元素或修改元素值时,修改后的结果是可以反映到函数之外的,即实参也会得到相应的修改
  • 不可变参数类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。展示了在函数内部修改不可变类型参数不会影响外部变量。
  • 可变参数类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。展示了可变类型参数在函数内部的修改会影响到外部变量。

参数的类型

  • 位置参数:调用函数时实参和形参的顺序和数量必须一致。
  • 关键字参数:如何使用关键字参数来指定实参对应的形参,允许参数的顺序不固定。
    • 关键字参数的形式为:        形参名=实参值
    •   通过形式参数的名称来指示为哪个形参传递什么值,这可以跳过某些参数或脱离参数的顺序。(实参名来自形参的名字)
  • 默认值参数:展示了如何为函数参数设置默认值,以及相关的规则。
    • 默认值参数的形式为:     形参名=默认值
    • 注意: (1)默认值参数必须出现在形参表的最右端。也就是说,第一个形参使用默认值参数后,它后面的所有形参也必须使用默认值参数,否则会出错。 (2)所有的位置参数必须在默认参数前,包括函数定义和调用
  • 可变长度参数(形参):使用***来接受不定数量的参数,分别将它们存储在元组和字典中。可变长度参数永远放在参数的最后面。
    • 形参名前面加*,用来接受任意多个实参并将其放在一个元组中。
    • 元组可变长度形参
    • 形参名前面加**,可以接受任意多个 关键字=实参值 形式的实参。关键字参数和实参值参数被放入一个字典,分别作为字典的关键字和字典的值
    • 字典可变长度形参
  • 参数的解包裹传递:如何使用***来解包裹元组和字典,将它们作为参数传递给函数。包裹和解包裹并不是相反操作,是两个相对独立的过程。
    • 调用函数时,若函数接收的实参为元组或字典类型,可以对函数参数进行解包裹:
    • 使用* 可以解压待传递到函数中的元组、列表、字符串等类型,并按位置传递到函数入口参数中
    • 使用**可以解压待传递到函数的字典,并按关键字传递到函数入口参数中

                                                       代码部分 

  • 实验目的
  1. 熟练python编辑器pycharm的使用。
  2. 掌握python的函数的定义
  3. 掌握python的函数结构,参数位的设计,如何灵活使用不定长参数
  4. 理解python参数传递的过程
  5. 熟练并理解使用函数优化编程结构以及思路

二、实验环境

本次实验需使用实验室提供的Windows主机环境+pycharm

实验内容

说明:基础题为必做题,提高题为选做题

  1. (基础题)对于一个十进制的正整数, 定义函数f(n)为其各位数字的平方和,如:

    f(13)  : 10

    f(207) : 53

代码:

def f(n):
    return sum(int(digit)**2 for digit in str(n))

# 测试代码
print(f(13))  # 输出: 10
print(f(207)) # 输出: 53

  1. (基础题)编写一个函数, 接收字符串参数, 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数,‘hello WROLD’,返回:(5,5)

代码:

def count_letters(s):
    upper_count = sum(1 for char in s if char.isupper())
    lower_count = sum(1 for char in s if char.islower())
    return (upper_count, lower_count)

# 测试代码
print(count_letters('helloWROLD')) # 输出: (5, 5)

提示:已知有字符串ls

ls.isupper() #判断是否为大写字母,若是,返回True

ls.islower() #判断是否为小写字母,若是,返回True

  1. (基础题) 定义一个函数,能够获取任意多个数(1-100以内)中的最大值

代码:

def max_value(*args):
    return max(args)

# 测试代码
print(max_value(10, 20, 30, 40)) # 输出: 40

  1. (提高题)编写一个函数calcuate_ave, 可以接收任意多个数,返回的是一个元组.元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数

例如:calcuate_ave(10,13,14,15) 返回(13,[14,15])

      calcuate_ave(10,11,14,15,12) 返回(12.4,[14,15])

代码:

def calculate_ave(*args):
    total = sum(args)
    average = total / len(args)
    above_average = [num for num in args if num > average]
    return (average, above_average)

# 测试代码
print(calculate_ave(10, 13, 14, 15)) # 输出: (12.75, [13, 14, 15])
print(calculate_ave(10, 11, 14, 15, 12)) # 输出: (12.4, [14, 15])

总结

        本节深入探讨了函数的基础知识,包括其定义、如何进行调用、不同参数传递机制以及装饰器的概念和使用,同时解释了变量的作用域。在Python编程语言中,函数不仅仅是数学概念中的函数映射,它更是一种执行特定运算或处理数据的程序单元。通过将代码封装进函数中,可以在程序的多个地方重复利用这段代码,而无需每次都重新编写,这正是函数带来的便利和效率。

  • 27
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验名称:Python基础语法实验-1 实验目的: 1. 学习Python基础语法的使用方法; 2. 熟悉Python中的变量、数据类型、运算符; 3. 掌握Python中的控制流程语句。 实验内容: 1. 定义一个变量,变量名为name,赋值为“Tom”,输出该变量的值; 2. 定义一个变量,变量名为age,赋值为20,输出该变量的值; 3. 定义一个变量,变量名为score,赋值为85.5,输出该变量的值; 4. 定义两个变量,变量名分别为a和b,分别赋值为10和5,使用加、减、乘、除、取模、幂运算符,输出运算结果; 5. 使用if-else语句,判断一个数x是否为偶数,如果是,输出“x是偶数”,否则输出“x是奇数”; 6. 使用for循环,计算1到10之间所有整数的和,并输出结果; 7. 使用while循环,计算1到10之间所有偶数的和,并输出结果。 实验步骤: 1. 定义变量name,赋值为“Tom”,使用print()函数输出该变量的值: ``` name = "Tom" print(name) ``` 2. 定义变量age,赋值为20,使用print()函数输出该变量的值: ``` age = 20 print(age) ``` 3. 定义变量score,赋值为85.5,使用print()函数输出该变量的值: ``` score = 85.5 print(score) ``` 4. 定义变量a,赋值为10,变量b,赋值为5,分别使用加、减、乘、除、取模、幂运算符,输出运算结果: ``` a = 10 b = 5 print(a + b) print(a - b) print(a * b) print(a / b) print(a % b) print(a ** b) ``` 5. 使用if-else语句,判断一个数x是否为偶数,如果是,输出“x是偶数”,否则输出“x是奇数”: ``` x = 8 if x % 2 == 0: print("x是偶数") else: print("x是奇数") ``` 6. 使用for循环,计算1到10之间所有整数的和,并输出结果: ``` sum = 0 for i in range(1, 11): sum += i print(sum) ``` 7. 使用while循环,计算1到10之间所有偶数的和,并输出结果: ``` sum = 0 i = 1 while i <= 10: if i % 2 == 0: sum += i i += 1 print(sum) ``` 实验结果: ``` Tom 20 85.5 15 5 50 2.0 0 100000 x是偶数 55 30 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值