Python 语法基础 函数

文章目录

    • [一 定义与调用](#一 定义与调用)
    • [二 返回值](#二 返回值)
    • [三 参数](#三 参数)
    • [四 嵌套声明](#四 嵌套声明)
    • [五 函数内部修改全局变量 在函数内部声明全局变量](#五 函数内部修改全局变量 在函数内部声明全局变量)
    • [六 lambda表达式](#六 lambda表达式)
    • [七 常用内置函数](#七 常用内置函数)
    • [八 拆包](#八 拆包)

一 定义与调用

csharp 复制代码
#单返回值
def MyFunction():
    print("Hello World")
print(MyFunction())#必须先定义再调用

二 返回值

csharp 复制代码
#单返回值
def MyFunction():
    return 1 #返回值直接写,不用在函数名前写
print(MyFunction())

#多返回值
def MyFunction():
    return 1,"蜜雪冰城"
print(MyFunction())#输出(1, '蜜雪冰城')#返回一个元组

#有renturn 单无返回值将返回None

三 参数

必备参数

也叫位置参数,就是普通的参数

csharp 复制代码
def MyFunction(a,b):
    return a+b
print(MyFunction(1,2))#输出3

默认参数

就是普通的默认参数

csharp 复制代码
def MyFunction(a,b,c=1):
    return c
print(MyFunction(1,2))#输出1

可变参数

在参数名前加上*就变成了可变参数,可变参数名是什么都可以,约定可变参数名都是args

可变参数以元组形式传入方法内部

可变参数必须定义在必选参数后边

csharp 复制代码
def MyFunction(*args):
    print(args)
MyFunction(1,2)#输出(1, 2)

关键字参数

会把参数如的内容变成一个字典

必须放在必选参数后边

csharp 复制代码
def MyFunction(**kwargs):
    print(kwargs)
MyFunction(name="wuzi",age=18)#输出{'name': 'wuzi', 'age': 18}

四 嵌套声明

在一个函数内部可以定义另一个函数,内部函数只能在外部函数的作用域内调用

csharp 复制代码
def MyFunction():
    def InnerFunction():
        print("Inner function")
    InnerFunction()

MyFunction()#输出Inner function

五 函数内部修改全局变量 在函数内部声明全局变量

使用global关键字

csharp 复制代码
a=1
def MyFunction():
    global a #a是一个全局变量,如果a不是全局变量 加上global可以把a从局部变量变成全局变量
    a=2
    print(a)
MyFunction()#输出2

六 lambda表达式

格式 函数名=lambada 参数:返回值

lambda表达式可以使用普通方法的默认参数,可变参数,关键字参数

csharp 复制代码
#不需要return,冒号后的表达式结果自动作为返回值
AddMy=lambda a,b:a+b
print(AddMy(1,2))

#无参
func=lambda :"返回值" #直接返回"返回值"这三个字

#默认参数,多返回值
func1=lambda name,age=18:(name,age)#注意返回值是元组
print(func1("wuzi"))#输出('wuzi', 18)

使用示例,通过lambda结合三目运算符,比较大小,返回更大的值

csharp 复制代码
comp=lambda a,b: a if a>b else b
print(comp(1,2))#输出2

七 常用内置函数

sum()

求和

csharp 复制代码
print(sum((1,2))) #3 参数是一个可迭代对象

min() max()

求最小值或最大值

csharp 复制代码
print(min(1,2,3)) #输出1
print(min(-3,2,key=abs))#输出2 加上key=abs,就会先求绝对值再比较绝对值的大小

zip()

将两个迭代器内的元素,一 一对应,打包成元组,只打包最短的长度

zip返回的是zip对象,需要用迭代器遍历取值

zip对象是惰性迭代器,只能遍历一次

csharp 复制代码
li=[1,2,3,4]
tua=("s1","s2","s3")
print(type(zip(li,tua)))#<class 'zip'> zip函数返回的是一个zip对象
#读取整个zip对象可以用for循环
for i in zip(li,tua):
    print(i)#输出(1, 's1') (2, 's2') (3, 's3')
#或者转为list
print(list(zip(li,tua)))#输出[(1, 's1'), (2, 's2'), (3, 's3')]

map()

格式map(方法,可迭代对象) 可迭代对象里每个元素都会用指定的方法处理一遍

map返回的是map对象,需要用迭代器遍历取值

map对象是惰性迭代器,只能遍历一次

csharp 复制代码
li=[1,2,3]
def func(a):
    return a+1
mp = map(func,li)
print(type(mp))#输出<class 'map'>   返回值是map类型
for i in mp:
    print(i) #输出 2 3 4
li2 = list(mp)
print(li2)#输出[2, 3, 4]

reduce()

格式reduce(方法,可迭代对象) 方法必须有两个参数,将可迭代对象的前两个元素先用方法运算,结果保存,然后值和第三个元素运算,再保存,以此循环

csharp 复制代码
import  functools  #先导入包
from functools import reduce

li=[1,2,3]
def add(x,y):
    return x+y
res =reduce(add,li)#1+2=3 3+3=6
print(res)#输出6

八 拆包

拆包是指把可迭代对象里的元素直接取出来

方法1

csharp 复制代码
tua =(1,2,3,4)
a,b,c,d=tua  #变量的数量必须和元素数量一致,否则报错
print(b) #输出b

方法2

csharp 复制代码
tua =(1,2,3,4)
a,*b=tua  #*号可以获取剩下的所有元素 这里实际上是对剩下元素进行一个打包操作
print(b)#输出[2, 3, 4]

参数拆包

csharp 复制代码
def funa(a,*b):
    print(a)#1
    print(b)#[2,3,4]
arg=(1,2,3,4)
funa(*arg) #*号把元组arg拆包成 1 2 3 4,传给函数,函数里的*b再把 2 3 4 重新打包
相关推荐
SelectDB9 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
荣码17 小时前
GraphRAG:普通RAG只能回答"点"的问题,我踩了4个坑才搞懂
java·python
金銀銅鐵1 天前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li1 天前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
小九九的爸爸1 天前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
阿耶同学1 天前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
花酒锄作田2 天前
Pydantic校验配置文件
python
hboot2 天前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi3 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi3 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab