《Python零基础快乐学习之旅》学习笔记11——函数设计

秒速五厘米 2022-10-25 12:51 308阅读 0赞

文章目录

  • 第11章 函数设计
    • 11.1 Python函数基本概念
      • 11.1.1 函数的定义
      • 11.1.2 没有输入参数没有返回值的函数
    • 11.2 函数的参数设计
      • 11.2.1 传递一个参数
      • 11.2.2 多个参数传递
      • 11.2.3 参数默认值的处理
    • 11.3 函数返回值
      • 11.3.1 返回None
      • 11.3.2 简单返回数值数据
      • 11.3.3 返回多种数据
      • 11.3.4 简单返回字符串数据
    • 11.4 调用函数时参数为列表
    • 11.5 传递任意数量的参数
      • 11.5.1 传递并处理任意数量的参数
      • 11.5.2 设计含有一般参数与任意数量参数的函数
    • 11.6 局部变量与全局变量
      • 11.6.1 全局变量的使用范围
      • 11.6.2 局部变量与全局变量同名
      • 11.6.3 程序设计的注意事项
    • 11.7 匿名函数lambda

第11章 函数设计

11.1 Python函数基本概念

11.1.1 函数的定义

函数的语法格式如下:

  1. def 函数名称(参数值1[,参数值2,...]):
  2. """ 函数注释(docstring)"""
  3. 程序代码段
  4. return [返回值1,返回值2, ...] # 中括号可有可无
  • 函数名称。名称必须是唯一的,程序将来可以呼叫引用。
  • 参数值。参数值可有可无,视函数设计需要而定,可接收呼叫函数传来的变量,各参数之间用逗号“,”隔开。
  • 函数注释。函数注释可有可无,为加强程序可读性,通常会加上注释以说明函数的功能,有多行注释时用3个双引号(或单引号)括起来。
  • return [返回值1,返回值2,…]。不论是return还是右边的返回值都是可有可无的。如果有多个返回数据,需要用逗号“,”隔开。

11.1.2 没有输入参数没有返回值的函数

程序实例:

  1. # 定义一个函数
  2. def greeting():
  3. """第一个Python函数设计"""
  4. print("Hello world")
  5. # 主程序
  6. greeting()

执行结果:

  1. Hello world

11.2 函数的参数设计

11.2.1 传递一个参数

程序实例:

  1. # 定义函数
  2. def greeting(name):
  3. """传递1个参数的函数设计"""
  4. print("Hello,", name)
  5. greeting('James')

执行结果:

  1. Hello, James

11.2.2 多个参数传递

设计的函数需要传递多个参数时,调用此函数时需要注意传递参数的位置是否正确。常见的传递参数为数值或字符串数据,有时也会需要传递列表、元组或字典。

程序实例:

  1. def subtract(m, n):
  2. """减法设计"""
  3. result = m - n
  4. print(result)
  5. print("本程序将执行a-b的运算")
  6. a = int(input("a = "))
  7. b = int(input("b = "))
  8. print("a - b = ", end="") # 输出a-b字符串,接下来的输出不换行
  9. subtract(a, b)

执行结果:
在这里插入图片描述

11.2.3 参数默认值的处理

在设计函数时,可以给参数一个默认值,若调用该函数时没有设置参数值,则会采用默认值。需要注意的是:函数设计时,含有默认值的参数必须放在参数列表的最右边,否则会出错。

程序实例:

  1. # 定义函数
  2. def greeting(name = 'python'):
  3. """传递1个参数的函数设计"""
  4. print("Hello,", name)
  5. greeting('James')
  6. greeting()

执行结果:

  1. Hello, James
  2. Hello, python

11.3 函数返回值

11.3.1 返回None

当设计函数时没有“return [返回值]”部分时,Python在直译时会自动返回处理成“return None”,相当于返回None。None在Python中独立成为一个数据类型:NoneType

程序实例:

  1. # 定义函数
  2. def greeting(name = 'python'):
  3. """传递1个参数的函数设计"""
  4. print("Hello,", name)
  5. ret_value = greeting()
  6. print("greeting()返回值为:", ret_value, ",数据类型为:", type(ret_value))

执行结果:

  1. Hello, python
  2. greeting()返回值为: None ,数据类型为: <class 'NoneType'>

当函数设计时有return,但没有返回值时,Python也将自动处理成return None。

程序实例:

  1. # 定义函数
  2. def greeting(name = 'python'):
  3. """传递1个参数的函数设计"""
  4. print("Hello,", name)
  5. return
  6. ret_value = greeting()
  7. print("greeting()返回值为:", ret_value, ",数据类型为:", type(ret_value))

执行结果:

  1. Hello, python
  2. greeting()返回值为: None ,数据类型为: <class 'NoneType'>

11.3.2 简单返回数值数据

参数具有返回值功能,可以大大增加程序的可读性。

程序实例:

  1. def subtract(x1, x2):
  2. """减法设计"""
  3. result = x1 - x2
  4. return result # 返回减法结果
  5. print("本程序将执行a - b的运算")
  6. a = int(input("a = "))
  7. b = int(input("b = "))
  8. print("a - b = ", subtract(a, b)) # 输出a-b字符串和结果

执行结果:
在这里插入图片描述

11.3.3 返回多种数据

使用return返回函数数据时,允许返回多种数据,各种数据之间以逗号”,“隔开。

程序实例:

  1. def multifunction(x1, x2):
  2. """加减乘除四则运算"""
  3. result_add = x1 + x2
  4. result_sub = x1 - x2
  5. result_mul = x1 * x2
  6. result_div = x1 / x2
  7. # 返回加、减、乘、除的结果
  8. return (result_add, result_sub, result_mul, result_div)
  9. x1 = x2 = 10
  10. add, sub, mul, div = multifunction(x1, x2)
  11. print("加法结果:", add)
  12. print("减法结果:", sub)
  13. print("乘法结果:", mul)
  14. print("除法结果:", div)

执行结果:

  1. 加法结果: 20
  2. 减法结果: 0
  3. 乘法结果: 100
  4. 除法结果: 1.0

11.3.4 简单返回字符串数据

程序实例:

  1. def findByKey(k, dic = set()):
  2. boolean = k in dic
  3. if boolean == True:
  4. result = '是该集合的成员'
  5. else:
  6. result = '不是该集合的成员'
  7. return result
  8. res1 = findByKey(1, { 1, 3, 5, 7, 9})
  9. res2 = findByKey('apple', { 'orange', 'pear'})
  10. print(res1)
  11. print(res2)

执行结果:

  1. 是该集合的成员
  2. 不是该集合的成员

11.4 调用函数时参数为列表

在调用函数时,可以将列表(可以是由数值字符串字典组成)作为参数传递给函数,然后函数可以遍历列表内容,执行更进一步操作。

程序实例:

  1. def mail_msg(recipients):
  2. str1 = '尊敬的用户:'
  3. str2 = '恭喜您被天上掉下来的馅饼砸中!快来看看吧!'
  4. str3 = '404'
  5. for recipient in recipients:
  6. msg = str1 + recipient + '\n' + str2 + '\n' + str3
  7. print(msg, '\n')
  8. members = ['声微饭否', '奇怪的打野', 'bug搬运工']
  9. mail_msg(members)

执行结果:

  1. 尊敬的用户:声微饭否
  2. 恭喜您被天上掉下来的馅饼砸中!快来看看吧!
  3. 404
  4. 尊敬的用户:奇怪的打野
  5. 恭喜您被天上掉下来的馅饼砸中!快来看看吧!
  6. 404
  7. 尊敬的用户:bug搬运工
  8. 恭喜您被天上掉下来的馅饼砸中!快来看看吧!
  9. 404

11.5 传递任意数量的参数

11.5.1 传递并处理任意数量的参数

在设计函数时,可能会遇到多个参数传递到该函数的情况。

程序实例:

  1. # “*”表示可以有1个或多个参数传递到此函数中
  2. def make_icecream(*toppings):
  3. print("这个冰淇淋所加配料如下:")
  4. for topping in toppings:
  5. print("--- ", topping)
  6. make_icecream('草莓酱')
  7. make_icecream('草莓酱', '奶油', '巧克力')

执行结果:

  1. 这个冰淇淋所加配料如下:
  2. --- 草莓酱
  3. 这个冰淇淋所加配料如下:
  4. --- 草莓酱
  5. --- 奶油
  6. --- 巧克力

11.5.2 设计含有一般参数与任意数量参数的函数

程序设计时,会遇上需要传递一般参数与任意数量参数的情况,这时任意数量的参数必须放在最右边。

程序实例:

  1. # “*”表示可以有1个或多个参数传递到此函数中
  2. def make_icecream(icecream_type, *toppings):
  3. print(icecream_type,"冰淇淋所加配料如下:")
  4. for topping in toppings:
  5. print("--- ", topping)
  6. make_icecream('香草', '草莓酱')
  7. make_icecream('芒果', '草莓酱', '奶油', '巧克力')

执行结果:

  1. 香草 冰淇淋所加配料如下:
  2. --- 草莓酱
  3. 芒果 冰淇淋所加配料如下:
  4. --- 草莓酱
  5. --- 奶油
  6. --- 巧克力

11.6 局部变量与全局变量

如果某个变量只能在函数内使用,影响范围限定在这个函数内,那么这个变量就称为局部变量(local variable)。如果某个变量的影响范围是整个程序,则这个变量称为全局变量(global variable)。

Python程序在调用函数时,会创建一个内存工作区间,在这个内存工作空间可以处理属于这个函数的变量。当函数工作结束,返回原先呼叫程序时,这个内存工作区间就被收回,原先存在的变量也将被销毁,因此局部变量的影响范围只限定在所属的函数内。

对于全局变量而言,一般是在主程序内创建。程序在执行时,不但主程序可以引用,所有属于这个程序的函数也可以引用,因此它的影响范围是整个程序。

11.6.1 全局变量的使用范围

一般在主程序内创建的变量称为全局变量,这个变量可以被主程序以及程序内的所有函数引用。

程序实例:

  1. def printmsg():
  2. print("函数打印:",msg)
  3. msg = 'Hello world' # 设置全局变量
  4. print("主程序打印:", msg)
  5. printmsg() # 调用函数

执行结果:

  1. 主程序打印: Hello world
  2. 函数打印: Hello world

11.6.2 局部变量与全局变量同名

如果全局变量与函数内的局部变量使用相同的名称,那么,在局部变量所在的函数中使用局部变量的内容,其它区域则使用全局变量的内容。

程序实例:

  1. def printmsg():
  2. msg = 'Hello, python'
  3. print("函数打印:",msg)
  4. msg = 'Hello world' # 设置全局变量
  5. print("主程序打印:", msg)
  6. printmsg() # 调用函数

执行结果:

  1. 主程序打印: Hello world
  2. 函数打印: Hello, python

11.6.3 程序设计的注意事项

一般程序设计时,有关使用局部变量需要注意以下几点,否则程序会有错误产生。

  • 局部变量内容无法在其他函数引用。
  • 局部变量内容无法在主程序引用。
  • 一般在函数内不能修改全局变量的值,除非在函数内使用global声明此变量。

程序实例:

  1. def printmsg():
  2. global msg # 使用global声明全局变量
  3. msg = "php" # 更改全局变量
  4. print("更改后:", msg)
  5. msg = "Python"
  6. print("更改前:", msg)
  7. printmsg()

执行结果:

  1. 更改前: Python
  2. 更改后: php

11.7 匿名函数lambda

匿名函数是指没有名称的函数,Python使用def来定义一般函数,使用lambda来定义匿名函数。匿名函数的最大特点是可以有许多参数,但只能有一个程序代码语句,可以将执行结果返回。

  1. lambda arg1[, arg2, ..., argn]:expression # arg1是参数,可以有多个参数

程序实例:

  1. # 单一参数的匿名函数
  2. # 定义lambda函数
  3. square = lambda x: x**2 # 返回平方值
  4. print(square(5))
  5. # 多个参数的匿名函数
  6. add = lambda a,b: a+b # 返回a+b的和
  7. print(add(3, 8))

执行结果:

  1. 25
  2. 11

往期文章:

  • 《Python零基础快乐学习之旅》学习笔记2——认识变量与基本数学运算
  • 《Python零基础快乐学习之旅》学习笔记3——Python的基本数据类型
  • 《Python零基础快乐学习之旅》学习笔记4——基本输入与输出
  • 《Python零基础快乐学习之旅》学习笔记5——程序的流程控制使用if语句
  • 《Python零基础快乐学习之旅》学习笔记6——列表(list)
  • 《Python零基础快乐学习之旅》学习笔记7——循环设计
  • 《Python零基础快乐学习之旅》学习笔记8——元组(tuple)
  • 《Python零基础快乐学习之旅》学习笔记9——字典(dict)
  • 《Python零基础快乐学习之旅》学习笔记10——集合(set)

发表评论

表情:
评论列表 (有 0 条评论,308人围观)

还没有评论,来说两句吧...

相关阅读