Python基础-函数,高阶函数

                                  Python基础-函数

 

1.函数的定义和函数的执行流程:

"""
函数学习
"""

print('程序开始')
a = 10 # 在内存中申请内存  内存名称就是a

# 定义函数
def sayHello(): # 函数的定义: 并不会执行函数,只是在内存中做了标识
    print('hello world')
    print('hello world')


# 调用函数
sayHello() # 根据标识 找到函数并执行 函数执行结束 调用才结束

print('程序结束')

函数使用:

# 定义具备打印佛祖镇楼图 功能函数
def printFoZu():
    print("                            _ooOoo_  ")
    print("                           o8888888o  ")
    print("                           88  .  88  ")
    print("                           (| -_- |)  ")
    print("                            O\\ = /O  ")
    print("                        ____/`---'\\____  ")
    print("                      .   ' \\| |// `.  ")
    print("                       / \\||| : |||// \\  ")
    print("                     / _||||| -:- |||||- \\  ")
    print("                       | | \\\\\\ - /// | |  ")
    print("                     | \\_| ''\\---/'' | |  ")
    print("                      \\ .-\\__ `-` ___/-. /  ")
    print("                   ___`. .' /--.--\\ `. . __  ")
    print("                ."" '< `.___\\_<|>_/___.' >'"".  ")
    print("               | | : `- \\`.;`\\ _ /`;.`/ - ` : | |  ")
    print("                 \\ \\ `-. \\_ __\\ /__ _/ .-` / /  ")
    print("         ======`-.____`-.___\\_____/___.-`____.-'======  ")
    print("                            `=---='  ")
    print("  ")
    print("         .............................................  ")
    print("                  佛祖镇楼                  BUG辟易  ")
    print("          佛曰:  ")
    print("                  写字楼里写字间,写字间里程序员;  ")
    print("                  程序人员写程序,又拿程序换酒钱。  ")
    print("                  酒醒只在网上坐,酒醉还来网下眠;  ")
    print("                  酒醉酒醒日复日,网上网下年复年。  ")
    print("                  但愿老死电脑间,不愿鞠躬老板前;  ")
    print("                  奔驰宝马贵者趣,公交自行程序员。  ")
    print("                  别人笑我忒疯癫,我笑自己命太贱;  ")
    print("                  不见满街漂亮妹,哪个归得程序员?")

# 调用函数
printFoZu()
printFoZu()
printFoZu()
printFoZu()
printFoZu()




 

函数的文档注释:

def sayHello1():
    '''
    这是给张曼玉打招呼方法
    :return:
    '''
    print('hello 张曼玉')

def sayHello2():
    '''
    这是给林青霞打招呼的方法
    :return:
    '''
    print('hello 林青霞')


# 调用林青霞     Ctrl+Q
sayHello1()
sayHello2()

函数的参数:


"""------------------ 一个参数的函数 ------------------"""
# def sayHello(name):
#     '''
#     这是给女神打招呼方法
#     :param name: 传递女神姓名
#     :return:
#     '''
#     print('hello %s'%name)
#
# # 调用函数
# sayHello('高圆圆')


"""------------------ 两个参数的函数 ------------------"""
# 定义函数,传递a和b,求a+b的和
def sum(a,b):
    '''
    这个函数是求两个数据的和
    :param a: 第一个数据
    :param b: 第二个数据
    :return:
    '''
    result = a+b
    print(result)

# 调用
sum(10,20)

函数参数练习:

"""
任意给出两个数字,可以打印最大的数字值
"""
a = 30
b = 20

# 定义函数 求两个数最大值
def myMax(m,n):
    '''
    求两个数最大值
    :param m: 第一个数
    :param n: 第二个数
    :return:
    '''
    if m>n:
        print('最大值',m)
    else:
        print('最大值',n)

# myMax(10,20)
myMax(a,b)

函数形参和实参:


a = 10
print('程序开始')
b = 20
def myMax(m,n):# 形参 函数定义时,并没有创建出形参  函数调用的时候才会将实参传递给形参 只要函数执行完成 形参就销毁了
    if m>n:
        print('最大值',m)
    else:
        print('最大值',n)

# myMax(10,20)
myMax(10,20) # 10 20 实参

# print(m)
print('程序结束')
print(a)
print(b)

函数形参作用域:

# 形参作用域在函数内部
# 形参会在函数执行结束之后就销毁
# 不同的函数中可以定义同名的形参
# 形参作用域:避免参数定义重名
def sayHello(name,a): # 形参
    print('hello %s'%name)

def func1(name):
    print(name)
    # print(a)

# print(name)
sayHello('张三')# 实参
func1('李四')
# a = 10
# a = 20

函数返回值:

"""
希望前面求最大值的函数能够将最大值返回
"""

"""
任意给出两个数字,可以打印最大的数字值
"""
a = 30
b = 20

# 定义函数 求两个数最大值
def myMax(m,n):
    '''
    求两个数最大值
    :param m: 第一个数
    :param n: 第二个数
    :return:返回最大值
    '''
    if m>n:
        return m
    else:
        return n

# myMax(10,20)
result = myMax(a,b)
print(result)

函数类型:

"""
函数名不能重名
"""
"""------------------ 无参无返回值函数 ------------------"""
def sayHello():
    print('hello')
"""------------------ 无参有返回值函数 ------------------"""
import random
def getTemp():
    return random.randint(0,100)
"""------------------ 有参无返回值函数 ------------------"""
def sayHello2(name):
    print('hello %s'%name)
"""------------------ 有参有返回值函数 ------------------"""
def sum(a,b):
    return a+b

# print(getTemp())
sayHello2('张曼玉')

函数练习:

# 求三个数和的函数
def sum(a,b,c):
    '''
    求三个数的和
    :param a: 第一个数
    :param b: 第二个数
    :param c: 第三个数
    :return:  返回int数据
    '''
    return a+b+c
    # print('hello')

# result = sum(10,20,30)
# print(result)

def func(a,b,c):
    '''
    求三个数平均值
    :param a:
    :param b:
    :param c:
    :return:
    '''
    return (a+b+c)/3


print(func(10, 20, 30))

函数的嵌套调用:

a = 10
print('程序开始')
def func1():
    print('func1开始')
    print('func1结束')


def func2():
    print('func2开始')
    func1()
    print('func2结束')


# 调用func2
func2()

print('程序结束')






"""
需求1
定义一个 print_line 函数能够打印 * 组成的 一条分隔线,长度50
需求2
定义一个函数能够打印 由任意字符组成 的分隔线,长度50
需求3
定义一个函数能够打印 任意长度 的分隔线
需求4
定义一个函数能够打印 5 行 的分隔线,分隔线要求符合需求 3


"""

import random
# 定义一个 print_line 函数能够打印 * 组成的 一条分隔线,长度50
# def print_line():
#     print('*'*50)
# print_line()

# 定义一个函数能够打印 由任意字符组成 的分隔线,长度50
# def print_line(str):
#     '''
#     打印任意字符组成的分隔线
#     :param str: 组成分割线的字符
#     :return: 无返回值
#     '''
#     print(str*50)

# print_line('-')

# 定义一个函数能够打印 任意长度 的分隔线
def print_line(str,length):
    '''
    打印任意字符组成的分隔线
    :param str: 组成分割线的字符
    :param length: 分割线的长度
    :return: 无返回值
    '''
    print(str*length)

# print_line('_',40)


# 定义一个函数能够打印 5 行 的分隔线,分隔线要求符合需求 3
def printFiveLine(strList):
    for index in range(5):
        # 随机获取字符
        index = random.randint(0,len(strList)-1)
        str = strList[index]
        print_line(str,random.randint(20,50))

printFiveLine(['*','_','@'])

局部变量和全局变量:

# 全局变量
m = 10
n = 20

print('程序开始')
def func(a):# 形参a
    # 局部变量

    # 变量生命周期:调用函数并且执行到定义局部变量代码时创建  函数执行结束就会销毁
    # 变量作用域:函数内部可以使用局部变量 超出函数不能使用
    # 如果形参名和局部变量名一致 在局部变量定义后使用的都是局部变量
    print(a)
    a = 10 # 局部变量
    print('hello world %d'%a)
    print('m是:',m)

def func1():
    b = 20
    # print(a)
    print('hello%d'%b)

# print(a)
func(30)
# func1()
# print('程序结束')

函数内修改全局变量:

"""
函数内部修改全局变量 需要在使用前加上global关键字
"""

# 定义全局变量
m = 10

def func():
    # 将m修改成20
    # 定义了局部变量m 值是30
    global m
    m = 30
    print('函数内部m=%d'%m)

# 函数调用前打印m
print('函数调用前m:%d'%m)
func()
# 函数调用后打印m
print('函数调用后m:%d'%m)


函数多返回值:

"""
需求:
需求:定义函数接收参数a和参数b,并返回a和b的和以及a和b的差

"""
# go

def cacl(a, b):
    '''
    求a+b以及a-b的结果
    :param a:
    :param b:
    :return:
    '''
    sum = a + b
    result = a-b
    return sum,result # 返回多个数据,把多个数据进行组包 变成元组返回出去

# result = cacl(10,20)
sum,result = cacl(10,20)
print(sum,result)

# open:
# success,file = open()

 

2.高阶函数

"""
需求:
1.定义一个求两个数和的函数
2.定义一个求两个数差的函数
3.定义一个函数既可以求和又可以求差

"""


# 1.定义一个求两个数和的函数
def sum(a, b):
    '''
    求两个数的和
    :param a:
    :param b:
    :return:
    '''
    return a + b


# 2.定义一个求两个数差的函数
def sub(a, b):
    return a - b

def div(a,b):
    return a/b

m = 10
n = 20


# print(sum(m, n))
# print(sub(m,n))
# 3.定义一个函数既可以求和又可以求差
# def cacl(a,b):
#     return a+b,a-b

# result1,result2 = cacl(m,n)
# print(result1,result2)
"""------------------ 高阶函数 ------------------"""
# 函数中有函数参数的函数称为高阶函数
# 数据  运算规则
def cacl(a, b, func):
    '''
    根据传递的计算规则 将两个数据处理完返回结果
    :param a:
    :param b:
    :param func: 计算规则,函数类型
    :return:
    '''
    # 调用func<=>sum
    return func(a, b)


# 调用cacl 求m和n的和
# cacl(m,n,sum) # 传递函数 只需要传递函数名
# result = cacl(m, n, sum)
# print(result)
# 通过cacl求m和n的差
# result = cacl(m,n,sub)
# print(result)

# 求m和n的商
# result = cacl(m,n,div)
# print(result)

"""------------------ 返回值为函数的高阶函数 ------------------"""
def func():
    return sum

result = func()
# print(result)
# 调用result
print(result(20, 30))

 

lambda表达式:

"""
需求:
1.定义一个求两个数和的函数
2.定义一个求两个数差的函数
3.定义一个函数既可以求和又可以求差

"""

m = 10
n = 20

def cacl(a, b, func):
    '''
    根据传递的计算规则 将两个数据处理完返回结果
    :param a:
    :param b:
    :param func: 计算规则,函数类型
    :return:
    '''
    # 调用func<=>sum
    return func(a, b)
"""------------------ lambda表达式:不要通过return返回数据 ------------------"""
# 第三个参数就可以通过lambda表达式传递
# result = cacl(m,n,lambda a,b:a+b)
# print(result)

"""------------------ 通过变量保存lambda表达式 ------------------"""
# func = lambda a,b:a+b
# print(func(20, 30))

"""------------------ lambda表达式其它写法 ------------------"""
# python的lambda表达式比较简单 只适用于替换函数体只有一行代码的函数
# python的lambda表达式  :后面只能有一行代码
def myMax(a,b):
    if a>b:
        return a
    else:
        return b

# 通过lambda表达式替换myMax
func = lambda a,b:a if a>b else b
result = func(10,20)
print(result)

 

sort函数:

"""
l = ['abd','ewetrwef','fered','qwszfgfsaffs']
元素按照长度从小到大排序
"""
# l = ['abd','qwszfgfsaffs','ewetrwef','fered']
#    'a'     'q'     'e'   'f'
#     a       e       f     q
# 默认排序方式 依次比较字符 比较出大小即可
# l.sort()
# print(l)

# [3  12  8  5]
# [3  5   8   12]
# def func(ele):
#     return len(ele)

# 元素按照长度从小到大排序
# def sort(key):
#     row = 0
#     while row < len(l) - 1:
#         col = 0
#         while col<len(l)-1-row:
#             # 当前元素:  l[col]
#             # 下一个元素:l[col+1]
#             # 如果下一个元素比当前元素小 交换
#             # if l[col]>l[col+1]:
#             if key(l[col])>key(l[col+1]):
#                 # 交换
#                 tmp = l[col]
#                 l[col]=l[col+1]
#                 l[col+1] = tmp
#
#             col += 1
#         row += 1
#
#     print(l)

# 使用高阶函数
# l.sort(key=func)
# print(l)

# l.sort(key=lambda ele:len(ele))
# print(l)

l = ['abd','qwszfgfsaffs','ewetrwef','fered']
# 列表按照最后一个元素进行排序
l.sort(key=lambda ele:ele[len(ele)-1])
print(l)

map:

"""
[1, 2, 3, 4, 5, 6, 7, 8, 9]
将列表中元素变成它的平方

"""
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 将列表中元素变成它的平方
# index = 0
# while index < len(l):
#     l[index] = l[index] ** 2
#     index += 1
#
# print(l)

def func(ele):
    return ele**2
# map
# map 两个参数:第一个参数:函数  第二个参数:容器
# 遍历容器每一个元素 传递给函数  处理完之后返回
# result = map(func,l)
# print(list(result))

result = map(lambda ele:ele**2,l)
print(list(result))

filter:

"""
l = ['林青霞','张曼玉','胡慧中','高圆圆','张曼玉']
       false   true    false   false   true
找到列表中所有的张曼玉
"""
l = ['张三','林青霞','张曼玉','胡慧中','高圆圆','张曼玉']

def func(ele):
    return ele=='张曼玉'
# 两个参数
# 第一个参数:function  参数接收元素  返回True或False
# result = filter(func,l)
# print(list(result))

# result = filter(lambda ele:ele=='张曼玉',l)
# print(list(result))

# 找到列表中所有姓张的
result = filter(lambda ele:ele[0]=='张',l)
print(list(result))

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值