Python入门--函数

目录

[1. 函数介绍](#1. 函数介绍)

[2. 函数的定义](#2. 函数的定义)

[3. 函数的参数](#3. 函数的参数)

[4. 函数的返回值](#4. 函数的返回值)

[5. 函数说明文档](#5. 函数说明文档)

[6. 函数的嵌套调用](#6. 函数的嵌套调用)

[7. 函数的作用域](#7. 函数的作用域)

[(1). 局部变量](#(1). 局部变量)

[(2). 全局变量](#(2). 全局变量)

[(3). global关键字](#(3). global关键字)


1. 函数介绍

函数:是组织好的,可重复使用的,用来实现特定功能的代码段。

python 复制代码
name = "CCZU"
print(len(name))

为什么随时都可以使用len()统计长度呢?因为,len()是Python内置的函数,这是提前写好的,可以被重复利用,专门用来统计字符串长度这一功能。我们使用过的:input()、print()、str()、int()等都是Python的内置函数。

如果库里没有设置这一内置函数,我们在每次想用这个功能的时候,就要实现下面这好几行代码。

python 复制代码
str = "string"
length = 0
for i in str:
    length+=1
print(length)

像这种需要经常复用的功能,为了降低代码的重复,Python已经贴心的为大家写好了,想用的时候直接找到对应功能的函数使用即可,这就是将这个功能封装成了函数。

python 复制代码
def my_len(str):
    length = 0
    for i in str:
        length += 1
    print(length)

# 每次使用的时候直接调用即可
my_len("hello")
my_len("what")
my_len("please")

那我们下面来学习一下怎么将这些频繁使用的代码封装成函数。

2. 函数的定义

注意:

① 参数如不需要,可以省略

② 返回值如不需要,可以省略

③ 函数必须先定义后使用

函数定义之后,想使用定义的函数就要调用,根绝我们的定义来决定怎么调用。有返回值就要用变量来接收,有参数一定要传参数。

python 复制代码
def say_hi():
    print("hi")
# 调用函数
say_hi()

3. 函数的参数

传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据。

比如我们要实现一个将两个数相加的功能函数,那我们肯定要让这个函数知道需要哪两个数相加,参数大家可以理解为参考的数据。也就是说这个相加的函数想知道自己要让哪些数加起来,就参考我们传的这些参数。

python 复制代码
def add(x,y):
    print(x+y)
  • 函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数
  • 参数之间使用逗号进行分隔
  • 函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值
  • 传入的时候,按照顺序传入数据,使用逗号分隔

最后一点大家要尤其注意,因为如果这个功能是实现两个数相除的,那么1/2和2/1可是完全不一样的两个结果。

4. 函数的返回值

如果我们想在调用函数的时候用一个变量接收函数调用后的结果,这个时候需要给函数加上返回值。

python 复制代码
def add(x,y):
    return x+y

result = add(1,2)
print(result)

函数体在遇到return后就结束了,所以写在return后的代码不会执行。

如果函数没有使用return语句返回数据,那么函数实际上也是有返回值的。Python中有一个特殊的字面量:None,其类型是:<class 'NoneType'>。无返回值的函数,实际上就是返回了None这个字面量。

None表示:空的、无实际意义的意思。函数返回的None,就表示这个函数没有返回什么有意义的内容,也就是返回了空的意思。

python 复制代码
def say_he11o():
    print("He11o...")
    
# 使用变量接收say_he11o函数的返回值
result = say_he11o()
# 打印返回值
print(result) # 结果None

# 打印返回值类型
print(type(result)) # 结果<cass'NoneType'>

None也可以主动使用return返回,效果等同于不写return语句。

None作为一个特殊的字面量,用于表示:空、无意义,其有非常多的应用场景。

  • 用在函数无返回值上
  • 用在if判断上:if判断中,None等同于****False一般用于在函数中主动返回None,配合if判断做相关****处理
python 复制代码
def check_age(age):
    if age > 18:
        return "success"
    return None

result = check_age(5)
if not result:
    # 进入if表明result是None值,也就是False
    print("未成年,不可进入")
  • 用于声明无内容的变量上:定义变量,但暂时不需要变量有具体值,可以用None来代替
python 复制代码
name = None

5. 函数说明文档

函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。我们可以给函数通过多行注释的形式添加说明文档,辅助理解函数的作用。我们在函数体之前写上函数参数表示什么,返回值什么,函数功能是什么。

python 复制代码
def add(x, y):
    """
    add函数可以接收2个参数,进行2数相加的功能

    :param x: 形参x表示相加的其中一个数字
    :param y: 形参y表示相加的另一个数字
    :return: 返回值是2数相加的结果

    """
    result = x + y
    print(f"2数相加的结果是: {result}")
    return result

6. 函数的嵌套调用

所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数。

python 复制代码
# 定义函数func_b
def func_b():
    print("---2---")

# 定义函数func_a,并在内部调用func_b
def func_a():
    print("---1---")
    # 嵌套调用func_b
    func_b()
    print("---3---")

# 调用函数func_a
func_a()

如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次函数A执行的位置。

7. 函数的作用域

变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)。主要分为两类:局部变量和全局变量。

(1). 局部变量

局部变量是定义在函数体内部的变量,即只在函数体内部生效。

python 复制代码
def testA():
    num = 100
    print(num)
    
testA() # 100

print(num) # 报错:name 'num'is not defined

变量a是定义在`testA`函数内部的变量,在函数外部访问则立即报错。

局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。

(2). 全局变量

所谓全局变量,指的是在函数体内、外都能生效的变量。

如果有一个数据,在函数A和函数B中都要使用,就要将这个数据存储在一个全局变量里面,也就是定义在函数的外面。

python 复制代码
# 定义全局变量a
num = 100

# 定义函数testA,并访问全局变量num
def testA():
    print(num)

# 定义函数testB,并访问全局变量num
def testB():
    print(num)

testA() # 100
testB() # 100
print(num) # 100

(3). global关键字

如果我们想要在函数内部对全局变量的值进行修改,修改的值仅在函数体内部有效。

python 复制代码
# 定义全局变量a
num = 100

# 定义函数testA,并访问变量num
def testA():
    print(num)

# 定义函数testB,并访问变量num
def testB():
    num = 300
    print(num)

testA() # 100
testB() # 300
print(num) # 100

这是因为testB里num=300实际上是testB自己又重新定义了一个num的局部对象,跟全局变量num已经不是同一个东西了。为了让这个局部变量num变回全局变量,我们引入了global关键字。

python 复制代码
# 定义全局变量a
num = 100

# 定义函数testA,并访问全局变量num
def testA():
    print(num)

# 定义函数testB,并访问全局变量num
def testB():
    # global关键字用于将变量声明为全局变量
    global num
    num = 300
    print(num)

testA() # 100
testB() # 300
print(num) # 300
相关推荐
龙哥说跨境12 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
Source.Liu12 分钟前
【用Rust写CAD】第二章 第四节 函数
开发语言·rust
monkey_meng12 分钟前
【Rust中的迭代器】
开发语言·后端·rust
余衫马15 分钟前
Rust-Trait 特征编程
开发语言·后端·rust
monkey_meng19 分钟前
【Rust中多线程同步机制】
开发语言·redis·后端·rust
Jacob程序员21 分钟前
java导出word文件(手绘)
java·开发语言·word
小白学大数据27 分钟前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman91129 分钟前
python在word中插入图片
python·microsoft·自动化·word
VBA633729 分钟前
VBA之Word应用第三章第三节:打开文档,并将文档分配给变量
开发语言
半盏茶香30 分钟前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏