文章目录
-
- [一 定义与调用](#一 定义与调用)
- [二 返回值](#二 返回值)
- [三 参数](#三 参数)
- [四 嵌套声明](#四 嵌套声明)
- [五 函数内部修改全局变量 在函数内部声明全局变量](#五 函数内部修改全局变量 在函数内部声明全局变量)
- [六 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 重新打包