05函数
函数参数
- 必备参数 默认参数
# x为必备参数 y为默认参数
def num(x, y = 10):
print(x + y)
num(5)
num(5,20)
- 元组不定长
#可以不传值,值可多个
def nums(*args):
print(args)
nums([50,60],{'NAME':18})
- 字典不定长
#可以不传值,值可多个
def numb(**kwargs):
print(kwargs)
numb(a = 8, k = '你好') #注意:传值以键等于值的方式传
- 各种参数结合
def number(x, y = 10, *args, **kwargs):
print(x)
print(y)
print(args)
print(kwargs)
number(5,20,30,40,[1,2],[3,4],a = 50,b = '六十')
# 字典不定长后不允许再传入单个的值
函数返回
def num(x,y) -> str: #帮助阅读,告知函数返回值的类型
print(x)
print(y)
return '结果'
a = num(5,6)
函数拆包
def fuc(**kwargs):
print(kwargs)
a = {'a': 6, 'b': 7}
fuc(**a)
函数作用域
函数里面不可以修改不可变对象:数值、str、tuple
li = [5,6]
a = 10
def func():
a = a+1 #会报错,不能修改全局变量a
li.append(7) #不会报错,可以修改
print(a)
print(li)
使用global声明全局变量
a = 10 #a为全局变量
def func():
global a #global声明全局变量
a = a+1
print(a)
func()
print(a) #a的值改变
使用nonlocal声明局部变量
def func():
x = 100 #x为局部变量
def number():
nonlocal x #声明外部嵌套的函数变量,不能用global
x = x+1
print(x)
number()
func()
闭包
#外层函数返回内层函数体,使得外部能够使用内部的函数
def yingxiong():
lv = 1
def add(): #加血
nonlocal lv
lv += 1
return lv
def down(): #减血
nonlocal lv
lv -= 1
return lv
return add, down
a,b = yingxiong()
a()
b()
匿名函数
匿名函数 lambda,x表示参数,自带return
s = lambda x: x+1
print(s(5))
过滤器 filter
li = [i for i in range(0,101,2)]
def funx(x):
if x<50:
return x
f = filter(funx,li) #将列表li进行过滤,以函数funx作为过滤标准,过滤结果用f接收
print(list(f)) #f接收的是列表数据,显示数据时需要转成列表
用匿名函数帮助过滤
li = [i for i in range(0,101,2)]
f = filter(lambda x:x<50,li)
print(list(f))
统一计算 map
li = [i for i in range(1,11)]
def funz(x):
return x*10
m = map(funz,li)
print(list(m))
#使用匿名函数
n = map(lambda x:x*10,li)
print(list(n))
练习
- 一个列表由四个元组组成,每个元组都是四个数字组成,现在要求对这个列表排序,排序规则是按照每个元组的第二个元素排序
li = [(2,3,4,5),(8,3,2,9),(3,2,5,6),(6,7,3,9)]
li.sort(key = lambda x:x[1])
print(li)
- 实现isPrime()函数,参数是整数,如果整数是质数,返回True,否则返回False
def isPrime(number):
if str(number.isdigit()) == False:
return False
elif number <= 1:
return False
else:
for i in range(2,number):
if number % i == 0:
return False
else:
return True
- 利用递归函数,实现一个阶乘函数,支持正数和负数的阶乘
def func(x):
if x == 0:
return 1
elif x > 0:
return x * func(x-1)
else:
return x * func(x+1)
- 定义一个函数,输入字符串,如果字符串是顺序的则返回‘UP’,如果是倒叙的则返回‘DOWN’, 如果是乱序的则返回False
def func():
str1 = input('请输入字符串')
str1 = list(str1)
if sorted(str1) == str1:
return 'UP'
elif sorted(str1,reverse = True) == str1:
return 'DOWN'
else:
return False