函数基础
这一部分没啥新内容,阶乘例子:
def fac(num):
ans = 1
for x in range(1, num+1, 1)
ans *= x
return ans
有个新地方是可以接收多个参数,大概叫可变参数(加个星号
def sum(*num):
ans = 0
for x in num:
ans += x
return ans
print(sum(1, 2, 3, 4))
在解决命名冲突时,可以将同名函数写到不同文件中,再import导入
as可以用来给模块别名
import module1
import module2 as m2
module1.sum()
m2.sum()
还可以直接从模块中导入需要的函数
from module1 import sum
sum()
一些进阶用法
关键词传参
使用关键词传参的话可以不按顺序,或者加 * 使在后面的参数必须按关键词传参
def is_triangle(a, b, c):
print(f'a = {a}, b = {b}, c = {c}')
return a + b > c and b + c > a and a + c > b
# 调用函数传入参数不指定参数名按位置对号入座
print(is_triangle(1, 2, 3))
# 调用函数通过“参数名=参数值”的形式按顺序传入参数
print(is_triangle(a=1, b=2, c=3))
# 调用函数通过“参数名=参数值”的形式不按顺序传入参数
print(is_triangle(c=3, a=1, b=2))
def is_triangle(*, a, b, c):
print(f'a = {a}, b = {b}, c = {c}')
return a + b > c and b + c > a and a + c > b
# TypeError: is_triangle() takes 0 positional arguments but 3 were given
# print(is_triangle(3, 4, 5))
# 传参时必须使用“参数名=参数值”的方式,位置不重要
print(is_triangle(a=3, b=4, c=5))
print(is_triangle(c=5, b=4, a=3))
或者使用 可变参数 + 关键词传参 ,在既不知道会传入的参数个数,也不知道会不会指定参数名的情况下。
关键字参数会将传入的带参数名的参数组装成一个字典,参数名就是字典中键值对的键,而参数值就是字典中键值对的值。
这里没怎么看。。。大概先cv一下代码
def calc(*args, **kwargs):
result = 0
for arg in args:
if type(arg) in (int, float):
result += arg
for value in kwargs.values():
if type(value) in (int, float):
result += value
return result
print(calc()) # 0
print(calc(1, 2, 3)) # 6
print(calc(a=1, b=2, c=3)) # 6
print(calc(1, 2, c=3, d=4)) # 10
Lambda函数
参数和返回值比较简单,一行代码解决的函数,又称匿名函数
先不管了,,
装饰器
用一个函数装饰另外一个函数或类并为其提供额外功能
比方说要记录一个函数运行的时间,可以这样弄
import time
# 定义装饰器函数,它的参数是被装饰的函数或类
def record_time(func):
# 定义一个带装饰功能(记录被装饰函数的执行时间)的函数
# 因为不知道被装饰的函数有怎样的参数所以使用*args和**kwargs接收所有参数
# 在Python中函数可以嵌套的定义(函数中可以再定义函数)
def wrapper(*args, **kwargs):
# 在执行被装饰的函数之前记录开始时间
start = time.time()
# 执行被装饰的函数并获取返回值
result = func(*args, **kwargs)
# 在执行被装饰的函数之后记录结束时间
end = time.time()
# 计算和显示被装饰函数的执行时间
print(f'{func.__name__}执行时间: {end - start:.3f}秒')
# 返回被装饰函数的返回值(装饰器通常不会改变被装饰函数的执行结果)
return result
# 返回带装饰功能的wrapper函数
return wrapper
download = record_time(download)
upload = record_time(upload)
download('MySQL从删库到跑路.avi')
upload('Python从入门到住院.pdf')
如果正常写,需要在不同函数中都写上记录时间的语句,重复太多了
还有一些小应用,语法糖之类的,不拓展了
递归
这部分大概也没什么新东西,递归属于用烂的东西了
本文介绍了Python中的函数基础知识,包括阶乘函数的实现、可变参数的使用以及命名空间和导入模块的方法。深入探讨了关键词传参、强制关键词传参以及如何处理未知数量的参数。还提到了装饰器的概念,展示了如何使用装饰器来记录函数执行时间,避免代码重复。最后简单提及了递归的基本应用。
9666

被折叠的 条评论
为什么被折叠?



