第四章--第一节:函数

2020-09-08 16:11:35 浏览数 (1)

从本节课开始,我们就进入到了高级编程的阶段,这个阶段有两节课:函数。本节要将的是 函数 相关的知识。

零、什么是函数

函数,通俗的说就是 具有名字的用于完成指定工作的代码块。 使用函数的优点如下:

  1. 程序的编写、测试和修正更加简单;
  2. 增加代码的复用,减少了代码的重复;
  3. And More…
一、定义函数
  1. 无参函数 无参函数,通俗说就是无需传递参数也可以正确执行的函数。语法如下:
代码语言:javascript复制
def 函数名():
  函数体

我们通过函数来看一下无参函数的定义:

代码语言:javascript复制
# 定义一个1 1的函数
def addition():
  num1 = 1
  num2 = 1
  result = num1   num2
  print(result)

# 调用函数
addition()
  1. 有参函数 我们在上一小节学会了无参函数的定义,但是我们会发现一个问题,我们编写的函数只能计算1 1,而不能计算1 2,2 2之类的,因此我们就需要有参函数了。语法如下:
代码语言:javascript复制
def 函数名称(形参1,形参2,...,形参N):
  函数体

我们依然通过例子来看一下:

代码语言:javascript复制
def addition(num1,num2):
  result = num1   num2
  print(result)

# 调用函数
addition(1,3)

这里面有两个概念需要简单讲一下,一个是 形参,一个是 实参。函数中的 num1num2 变量就是形参,而传入函数的 13 就是实参。

  1. 带返回值函数 在一些情况下,我们需要得到函数的执行结果,那么我们就可以使用带返回值的函数。语法如下:
代码语言:javascript复制
def 函数名称([形参]):
  函数体
  return 返回值

我们通过例子来看一下具体用法:

代码语言:javascript复制
def addition(num1,num2):
  result = num1   num2
  return result

# 调用函数
result =addition(1,2)
print(result)

在Python中,函数可以返回多个值,我们只需将返回值之间以 逗号 分割。我们看个例子:

代码语言:javascript复制
# 定义计算函数
def Calculation(num1,num2):
  # 加法运算
  addition=num1 num2
  # 减法运算
  subtraction=num1-num2
  # 乘法运算
  multiplication=num1*num2
  # 除法运算
  division=num1/num2
  # 输出加减乘除的结果
  return addition, subtraction, multiplication, division

# 调用函数
addition, subtraction, multiplication, division =Calculation(1,2)

print("加法结果:%s 减法结果:%s 乘法结果:%s 除法结果:%s" %(addition,subtraction,multiplication,division))

注意:在接收函数返回值的时候,我们接收函数返回值的顺序一定要和函数内返回数据的顺序一样。

三、特殊函数
  1. 关键字实参 我们前面看到的函数的实参都是 位置实参 ,位置实参在传递参数时必须和函数的形参一一对应,顺序不能变。如果需要改变参数传递的顺序,则必须使用关键字实参,关键字实参的格式是:key=value,这样我们就可以不必按照参数顺序传递参数了,我们通过例子来看一下:
代码语言:javascript复制
# 定义一个函数
def YourNameAndAge(name,age):
  print("我的名字是:%s,今年 %s 岁" % (name,age))

# 调用函数,首先传入年龄,再传入姓名
YourNameAndAge(age=20,name="张三")
  1. 列表实参函数 列表实参可以包含多种类型的内容(数字、字典、字符串等),我们来看一下具体的使用:
代码语言:javascript复制
# 定义一个打招呼的函数,并修改其中的数据
def hello(names):
  names[0]="赵六"
  for name in names:
    print("你好 %s" % name)

# 定义列表
names=["张三","李四","王五"]
# 调用函数
hello(names)

在上面的例子中我们修改了列表的第一个值,在调用函数后,我们再次打印这个列表,会发现列表的第一个值已经改变。但是在某些情况下,我们不希望传入函数的列表内容被修改,但是函数体必须要修改列表内容,这个时候我们就用到了列表的副本,我们看一下具体怎么用:

代码语言:javascript复制
# 定义一个打招呼的函数,并修改其中的数据
def hello(names):
  names[0]="赵六"
  for name in names:
    print("你好 %s" % name)

# 定义列表
names=["张三","李四","王五"]
# 调用函数
hello(names[:])

这时我们在调用函数后,再次打印列表内容,发现列表内容并没有变。因为我们向函数传入列表的时候,传入的是列表的副本(切片),列表的副本用 [:] 表示。

  1. 默认值函数 在一些函数中,我们可以不传入指定的参数,这是因为我们在函数中使用了默认值,用法如下:
代码语言:javascript复制
# 定义一个姓名函数
def name(name,age,height="170 CM"):
  print("我叫 %s,今年 %s 岁,身高 %s "%(name,age,height))

# 调用函数两次,一次传入heighr,一次不传入
name("张三",30,"1.8 M")
name("李四",25)

我们第一次调用函数时传递了身高的参数,打印出了我们传入的身高,第二次调用函数时没有传递身高参数,因此系统打印出了默认的值

注意:如果形参有默认值,则形参要放在所有形参的后面

  1. 不定参数函数 有些情况我们不知道需要接收多少个参数,具体参数数量需要从传递的实参获得。这时我们就用到了不定参数,不定参数用 * 表示,我们看一下具体用法:
代码语言:javascript复制
# 定义一个菜单函数
def menu(*args):
  print("我点的菜有:")
  for arg in args:
    print(arg)

# 调用函数
menu('醋溜白菜','黄焖鸡','干锅牛蛙')

有时候我们及不知道要接受多少个参数,也不知道传递给函数的信息是什么样的,在这种情况下我们可以将函数的形参编写为任意键值对。任意键值对用 ** 表示,我们看一下用法

代码语言:javascript复制
# 定义姓名函数
def name_func(**args):
  name={}
  for key,value in args.items():
    name[key]=value
  return name

# 调用函数
name=name_func(first_name='托马斯',last_name='张')
print(name)
五、函数扩展

当我们编写的函数很多的时候,可以将同类型的函数存储进 .py 文件中,这个文件就被称为 模块 。当我们要使用这个文件中的函数只需要引入这个模块。我们假设模块名称为: name.py,模块里面包含函数:fun1fun2

  1. 导入整个模块
代码语言:javascript复制
import name
  1. 导入指定函数
代码语言:javascript复制
from name import fun1
  1. 导入所有函数
代码语言:javascript复制
from name import *
四、小结

本节主要讲了函数的一些知识,这些知识比较多,但大家需要记牢。

五、作业
  1. 定义一个无参函数,并返回值
  2. 定义一个参数数量不定的函数,并且函数包含两个形参
  3. 将上面两个函数保存在模块中,并导入这个模块中的函数。

0 人点赞