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 重新打包
相关推荐
不负岁月无痕1 小时前
C++ 模板核心内容与高频面试题汇总
java·开发语言·c++
Kobebryant-Manba1 小时前
学习文本处理
开发语言·python
m0_617493941 小时前
PaddleOCR报错:OneDnnContext does not have the input Filter 解决方案汇总
python
李可以量化1 小时前
量化迅投 QMT vs 聚宽 (JoinQuant)全面分析
python·量化·qmt·ptrade·聚宽
福大大架构师每日一题1 小时前
2026年6月TIOBE编程语言排行榜,Go语言排名第13,Rust语言排名12。关于Rust已进入平台期的报道似乎为时过早。
开发语言·golang·rust
无限进步_1 小时前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome
旅僧1 小时前
运行UMI镜像
python
拙慕JULY1 小时前
小程序返回 base64 文件报错
开发语言·javascript·小程序
ellenwan20261 小时前
期货跨期价差程序化怎么做:天勤 SP 合约与腿比例核对
python·区块链