美文网首页
Python函数

Python函数

作者: C_Z_Q_ | 来源:发表于2019-11-08 19:23 被阅读0次

1.函数 function

格式:

1 def 函数名(参数列表):
2     函数体

注: 函数执行的顺序,调用的时候才会被执行
举例:

#7个长度的字符串,替换第三个字符
str1 = 'abcdefg'
str1 = str1[:2] + 'z' + str1[3:]
print(str1)

str1 = '1234567'
str1 = str1[:2] + '8' + str1[3:]
print(str1)
  • 改进封装成函数
def set_str(msg, index, char):
    """
    :param msg:目标字符串
    :param index:替换字符串的索引位置
    :param char:要替换的字符
    :return:返回替换完成的字符串
    """
    if isinstance(char, int):
        char = str(char)
    return msg[:index] + char + msg[index + 1:]
res = set_str('abcdefghigklmn', 1, 4)
print(res)

1.1函数的形参和实参

(1)形式参数
(2)实际调动的参数
区别:
1)形参是虚拟的,不占内存空间,形参变量只有在被调用的时候才分配内存空间
2)实参是一个变量,占用内存空
3)数据是单向传送的,实参传给形参

举例:求矩形面积

def area (whidth,length):
    return whidth*length
w = 4
l = 6
print(area(whidth=4, length=6))
print(area(4, 6))

1.2 函数的参数

1.2.1 必须参数:

以正确的顺序传入函数,调用的时候必须和声明的时候保持一致

def f(name,age):
    print('我叫%s,我今年%d岁'% (name,age))
f('张珊',18)#我叫张珊,我今年18岁
#f(18,'张珊')#错误的
#关键字参数,关键字参数允许函数调用时参数的顺序与声明不一致,因为python解释器能够用参数名匹配数据
f(age=19, name='张珊')#我叫张珊,我今年19岁
1.2.2 默认参数(缺省参数)

在调用函数时,缺省的参数如果没有被传入,则会使用默认值

def f(name,age, sex = 'male'):
    print('我叫%s,我今年%d岁'% (name,age))
    print('性别%s'% (sex))
f(age = 19, name='lisi')#我叫lisi,我今年19岁,性别male
f(age=17, name= 'zzzz',sex= 'female')#我叫zzzz,我今年17岁,性别female
1.2.3 不定长参数

有时候可能需要一个函数能处理比当初声明时更多的参数,这些参数都叫不定长参数
格式:

def funcname([formal_args,]*args,**kwargs):
    """
    文档字符串
    """
    pass
加了星号(*)的变量args会存放所有未命名的变量参数,args为元组
加了星星号(**)的变量kwargs会存放命名参数,即形如ket=value形式的参数,kwargs为字典

举例1:

def func(a, b,*args, **kwargs):
    """
    可变参数演示例
    :param a:formal_args
    :param b:formal_args
    :param args:未命名的变量参数 args为元组
    :param kwargs: 命名参数kwargs为字典
    :return:
    """
    print('a=', a)
    print('b = ', b)
    print('args = ', args)
    print('kwargs = ')
    for k, v in kwargs.items():
        print(k, '---->', v)
func(1, 2, 3, 4, 5, m = 6, n = 7, p = 8)
"""
a= 1
b =  2
args =  (3, 4, 5)
kwargs =
m ----> 6
n ----> 7
p ----> 8
"""

举例2:

def func(a, b,*args, **kwargs):
    """
    可变参数演示例
    :param a:formal_args
    :param b:formal_args
    :param args:未命名的变量参数 args为元组
    :param kwargs: 命名参数kwargs为字典
    :return:
    """
    print('a=', a)
    print('b = ', b)
    print('args = ', args)
    print('kwargs = ')
    for k, v in kwargs.items():
        print(k, '---->', v)
c = (3, 4, 5)
d = {'m': 6, 'n': 7, 'p': 8}
#func(1, 2, *c, **d)
func(1,2,c,d)#注意不加星号传入
'''
a= 1
b =  2
args =  ((3, 4, 5), {'m': 6, 'n': 7, 'p': 8})
'''

1.3 函数的返回值

如果想要获取函数的执行结果 ,我们一般要编写函数的返回值,使用return可以把结果返回

  • return 作用: return停止这个函数的执行,返回指定的结果
    python中的return可以返回多个结果,解释器会将其组装成一个元组作为一个整体结果输出
    如果未指定return ,那么这个函数的返回值是None值

举例:给定一个list,将列表中所有数字进行累加,并且返回他们的累加和以及平均数

def sum_and_ave(list):
    '''

    :param list: 给定一个list
    :return: 返回他们的累加和以及平均数
    '''
    sum = 0
    count = 0
    for x in list:
        if isinstance(x,int) or isinstance(x,float):
           #进行累加
            sum += x
           #计数
            count += 1
    ave = sum/count
    return sum, ave
li = [20, 15, 2.8, 'a', 35, 5.9, -1.8]
print(sum_and_ave(li))
print('累加和', sum_and_ave(li)[0])
print('平均数', sum_and_ave(li)[1])
'''
(76.9, 12.816666666666668)
累加和 76.9
平均数 12.816666666666668
'''

1.4 高阶函数

满足 输入:接受一个或多个函数 ,输出:一个函数
格式:

def add(x, y, f):
    return f(x) + f(y)
传入的是函数名

举例:

res = add(3, -6, abs)#abs绝对值
print(res)


def method():
    x = 2
    def double(n):
        return n*x
    return double
d = method()
res2 = d(10)
print(res2)

1.5系统高阶函数

1.5.1 map

map(func, iteranle) 该函数使用函数作为自己的一个参数,它可以将iterable(可迭代对象)中的数据依次传给func函数处理最后把处理的结果作为新的可迭代对象返回

举例:

def power(x):
    return x*x
res = map(power, [1, 2, 3, 4, 5])
print(list(res))#[1, 4, 9, 16, 25]

#使用map函数[1, 2, 3, 4, 5, 6, 7, 8, 9]--->['1', '2', '3', '4', '5', '6', '7', '8', '9']

res2 = map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(res2))
1.5.2 reduce()

reduce(func,sequence) 函数,累计操作
func函数必须接受两个参数,reduce会把func的运行结果做一个参数,然后从sequence中依次取出一个数据当做另一个参数

  • reduce 函数的具体运行
    第一次运算时从迭代对象中取出两个参数1x2
    第二次运算时将第一次运行的结果2作为第一个参数传入,再取出一个数3 作为第二参数传入 2x3=6
    同理6x4=24
    ...
    最后返回最后一次处理结果

举例1:

from functools import reduce
def mul(x, y):
    return x*y
li = [1, 2, 3, 4, 5]
res = reduce(mul,li)
print(res)
#使用lambda改写
print(reduce(lambda x, y: x*y, li))

举例2:把序列[1, 3, 5, 7, 9] 变成13579

def fn(x, y):
    return x*10+y
print(reduce(fn,[1, 3, 5, 7, 9]))

举例3:
(1)写出 str 转化为 int 的函数
(2)编写程序 fn 进行累加移位
(3)编写一个函数将char 转化成num
(4)'13579'---->13579
(5)使用map 和reduce函数结合编写str 转化成int 的函数

digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
sum = 0
def str2int(s):
    def fn(x, y):
        return x * 10 + y

    def char2num(s):
        digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return digits[s]
    return reduce(fn, map(char2num, s))

print(str2int('3463213141'))
  • 采用lambda表达式的形式
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def str2int(s):
    return reduce(lambda x, y: x*10+y, map(lambda c: digits[c], s))
print(str2int('164252451542'))
1.5.3 filter()

filter(function,iterable) 根据函数func来过滤iterable,将iterable中的数据传入func中,
如果函数返回True,则保留数据 否则不保留

li = [i for i in range(1, 15)]
#将li所有的奇数筛选出来
print(list(filter(lambda x :x % 2 == 1, li)))
1.5.4 sorted()

对数据进行排序,并且返回一个新的对象,原对象不变,key参数可以用来中鼎排序的规则,key接受的值是一个函数
reverse参数是指定排序的顺序(升序还是降序),默认是升序

举例1:

from random import randint
li2 = [randint(-10, 10) for _ in range(5)]
print('排序前', li2)
res = sorted(li2)
print('排序后', li2)
print('返回值', res)
li3 = [-7, 1, 3, -10, 9]
res = sorted(li3, key=abs)
print(res)#[1, 3, -7, 9, -10]

chars = ['lee', 'james', 'kobe', 'Antetokounmpo', 'jordan']
#对chars进行排序  按照字母的长度  降序
chars = sorted(chars, key=len, reverse=True)
print(chars)#['Antetokounmpo', 'jordan', 'james', 'kobe', 'lee']
chars = sorted(chars, key=lambda x:len(x),reverse=True)
print(chars)#['Antetokounmpo', 'jordan', 'james', 'kobe', 'lee']

举例2:复合列表的

grade_list = [
    {'name': '张三', 'grade': '90'},
    {'name': '李四', 'grade': '30'},
    {'name': '王五', 'grade': '70'},
    {'name': '马六', 'grade': '52'},
]
#按照成绩排序
grade_list = sorted(grade_list,key=lambda d: d['grade'])
print(grade_list)
stu_info = [
    ('wunan', 22), ('wyangjiu', 39), ('hanlei', 17), ('czq', 90),
]
#按照年龄降序排序
stu_info = sorted(stu_info,key=lambda x: x[1], reverse=True)
print(stu_info)
1.6 匿名函数(lambda表达式):不需要显示指定名字的函数
  • 格式:
    函数名 = lambda 参数1,参数2...参数n :返回表达式
    lambda 的参数可以是无限个 但是返回表达式只能有一个

优点:1.不用担心函数名冲突,2.减少代码量 ,3.优雅

举例:主要目的联合其他函数使用

def mul(x,y):
    return x*y
mul2 = lambda x,y:x*y
print(mul2(3,4))
x , y   如果x>y 返回x*y   else x<y  返回x/y
def cheng_chu(x,y):
    if x>y:
        return x*y
    else:
        return x/y
print(cheng_chu(2,6))
print(cheng_chu(9, 3))
1.6.1 回顾三目运算符

三目运算格式:满足条件时返回的值 if 满足的条件 else 不满足条件时返回的值

store = []
if len(store) == 0:
    store = '当当自营'
else:
    store = store[0]
print(store)
#改成三目运算
print('当当自营' if len(store) == 0 else store[0])

举例2:x , y 如果x>y 返回x*y else x<y 返回x/y

res = lambda x, y: x*y if x > y else x/y
print(res(2, 5))

相关文章

  • Python - 2017/01/28-函数

    调用python内置函数 函数名(参数) 即可调用python内置函数 help(函数名) 返回python对于函...

  • Python函数式介绍一 - 高阶函数

    Python函数式介绍一 - 高阶函数Python函数式介绍二 - 链式调用 最近为了给朋友推广Python函数式...

  • Python高阶函数学习笔记

    python中的高阶函数是指能够接收函数作为参数的函数 python中map()函数map()是 Python 内...

  • Python学习笔记1

    Python注释 Python变量 Python运算符 Python输入输出 输入函数 输出函数(3.x) ...

  • Python:内置函数

    python的内置函数,匿名函数 内置函数 内置函数就是python给你提供的,拿来直接用的函数,比如print,...

  • 二级Python----Python的内置函数及标准库(DAY

    Python的内置函数 嵌入到主调函数中的函数称为内置函数,又称内嵌函数。 python的内置函数(68个) Py...

  • python3 range() 函数和 xrange() 函数

    python3 range 函数 python3 取消了 xrange() 函数,并且和 range() 函数合并...

  • 7、函数

    1、Python之什么是函数 2、Python之调用函数 Python内置了很多有用的函数,我们可以直接调用。 要...

  • Python入门

    Python3教程 安装Python 第一个Python程序 Python基础 函数 高级特性 函数式编程 模块 ...

  • Python函数详解

    函数是Python里组织代码的最小单元,Python函数包含以下几个部分: 定义函数 调用函数 参数 函数的返回值...

网友评论

      本文标题:Python函数

      本文链接:https://www.haomeiwen.com/subject/cuuwbctx.html