python基础 Day3

本文介绍了Python中的函数基础知识,包括阶乘函数的实现、可变参数的使用以及命名空间和导入模块的方法。深入探讨了关键词传参、强制关键词传参以及如何处理未知数量的参数。还提到了装饰器的概念,展示了如何使用装饰器来记录函数执行时间,避免代码重复。最后简单提及了递归的基本应用。
部署运行你感兴趣的模型镜像

函数基础

这一部分没啥新内容,阶乘例子:

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')

如果正常写,需要在不同函数中都写上记录时间的语句,重复太多了

还有一些小应用,语法糖之类的,不拓展了

递归

这部分大概也没什么新东西,递归属于用烂的东西了

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值