python语法 函数篇
1.函数定义
#def 定义一个函数
def caculator_BMI(weight,height):
BMI = float((weight / (height ** 2)))
print("你的BMI指数为:" + str(BMI))
if 28 > BMI > 25:
print("你的BMI属于偏胖范围")
elif BMI >= 28:
print("你的BMI属于偏胖范围")
elif BMI <= 18:
print("你的BMI属于偏廋范围")
elif 25 >= BMI > 18:
print("你的BMI属于正常范围")
caculator_BMI(74,1.73)
2.可变长形参
def func1(x, y, *z):
print(x, y, z)
func1(1, 2, 34, 6, 5)

# 求和功能
def sum(*args):
res = 0
for i in args:
res += i
return res
ans = sum(1, 2, 4, 5, 6, 7, 8)
print(ans)

# 可变长度的关键字形参
# 用法:**kwargs
#可以塞不同类型变量
def func1(x, y, **kwargs):
print(x, y, kwargs)
func1(1, y=2, c=3, name="zz", d=5)

def func(x, y, *args):
print(x, y, *args)
func(1, 2, *(1, 2, 34))

def func(x, y, **kwargs):
print(x, y, *kwargs)
func(**{'x': 5, 'y': 6, 'z': 9})

def func(*args, **kwargs):
print(kwargs)
print(args)
func()

3.装饰器
'''装饰器是Python语言中的一种高级语法,它可以在不改变原有代码的情况下,动态地为函数或者类添加功能。装饰器本质上是一个Python函数或类,它可以接受一个函数或类作为输入,并返回一个新的函数或类,这个新的函数或类通常会在原有功能的基础上增加一些额外的功能。
装饰器的实现原理是利用了Python中的闭包和函数对象特性。在Python中,函数和类都是一等公民,它们可以像普通变量一样被传递、赋值、作为参数和返回值。装饰器实际上就是一个函数,它接受一个函数作为参数,并返回一个新的函数。在返回的新函数中,我们可以添加一些额外的功能,如缓存函数、认证用户、记录日志、计时、权限验证等。然后再将这个新函数返回,从而实现对原有函数的装饰。
装饰器的语法使用`@`符号来表示,例如:
@decorator
def my_function():
pass
这里的`@decorator`就是装饰器语法,它告诉Python解释器在调用`my_function`之前,先调用`decorator`函数。装饰器函数通常会接收被装饰的函数作为参数,然后返回一个新的函数,这个新函数会在执行原有函数之前或之后执行一些额外的代码。
装饰器可以用于多种场景,如日志记录、计时器、缓存、权限/身份验证、错误处理等。它们使得代码更加简洁、优雅,并且提高了代码的复用性和可维护性。
除了基本的装饰器语法外,还有一些高阶的用法,如带参数的装饰器、类装饰器、多装饰器嵌套等,这些高级用法可以让装饰器更加灵活和强大。例如,带参数的装饰器允许我们给装饰器传递一些参数,比如日志的级别、缓存的大小等;而类装饰器则是使用类来实现装饰器功能,它们接受的参数是一个类,而不是一个函数。
在实际开发中,我们可以根据具体的需求来选择合适的装饰器,并使用高阶用法来实现更加灵活和强大的功能。
'''
import functools
# def square(x):
# return x*x
#
# def print_running(f,x):
# print(f'{f.__name__} is running')
# return f(x)
#
#
# ret=print_running(square,2)
"""
在Python中,*args和**kwargs是用于处理可变数量参数的语法。
*args用于接收任意数量的非关键字参数(位置参数),
**kwargs用于接收任意数量的关键字参数。这两种语法允许函数接受不确定数量的参数,增强了函数的灵活性。
"""
import time
#做一个判断函数运行时间的装饰器
# def decorator(func):
# def wrapper(*args,**kwargs):#包装器
# start_time=time.time()
# result=func(*args,**kwargs)
# print(f'{func.__name__} is running')
# end_time=time.time()
# print(f'{func.__name__} execution time: {end_time-start_time}')
# return result
# return wrapper
#
# decorator_square=decorator(square)
# decorator_square(100343244234423423)
"""装饰器生成器是一种在Python中用于创建装饰器的函数,它允许你根据不同的参数来生成不同的装饰器"""
#定义一个装饰器生成器
def timer(threshold):
def decorator(func):
@functools.wraps(func)#加上这个语句,输出的就是传进来的函数名,而不是wrapper
def wrapper(*args,**kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
if end_time - start_time>threshold:
print(f'{func.__name__} took longer than {threshold}')
return result
return wrapper
return decorator
@timer(0.2)
def sleep_04():
time.sleep(0.4)
# sleep_04=timer(0.2)(sleep_04)
sleep_04()
3.三元表达式
x=6
y=9
res= x if x>y else y
print(res)

4.语法糖
import time
def count_time(func):
def wrapper(*args,**kwargs):
start=time.time()
func(*args,*kwargs)
end=time.time()
print(end-start)
return wrapper
@count_time
def inside(group,s,z):
print(f'欢迎来到王者荣耀')
print(f"你出生在{group}方阵营")
print(f"敌军还有{s}秒到达战场")
time.sleep(s)
print(f"{z}出击")
inside('蓝方',3,'炮车')

5.列表生成式
l=['ty_老坛酸菜','ksf_老坛酸菜','djy_老坛酸菜','bx']
new_l=list(name for name in l if name.endswith("老坛酸菜"))
new_l2=[name for name in l if name.endswith("老坛酸菜")]
print(l)
print(new_l)
print(new_l2)

6.字典生成式
l=[("康师傅_老坛酸菜",5),("统一_老坛酸菜",6),("大今野_老坛酸菜",7)]
res = {k:v for k,v in l if not k.startswith('康师傅')}
print(res)

7.生成器
def func(x):
print(f'{x}开始执行')
while 1:
y = yield None
print('\n',x,y,'\n')
g=func(1)
g.send(None)
for i in range(100):
g.send(i)

后面就是依次剩下的数字
8.闭包函数
def f1(x):
def f2():
print(x)
return f2
res=f1(10)
res()

python语法 函数篇的更多相关文章
- Python基础-函数篇
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 函数与函数式编程 1.面向对象: 华山派-- ...
- Python之函数篇
函数形参 函数取得的参数是你提供给函数的值,这样函数就可以利用这些值 做 一些事情.这些参数就像变量一样,只不过它们的值是在我们调用函数的时候定义的,而非在函数本身内赋值. 参数在函数定义的圆括号对内 ...
- python之函数篇3
一:函数的定义 1)函数的简单使用,无参函数 def f1(): # 定义函数指定函数名 print("hello") # 指定功能 f1() # 调用函数,才能执行函数体里面的功 ...
- [python][oldboy][函数篇][1]名称空间
名称空间:存储名字的空间,分为三种,内置空间,全局空间,局部空间 名称可以是:变量名,函数名,类名等 当遇到一个名字时,首先在自己空间找,再到自己外的空间找 比如 test.py print f # ...
- Python函数篇:装饰器
装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理. ...
- Python函数篇(5)-装饰器及实例讲解
1.装饰器的概念 装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式 装饰器可以简单的理 ...
- Python函数篇(7)-正则表达式
1.正则表达式 正则表达式为高级的文本模式匹配,抽取,与/或文本形式的搜索和替换功能提供了基础,简单的来说,正则表达式是由一些字符和特殊符号组成的字符串.Python通过标准库中的re模块来支持正 ...
- python语法(五)—函数
前面几天学习了python的基础语法,判断,循环,以及文件操作等等内容,对python也是有了一个认识.今天开始学习python的函数和模块. 函数 函数是什么?我的理解就是,他和java中的方法是一 ...
- Python基础复习函数篇
目录 1.猴子补丁2. global和nonlocal关键字3.迭代器和生成器4.递归函数5.高阶函数和lamdba函数6.闭包7.装饰器 1. 猴子补丁 猴子补丁主要用于在不修改已有代码情况下修 ...
- python学习总结篇(2)——函数
如其他语言一样,除了基本知识外,另外一个重要的板块就是函数了,python中也有函数. 在python中,函数的定义方式为: def 函数名( ): 下面通过几个简单的例子,看看python中的函 ...
随机推荐
- 操作系统 -- Cache和内存
程序局部原理性 CPU大多数时间在执行相同的指令或者与此相邻的指令,这就是程序局部性原理,依据此原理用来缓解CPU和内存之间的性能瓶颈. 内存 内存,从专业角度来讲,内存应该叫做DRAM,即动态随机存 ...
- 利用DeepSeek与Python自动生成测试用例!
在当今快节奏的软件开发领域,自动化测试已然成为保障软件质量的中流砥柱.传统手动编写测试用例的方式,非但耗时费力,还极易遗漏关键场景. 所幸,AI 技术的飞速发展为我们带来了全新的解决方案.今天,就让我 ...
- Linux常用命令介绍-文件管理
MV命令 - 移动或改名文件 mv命令来自英文单词move的缩写,中文译为"移动",其功能与英文含义相同,能够对文件进行剪切和重命名操作.这是一个被高频使用的文件管理命令,需要留意 ...
- FastAPI安全门神:OAuth2PasswordBearer的奇妙冒险
title: FastAPI安全门神:OAuth2PasswordBearer的奇妙冒险 date: 2025/05/30 18:34:14 updated: 2025/05/30 18:34:14 ...
- 关于家庭宽带IPv6的开启、绑定域名、使用教程等
前言 好几年前网上就很多讨论家庭宽带支持IPv6,能怎么怎么改变生活.带来多少便利,奈何之前租的房子是房东办好的宽带,我没有权限接触到光猫,自己也一直懒得研究这个新鲜事物,前阵子自己捣鼓了一下,还是得 ...
- 一种更简单的方式运行 C# 代码,简化 C# 开发体验!
前言 前段时间 .NET 10 Preview 4 推出了一种更简单的方式运行 C# 代码,即可以直接使用dotnet run file.cs 命令运行 C# 文件.这意味着我们不再需要创建项目文件或 ...
- prometheus表达式常用公式
1. _over_time() 下面的函数列表允许传入一个区间向量,它们会聚合每个时间序列的范围,并返回一个瞬时向量 avg_over_time(range-vector) : 区间向量内每个度量指标 ...
- AI Chat 智能聊天工具,支持DeepSeek 、Gemini、Grok、OpenAI和自定义AI
AI Chat [中文]|[English] AI Chat 是一个智能聊天工具,支持DeepSeek .Gemini.Grok.OpenAI和自定义AI,使用SwiftUI.SwiftData开发, ...
- Java源码分析系列笔记-18.Semaphore
目录 1. 是什么 2. 原理分析 2.1. uml 3. 公平信号量 3.1. 是什么 3.2. 使用 3.3. 原理分析 3.3.1. 构造方法 3.3.1.1. 公平Sync 3.3.2. ac ...
- .NET程序员的多语言笔记本:Polyglot Notebook
大家好,我是Edison. 之前在学习机器学习的时候,使用了Jupyter Notebook这个笔记本工具,我就在想.NET这边有没有类似的,今天就跟你介绍下Polyglot Notebook这个工具 ...