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-stringPython3.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()替换子串(重复列,强调重要性)同上

写在最后

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值