python函数基础


一、函数目的

1、将重复使用的代码封装起来,提高代码复用性

2、将复杂任务分解为更小的模块,提高代码可读性

3、隐藏实现细节,只暴露接口给使用者

4、便于代码维护和修改

二、函数定义

使用 def 关键字定义函数,后跟函数名和参数列表,以冒号开头,缩进块为函数体。

def function_name():
    # 函数体
    return result

三、函数声明

def my_course():   # 定义一个名字为my_course的函数,因为没有调用,所以不会执行
    print(111)
 

在Python中,函数声明就是函数定义,没有单独的声明步骤。当使用def定义函数时,就同时完成了声明和定义。

四、 函数调用

通过函数名后跟括号和参数来调用函数。

def wake_up():
    print("醒醒啦!!!") 
wake_up()   # 醒醒啦!!!

五、函数形参

def wake_up(name):     # name 就是形参
    print(f"{name}醒醒啦!!!")
wake_up('小明')   # 小明醒醒啦!!!

六、 函数实参

实参(实际参数)是调用函数时传递给形参的值。

def my_course(name,n):
    for i in range(n):
        print(f"上课了!!! {name}")
my_course('小明',5)   #  实参即是'小明'和 5 ,打印五次上课了!!!小明

七、 函数返回值

使用 return 语句返回结果。若无 return,默认返回 None

def add(a, b):
    return a + b 
total = add(1,2)
print(total)   # 3


def add(a, b):
    total = a + b 
total = add(1,2)
print(total)   # None,因为没有返回任何东西,默认是None

八.、函数的参数类型

1、位置参数

按顺序匹配形参和实参

def add(a, b):
    return a + b 
total = add(1,2)    # 这里就是把实参1,2分别赋值给函数的形参a,b,实参和形参的位置对应
print(total)   # 3

2、关键字参数

在调用函数时通过 “参数名 = 值” 的形式来传递实参的写法

def greet(name, age):
    print(f"{name} is {age} years old.")


greet(name="CSDN", age=18)
greet(age=28, name="城市大脑")  # 顺序可以打乱


3、混用规则

位置参数必须在前,关键字参数必须在后!

def greet(name, age):
    print(f"{name} is {age} years old.")
greet("csdn", age=18)  #  合法
# greet(name="csdn", 18)      #  报错:SyntaxError

九、匿名函数

指的是一类无需定义标识符(函数名)的函数。在Python中,这种函数通常是通过使用lambda关键字来创建的,因此也被称为lambda函数。

匿名函数的基本语法:

lambda 参数列表: 表达式

lambda:关键字,用于定义匿名函数。

参数列表:与普通函数一样,用于传递参数,可以包含一个或多个参数,用逗号分隔。

表达式:匿名函数的主体,用于执行具体的操作。注意,lambda函数只能包含一个表达式,不能包含多个语句或复杂的逻辑。

# 使用匿名函数计算两个数的和
sum = lambda x, y: x + y
result = sum(3, 4)
print(result)  # 输出:7

# 使用匿名函数作为参数进行排序
numbers = [1, 3, 2, 5, 4]
sorted_numbers = sorted(numbers, key=lambda x: x)
print(sorted_numbers)  # 输出:[1, 2, 3, 4, 5]

# 使用匿名函数进行过滤
numbers = [1, 3, 2, 5, 4]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出:[2, 4]

十、闭包

1、什么是闭包

简单来说,闭包是指一个函数(通常称为内部函数)能够访问其外部函数(通常称为外部函数或父函数)作用域中变量的情况,即使外部函数已经执行完毕并返回了。这看起来有点像“打包”了外部函数的执行环境和内部函数本身。

2、闭包的构成要素:

1:必须有一个嵌套函数。
2:嵌套函数必须引用外部函数的变量。
3:外部函数必须返回嵌套函数。

def fun1():
    x = 10 # 外部函数定义了一个变量 x
    def fun2():
        y = 30
        print(x,y)   # 内部函数引用了外部函数的变量 x
    return fun2      # 外部函数返回内部函数本身,不加括号
r = fun1()           # r = fun2
r()                  # r加()调用函数fun2执行

3、闭包结合函数案例

def fun1(fun):
    pass
    def fun2():
        print(f"开始执行{fun.__name__}")   # 开始执行say
        fun()                             #  hello python
        print(f"执行结束{fun.__name__}")   #  执行结束say
    return fun2
def say():
    print("hello python")
r = fun1(say)
r()

4、闭包总结:

闭包是 Python 中一个强大而灵活的特性,它允许函数携带其创建时的环境信息。理解闭包有助于你更好地利用 Python 进行函数式编程、创建装饰器(Decorator)以及实现更复杂的设计模式。

十一、装饰器

装饰器是Python中一个强大而灵活的特性,它允许程序员在不修改函数代码的情况下,为函数添加额外的功能。装饰器本质上是一个接受函数作为参数的函数,并返回一个新的函数。

def decorator(fun):
    def wrapper():
        print("函数执行前可操作修改")
        fun()
        print("函数执行后做一些事情")
    return wrapper

@decorator
def say_hello():
    print("你好!")

装饰器实用的案例

# 编写装饰器统计使用冒泡排序与选择排序算出(1-1000内随机1000个)时间开销
import time
l1 = [random.randint(1,1000) for i in range(1000)]
l2 = l1.copy()
def time_cost(fun):
    def fun2():
        start = time.time()
        fun()
        end = time.time()
        print(f"{fun.__name__}排序的时间开销为:{end - start}")
    return fun2
@time_cost
def emerge():
    for i in range(1,len(l1)):
        for j in range(0,len(l1) - i ):
            if l1[j] > l1[j + 1]:
                temp = l1[j]
                l1[j] = l1[j + 1]
                l1[j + 1] = temp
    print(l1)
@time_cost
def choice_div():
    for i in range(len(l2) - 1):
        max_index = i
        for j in range(i + 1, len(l2)):
            if l2[j] < l2[max_index]:
                max_index = j
        l2[max_index], l2[i] = l2[i], l2[max_index]
    print(l2)
emerge()
choice_div()

十二、内置函数

1、基本类型转换函数

int()将字符串或数字转换为整数
float()将字符串或数字转换为浮点数
str()将对象转换为字符串
bool()将对象转换为布尔值
complex()创建复数
bytes()返回一个字节对象

2、数学运算函数

abs()返回绝对值
round()四舍五入
pow()幂运算
sum()求和
min()返回最小值
max()返回最大值

3、对象操作函数

len()返回对象长度
type()返回对象类型
id()返回对象的内存地址
isinstance()判断对象是否是某个类型
dir()返回对象的属性和方法
hasattr()判断对象是否有某个属性
getattr()获取对象属性值
setattr()设置对象属性值

4、输入输出函数

函数名作用
input()接收用户输入
print()输出内容到控制台

5、迭代与序列相关函数

函数名作用
range()生成整数序列
enumerate()枚举可迭代对象,返回索引和值
zip()打包多个可迭代对象
map()对可迭代对象中的每个元素应用函数
filter()过滤可迭代对象中符合条件的元素

总结

函数的主要目的在于提高代码的复用性和可维护性,避免重复编写相同的代码,让程序结构更加清晰;

函数定义是通过def关键字,后面跟着函数名和圆括号,括号内可以放置参数,然后是冒号和缩进的函数体,这样就把一段代码封装成了一个可重复使用的单元;

函数声明其实就是函数定义的过程,在Python中定义函数即完成了声明;

函数调用则是通过函数名后跟圆括号,括号内可以传入实际参数来执行函数体中的代码;

函数形参是在函数定义时括号内声明的参数,它们是形式上的占位符,而函数实参是在函数调用时传递给函数的实际值,形参和实参在数量、顺序和类型上要匹配;

函数返回值使用return语句来实现,它可以返回一个或多个值,如果没有return语句,函数默认返回None;

函数的参数类型有多种,包括位置参数、关键字参数、默认参数、可变位置参数(*args)和可变关键字参数(**kwargs),它们提供了灵活的参数传递方式;

匿名函数使用lambda关键字定义,它是一种轻量级的函数,通常用于需要一个简单函数的地方,且不需要正式定义函数名;

闭包是指一个函数内部定义了另一个函数,并且内部函数引用了外部函数的变量,这样外部函数的变量在内部函数中得以保存,即使外部函数已经执行完毕;

装饰器是一种特殊类型的闭包,它可以在不修改原函数代码的情况下,为函数添加额外的功能,通常用于日志记录、访问控制等场景;内置函数是Python自带的一系列函数,如print()、len()、max()等,它们可以直接使用,无需导入任何模块,大大提高了编程效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值