欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

函数

程序员文章站 2022-07-12 10:02:08
...

九、函数

  1. 为什么使用函数
  • 最大化代码重用
  • 最小化代码冗余
  • 将过程分解
  1. 函数定义
    def 函数名(参数1,参数2,...)
  2. 函数调用
    函数名(实际参数)
  3. 变量作用域
    Built-in method 全局
    全局作用于 global关键字
    Encolsure nonlocal
    Local
  4. 参数
  • 传递
    不可变对象,传递的是变量的副本,不影响原始的值。
    可变对象,传递的是地址引用,可能改变原始的值。
  • 匹配
    位置匹配
    关键字匹配
    默认值匹配
    *args 任意参数量(tuple)

参数以逗号分隔,进行传递

def avg(*c):
    return sum(c)/len(c)
a = avg(1,2,3)
print(a)# 2

参数以元祖形式给出时,需要用单星号解包

def avg(*c):
    return sum(c)/len(c)
c = (3,4,5)
a = avg(*c)#解包
print(a)

** kwargs 任意个位置参数(字典)
直接以位置参数的形式给出

def display(**kwargs):
    print(kwargs)
display(name='Jack',age = 10)

以字典形式给出时,需要用双星号解包

d={'name': 'Jack', 'age': 10,'gender':'M'}
display(**d)

函数托管,传递的是函数名。
函数
解决多分支的问题。

def hello_cn(name):
    print('{},你好!'.format(name))
def hello_en():
    print('{}, Hello!'.format(name))

def hello(action,name):
    action(name)
langunge = input('请输入语言:')
name = '小红'
if langunge == 'cn':
    action = hello_cn
else:
    action = hello_en
hello(action,name)
请输入语言:cn
小红,你好!

传递的是函数名,无括号,加括号后就会执行函数。

  1. lambda表达式
  • 定义:lambda 参数1,参数2,...: 函数体 可以无参数,也可以有返回
  • 无return关键字
    eg: lambda name:print(name)
  • 调用:命名(参数)
    函数
  1. 高级工具
  • map(函数名,可迭代对象)#映射函数
    将可迭代对象中的元素逐个放入函数中处理,得到返回值
    返回值是map对象,可迭代,通过list函数转成列表
    返回值的个数,与参数可迭代对象中的参数个数相同

列表中每个元素+5。

l = list(range(6))
# 1. for
result1 = []
for i in l:
    result1.append(i+5)
# 2. 列表推导式
result2 = [i+5 for i in l]
# 3. map
f = lambda x:x+5
result3 = list(map(f,l))
print('原始列表',l)
print('for: ',result1)
print('列表表达式: ',result2)
print('map + lambda: ',result3)
原始列表 [0, 1, 2, 3, 4, 5]
for:  [5, 6, 7, 8, 9, 10]
列表表达式:  [5, 6, 7, 8, 9, 10]
map + lambda:  [5, 6, 7, 8, 9, 10]

列表表达式 – 推导的速度最快,底层是C实现

  • filter(函数名,可迭代对象) #过滤函数
    将可迭代对象中的元素逐个放入函数中处理,如果处理后为真,则返回可迭代对象中的相应的元素
    返回的可迭代对象元素的个数,是参数可迭代对象的一个子集。

选出列表中的偶数。

l = list(range(6))
# 1. for
result1 = []
for i in l:
    if i%2 ==0:
        result1.append(i)
# 2. 列表推导式
result2 = [i for i in l if i%2 ==0]
# 3. map
f = lambda x:x%2==0
result3 = list(filter(f,l))
print('原始列表',l)
print('for: ',result1)
print('列表表达式: ',result2)
print('map + lambda: ',result3)
原始列表 [0, 1, 2, 3, 4, 5]
for:  [0, 2, 4]
列表表达式:  [0, 2, 4]
map + lambda:  [0, 2, 4]

map(f,l) l中的元素,经过f函数后,返回值为真,则保留这个元素,否则从列表中删掉