2023年9月28日·6 min read

Python计算机二级(四)

函数和代码复用

一、前言

看一下前面都学了些什么:

三、程序控制结构 1、程序的三种控制结构

2、程序的分支结构:单分支结构、二分支结构、多分支结构

3、程序的循环结构:遍历循环、无限循环、break和continue循环控制

4、程序的异常处理:try-except

各位可以再复习一下,再看正文前先过一遍脑子。不会的可以去看一下前面的:

Untitled

二、正文

看一下今天学什么:

四、函数和代码复用

1、函数的定义和使用;

2、函数的参数传递:可选参数传递、参数名称传递、函数的返回值;

3、变量的作用域:局部变量和全局变量。

1、函数的定义和使用

我们先来想一想我们在中学数学中学到的函数长什么样:

f(x) = y

即输入x通过f()来得到y。

程序里的函数也长这样。让我们来看一个例子:

def f(x):
    y = x+1
    return y

在这里,我定义了一个函数叫做 f(),形如:f(x) = x+1

其中,x为输入值,y为输出值。

所以我们就不难看出python函数的语法:

def(声明一个函数,就像一个记号) <函数名>(<输入值>[可写可不写]) :

而使用也很简单:

y = f(1)  # 当有 return 时
f(1)

注意:无论有没有参数,一定要有括号。你必须要以 x、y 的顺序设置。

def f():
    return 1
 
# 你必须要以 x、y 的顺序设置,例如:
def chu(x,y):
    return x/y
print(chu(1,2))
 
output:
0.5

2、函数的参数传递:可选参数传递、参数名称传递、函数的返回值

有可选必有必选。先讲一下必选参数。

必选参数:函数调用的时候必须传入的参数。例如:

def chu(x,y):
    return x/y
print(chu(1))
 
error:
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
d:\Untitled-1.ipynb Cell 9 in <cell line: 3>()
      1 def chu(x,y):
      2     return x/y
----> 3 print(chu(1))
 
TypeError: chu() missing 1 required positional argument: 'y'

必须要填上y。

可选参数传递:

默认参数**:在函数定义时,给参数一个默认值。调用该函数时可以不给有默认值的参数传值,这样调用时的参数可以减少。**

例如:

def f(x,y,z=1):
    return (x*y)**z
print(f(1,2))  # x,y 是必选参数,必须要写
print(f(1,2,2))  # z 是默认参数,可写可不写。不写时默认为 1

注意:默认参数必须在必选参数的后面,否则无法完成函数定义,Python会提示SyntaxError异常。

选读:

例如:

def add_end(L=[]):
    L.append('END')
    return L
print(add_end([1, 2, 3]))
print(add_end())
print(add_end())
 
output:
[1, 2, 3, 'END']
['END']
['END', 'END']

你们也看到了,最后L的值为['END', 'END']。这是因为L只生成一次,这个对象就一直存在。

参数名称传递:

eg:

def cs(a,b,c):
    print(a)
    print(b)
    print(c)
cs(a=1,b=2,c=3)
 
output:
1
2
3

函数的返回值:

在一开始我就讲过return,这里细讲。

返回0个值:

像这样:

def f(a, b, c, d, e, f):
    print("a={}".format(a))
    print("b={}".format(b))
    print("c={}".format(c))
    print("d={}".format(d))
    print("e={}".format(e))
    print("f={}".format(f))

没有return,于是不返回值。

返回多个值:

用return返回多个值的时候,多个值以元组类型保存。(元组类型可以理解成列表,只是这个列表里面的值不能被改变。这也是为什么采用元组的原因,因为数据不能被改变,就保护了数据的安全性。)

eg:

def s(a,b):
    return b,a
print(s(1,2),type(s(1,2)))
 
output:
(2, 1) <class 'tuple'>  # tuple 就是元组

3、变量的作用域:局部变量和全局变量

这个我在第一篇就讲过,现在再讲一遍吧。

定义在函数外部,模块内部的变量称为全局变量

定义在函数内部的变量称为局部变量

局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁

全局变量,所有函数都可以直接访问

eg:

a = 1 
def w():  # 这是一个函数
    c = a
print(c)
 
error:
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Untitled-1.ipynb Cell 3 in <cell line: 4>()
      2 def w():
      3     c = 1
----> 4 print(c)
 
NameError: name 'c' is not defined

a 是全局变量,而c是局部变量。

最后

现在,你已经学会了第四章的内容,你也离结业更进了一步。

看一下下一章的内容:

五、组合数据类型