Python 用函数实现代码复用

认识 Python 的函数

函数是一段具有特定功能的、可重复使用的代码块,它能够提高程序的模块化和代码的复用率。一个较大的程序,通常需要合理的划分程序中的功能模块,功能模块在程序设计语言中被称为函数。

使用函数有两个目的:

  • 分解问题,将一个大问题或者大功能分解成多个小问题,降低编程难度,使问题更容易解决
  • 避免编写重复代码

1、函数的定义和调用

在 Python 中,使用 def 关键字来定义函数,而函数调用通过调用语句来实现,调用语句所在的程序或函数称为调用程序或调用函数。

# 函数的定义和声明

# 函数的定义
def print_line():
    print("**************************")

def print_text():
    print("这是一句话 ")

# 函数的调用
print_line()
print_text()
print_line()

# 输出:
# **************************
# 这是一句话 
# **************************

2、函数的参数和返回值

在 Python 中,参数的类型很多,有形式参数(形参),实际参数(实参),必备参数、关键字参数、默认参数、不定长参数。

- 形参和实参

形参: 使用 def 语句来定义函数时,函数名后面的圆括号中的参数就是形式参数(形参)。形参只能是变量,只有函数被调用时才分配内存单元,调用结束时释放所分配的内存单元。

实参: 调用函数时,函数名后面的圆括号中的参数。实参可以是常量、变量、表达式,在实施函数调用时,实参必须有确定的值。

示例如下:

# 使用 max() 函数,求两个数中值较大的数

def max(a,b):
    if a > b:
        return a
    else:
        return b
    
x = int(input("输入数字a = "))
y = int(input("输入数字b = "))
z = max(x,y)       # 调用函数

print("较大的数为:",z)

# 输出:
# 输入数字a = 3
# 输入数字b = 6
# 较大的数为: 6

在这个例子中,max() 函数括号内的 a,b 就是该函数的形参,而调用该函数时,括号内的 x 和 y 则是传递给该函数的实参。

- 必备参数

必备参数须以正确的顺序传入函数,调用函数时,输入的实参和形参的顺序要一致,实参数量必须和声明函数时形参的数量一样,不然会出现语法错误。

示例如下:

# 必备参数

def print_text(x,y):
    print(x,y)

print_text("Hello","World")
print_text("Hello")          # 会报错


# 输出:
# Hello World
# Traceback (most recent call last):
#   File "c:\Gitee\python\03_Day\03_function.py", line 7, in <module>
#     print_text("Hello")          # 会报错
# TypeError: print_text() missing 1 required positional argument: 'y'

- 关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序和声明不一致,因为 Python 解释器能够用参数名匹配参数值。

示例代码如下:

# 关键字参数

def fun(discount,price):            # 定义函数
    print("商品折扣:",discount)
    print("商品价格:",price)
    return

fun(price= 100,discount= 0.5)       # 关键字参数传递


# 输出:
# 商品折扣: 0.5
# 商品价格: 100

- 默认参数

在定义函数时,可以为函数的某个形参赋予默认值,这个参数被称为默认值参数。带有默认值参数的函数示例如下:

# 默认值参数

def fun(discount,price = 100):
    print("商品折扣:",discount)
    print("商品价格:",price)
    return
fun(0.5)

# 输出:
# 商品折扣: 0.5
# 商品价格: 100

在调用 fun() 函数时,只输入一个实参值。从结果知道,尽管实参没有输入具体值,price 仍然会按定义时的默认值输出。

值得注意的是:在定义有默认值参数的函数时,只能将默认值赋给最右端的参数,否则会出现语法错误。

def fun(discount = 0.5,price):
    print("商品折扣:",discount)
    print("商品价格:",price)
    return
fun(100)

# 输出:
#   File "c:\Gitee\python\03_Day\05_function.py", line 3
#     def fun(discount = 0.5,price):
#                            ^^^^^
# SyntaxError: non-default argument follows default argument

- 不定长参数

在使用函数时,若希望一个函数能够处理比定义时更多的参数,即参数数量是可变的,那么可以在函数中使用不定长参数。与上面几种参数相区别的是,不定长参数在声明时,形参不会命名。

在函数的第一行参数列表最右侧增加一个带有 * 的参数,基本语法格式为:

def 函数名([形参列表,] * args):
    函数体

其中,* args 用来接收任意多个实参并将其放在一个元祖(tuple)中供函数使用。

# 不定长参数
def f(x, y, * args):
    print(x)
    print(y)
    print(args)

f(10,9,8,7,6,5,4,3,2,1)

# 输出:
# 10
# 9
# (8, 7, 6, 5, 4, 3, 2, 1)

不懂怎么应用,多余的参数都被 args 接收,后面用到了详解

- 函数的返回值

在 Python 中,函数使用 return 语句返回值,选择性地向调用方返回一个表达式。return 语句用来退出函数并将程序返回到函数被调用的位置继续执行,可以返回0个,1个或一组值。函数返回的值被称为返回值,基本语法结构为:

return [返回值列表]

其中,return 语句可以在函数体的任何位置出现,return 语句是可选的,如果有 return 语句,但是 return 后面没有接表达式或者值的,则返回 None;如果没有 return 语句,则会自动返回 None。

# 函数的返回值

def fun(discount,price):
    price = price * discount
    print("商品折扣:",discount)
    print("商品价格:",price)
    return price;

price = fun(0.5,100)

# 输出:
# 商品折扣: 0.5
# 商品价格: 50.0

3、递归函数

Python 支持函数的递归调用,所谓递归就是自己函数直接或间接的调用其本身。

举个例子:

# 递归:在纸上执行遍就懂了

def f(n):
    if n == 1:
        return 1
    else:
        return f(n-1)*n     # 先是调用自己,全部完成后逐步 返回值
    
n = int(input("请输入一个正整数:"))
print(n,"的阶乘为:",f(n))

# 输出:
# 请输入一个正整数:3
# 3 的阶乘为: 6

image-20251211171058363

4、匿名函数

lambda 函数用于定义简单的、能够一行内表示的函数。

示例如下:

sum = lambda arg1,arg2:arg1 + arg2;
print("total:",sum(20,50))

# 输出:
# 70

5、变量的作用域

变量的作用域就是变量的使用范围,程序的运行离不开变量。

一个程序的所有变量并不是在哪个位置都可以访问的,访问权限取决于这个变量是在哪里赋值。

在 Python 中,根据变量的作用域的不同,分成 全局变量局部变量 。定义在函数内的变量,只能在函数内部使用,作用范围仅在函数内部的变量,称为局部变量。在函数之外定义的变量称为全局变量,全局变量在整个程序内起作用。

示例如下:

# 变量的作用域

price = 200
def fun(discount,price):
    price = price * discount
    print("函数内局部变量价格为:",price)
    return price
fun(0.5,200)
print("函数外全局变量价格为:",price)


# 输出:
# 函数内局部变量价格为: 100.0
# 函数外全局变量价格为: 200

6、Python 内置函数常用归纳表

- Python 内置函数表
分类 函数名 功能说明 简单示例
基础输入输出 print() 输出内容到控制台,支持字符串格式化 print("姓名:%s" % "Tom") → 姓名:Tom
input() 从控制台获取用户输入,返回字符串类型 age = input("请输入年龄:") → 接收字符串输入
类型转换 str() 将其他类型转换为字符串(核心) str(123.45) → "123.45";str(True) → "True"
int() 将数字字符串转换为整数 int("100") → 100
float() 将数字字符串转换为浮点数 float("3.14") → 3.14
bytes() 将字符串转换为字节对象(指定编码) bytes("Python", encoding="utf-8") → b'Python'
list() 将字符串拆分为字符列表 list("abc") → ["a", "b", "c"]
序列/集合操作 len() 计算字符串长度(最常用) len("Hello Python") → 11
sorted() 对字符串字符按Unicode排序,返回列表 sorted("bac") → ["a", "b", "c"]
enumerate() 遍历字符串的索引和字符 for i, c in enumerate("ab"): print(i, c) → 0 a、1 b
字符串专用内置函数 ord() 将单个字符转换为对应的Unicode编码值 ord("A") → 65;ord("中") → 20013
chr() 将Unicode编码值转换为对应的字符 chr(65) → "A";chr(20013) → "中"
ascii() 返回对象的ASCII表示,非ASCII字符用\u/\U转义 ascii("中") → "'\u4e2d'"
format() 内置格式化函数(与字符串format()方法功能一致) format(3.1415, ".2f") → "3.14"
数学计算 max() 获取字符串中字符的最大Unicode值 max("abc") → "c"
min() 获取字符串中字符的最小Unicode值 min("abc") → "a"
对象判断与标识 type() 判断对象是否为字符串类型 type("abc")<class 'str'>
isinstance() 判断对象是否为字符串实例 isinstance("abc", str) → True
文件操作 open() 读取/写入字符串到文件(指定编码) with open("test.txt", "w", encoding="utf-8") as f: f.write("测试")
其他常用 eval() 执行字符串中的Python表达式(慎用,避免安全风险) eval("'a'+'b'") → "ab"
repr() 返回对象的官方字符串表示(保留原始格式) repr("abc\n") → "'abc\n'"(区别于str()的直观表示)

- 常用字符串方法表
方法名 功能说明 简单示例
strip() 去除字符串首尾的空白字符(空格、换行、制表符),可指定去除的字符 " abc \n".strip() → "abc";"###abc###".strip("#") → "abc"
lstrip() 去除字符串左侧的空白字符或指定字符 " abc".lstrip() → "abc"
rstrip() 去除字符串右侧的空白字符或指定字符 "abc ".rstrip() → "abc"
split() 按指定分隔符拆分字符串为列表,默认按空白字符拆分 "a,b,c".split(",") → ["a","b","c"];"a b c".split() → ["a","b","c"]
join() 将可迭代对象(列表、元组)的字符串元素用指定分隔符连接为一个字符串 ",".join(["a","b","c"]) → "a,b,c"
replace() 将字符串中的指定子串替换为新子串,可指定替换次数 "abac".replace("a", "x") → "xbxc";"abac".replace("a", "x", 1) → "xbac"
lower() 将字符串所有字符转为小写 "Python".lower() → "python"
upper() 将字符串所有字符转为大写 "Python".upper() → "PYTHON"
startswith() 判断字符串是否以指定子串开头(支持指定起始/结束位置) "Python".startswith("Py") → True;"Python".startswith("th", 2) → True
endswith() 判断字符串是否以指定子串结尾(支持指定起始/结束位置) "Python".endswith("on") → True
find() 查找子串在字符串中的首次出现位置,找不到返回-1(比index()更安全) "abcabc".find("bc") → 1;"abc".find("d") → -1
index() 查找子串的首次出现位置,找不到抛出ValueError "abcabc".index("bc") → 1
count() 统计子串在字符串中出现的次数 "abac".count("a") → 2
splitlines() 按换行符拆分字符串为列表(处理多行文本) "a\nb\nc".splitlines() → ["a","b","c"]
format() 字符串格式化(替代%格式化,更灵活) "姓名:{},年龄:{}".format("Tom", 18) → "姓名:Tom,年龄:18"
f-string Python3.6+ 特性,字符串前缀f,直接嵌入变量(最简洁的格式化方式) name="Tom"; f"姓名:{name}" → "姓名:Tom"
isdigit() 判断字符串是否全为数字字符(0-9) "123".isdigit() → True;"123a".isdigit() → False
isalpha() 判断字符串是否全为字母字符 "abc".isalpha() → True;"abc123".isalpha() → False
isspace() 判断字符串是否全为空白字符 " \n\t".isspace() → True
capitalize() 将字符串首字符转为大写,其余转为小写 "python".capitalize() → "Python"
title() 将字符串每个单词的首字符转为大写 "hello world".title() → "Hello World"
center() 将字符串居中,指定总长度,填充指定字符(默认空格) "abc".center(5, "-") → "-abc-"
zfill() 字符串左侧补0,达到指定长度(常用于数字格式化) "123".zfill(5) → "00123"
replace() 替换子串(重复列,强调重要性) 同上

写在最后

内置函数比较多,记住常用的就行

posted @ 2025-12-11 17:37  Q&25  阅读(4)  评论(0)    收藏  举报