zoukankan      html  css  js  c++  java
  • 函数

    函数的介绍

    # python中的函数
    # 函数的定义
    # 打印一个佛祖镇楼 -> 一个功能点的解释
    def print_info():
        print("测试")
        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("                  不见满街漂亮妹,哪个归得程序员?")
    a = 10
    if a == 10:
        # print_info()
        pass  # 占位符,防止语法错误
    
    # num = 1
    # if num == 1:
        # print_info()
    
    # my_str = "hello"
    # if my_str == "hello":
        # print_info()
    
    # 函数 - > python

    函数的定义和调用

    # 使用函数分为两步
    '''第一步:定义函数'''
    # def -> define 定义
    # 格式:def 函数名():
    #           执行的代码01
    #           执行的代码02
    #           执行的代码03...
    def my_func():
        print("hello python")
    '''第二步:函数的调用(执行)'''
    # 格式:函数名()
    my_func()

    函数的参数(一)

    # 利用函数来完成
    # 函数的定义
    def my_func1():
        num1 = 1
        num2 = 2    # 定义两个变量
        ret = num1 +num2
        print(ret)  # 打印
    my_func1()      # 函数调用
    
    def my_func2():
        num1 = 90
        num2 = 9    # 定义两个变量
        ret = num1 +num2
        print(ret)  # 打印
    my_func2()
    
    # 合二为一
    # 定义一个有参数的函数
    # 形参:形式参数
    # 格式:def 函数名(形参1,形参2,...)
    def my_func3(a, b):
        ret = a + b  # 求和
        print(ret)   # 打印
    
    # 执行一个有参数的函数
    # 实参:实际参数
    # 格式: 函数名(实参1,实参2,...)
    my_func3(15, 6)  # 执行一个有参数的函数
    num1 = 15
    num2 = 6
    # 在执行函数的时候就好比是a=num1,b=num2
    my_func3(num1, num2)
    
    # 通过一个函数 打印一句话 无论输入什么字符串,最终格式:你好xx
    def my_func(name):
        print("你好%s" % name)
        print("你好%s" % name)
        print("你好%s" % name)
    
    my_func("小红")

    函数的返回值

    # 等号右侧的值返回给了a
    # 叫a 记录这个20的值
    # a = 10 + 10
    # print(a)
    
    # python中学习了一个内置函数len(object)
    # 内含子函数如何实现
    
    my_str = "hello"    # 定义一个字符串
    def my_len(object):
        ret = 0
        for i in object:  # 猜测
            ret += 1
    
        # 如果有一个return数值,成为这个函数的返回值
        return ret
    
    my_1 = my_len(my_str)
    print("自定义的:", my_1)  # 输出:None  ->返回值 空值类型
    
    # my_len(my_str)  # 输出:5
    
    l = len(my_str)
    print(l)  # 输出:1
    
    # 定义一个函数
    def add2num(a,b):
        ret = a + b
        return ret
    num = add2num(10,11)
    print(num)
    
    # 定义一个变量,记录圆周率
    pi = 3.1415926
    # 我想在执行一个函数的时候,给我圆周率
    def my_pi():
        return 3.1415926
    ret =my_pi()
    print(ret)

    函数的类型(4种)

    '''
    函数根据有没有参数,有没有返回值,可以相互组合,一共有4种
    1、无参数,无返回值
    2、无参数,有返回值
    3、有参数,无返回值
    4、有参数,有返回值'''
    
    # 1、无参数,无返回值
    def my_print():
        print("你好")
        print("python")
    # 执行函数
    my_print()
    
    # 2、无参数,有返回值
    def my_pi():
        return 3.1415926
    print(my_pi())
    
    # 3、有参数,无返回值
    def print_info(name):
        print("你好%s" % name)
    print_info("马老师")       # 输出:你好马老师
    
    def print_info(name):
        print("你好%s" % name)
    name_list = ['高老师','小明','小红','张三']
    for new_name in name_list:
        # print(new_name)
        print_info(new_name)
    
    # 4、有参数,有返回值
    def my_finc(a,b):
        # ret = a + b
        # return ret
        return a + b  # 优化简写
    result = my_finc(10,5)
    print(result)

    函数的嵌套和使用

    # def my_func1():
    #     print("my_func1开始")
    #     print("my_func1结束")
    # print("开始测试")
    # my_func1()
    # print("测试")
    '''  《输出》
    开始测试
    my_func1开始
    my_func1结束
    测试'''
    
    def my_func1():
        print("my_func1开始")
        print("my_func1结束")
    def my_func2():
        print("my_func2开始")
        my_func1()
        print("my_func2结束")
    my_func2()
    print("测试")
    '''《输出》
    my_func2开始
    my_func1开始
    my_func1结束
    my_func2结束
    测试
    '''

    函数的应用:打印图形和数字计算

    # 1、写一个函数打印一条横线
    def print_one_line():
        print("-"*10)
    # print_one_line()          # 调用函数
    
    # 2、打印自定义行数的横线
    def print_lines(num):
        for i in range(num):     # for 循环
            print_one_line()      # 执行函数pring_one_line
    print_lines(5)                  # 最终执行print_lines
    
    # 3、写一个函数求三个数的和
    def add3num(a, b, c):
        return a + b + c
    # ret = add3num(10, 20, 30)
    # print(ret)
    
    # 4、写一个函数求三个数的平均值
    def average3num(num1, num2, num3):
        # 求num1+num2+num3
        # ret = num1 + num2 + num3
        # 通过求和函数完成
        ret = add3num(num1, num2, num3)
        # 把和除以3
        return ret / 3
    result = average3num(10, 20, 30)
    print(result)

    调用函数:位置参数

    # 定义一个函数
    def my_func(a, b):
        print(a + b)
    
    # 函数调用  -> 位置参数调用函数
    # 使用当前位置参数调用函数需要注意当前实参的位置
    # 实参的位置和当前形参的位置要一一对应
    # 如果实参传入的少一个,会报错
    # TypeError: my_func() missing 1 required positional argument: 'b'
    my_func(10, 11)

    调用函数:关键字函数

    # 定义一个函数
    # python是一个弱类型
    def my_print(name, age):
        print("我的名字:%s" % name)
        print("我的年龄:%d" % age)
    # 调用 ->位置参数
    my_print("小明", 20)
    
    # 关键字参数
    # 调用函数的时候使用的是函数的形参名
    my_print(name="老王", age=32)
    # my_print(age=32, name="老王")  #不在乎顺序
    
    # 调用函数的时候使用了位置和关键字参数混合
    my_print("小马", age=30)
    # 如果混合使用,需要让位置参数在前,关键字参数在后面
    # my_print(age=30, "小马" )  # 会报错
    # 如果某个参数使用了关键字参数,后面的都需要使用关键字参数

    函数参数(二):缺省参数

    # 定义一个函数 (名字 学号 年龄)
    def my_print(name, no, age):
        print("名字:%s" % name)
        print("学号:%s" % no)
        print("年龄:%d" % age)
        print("="*10)
    # 小明 001 20
    # 小红 002 20
    # 小张 003 20
    my_print("小明", "001", 20)
    my_print("小红", "002", 20)
    my_print("小张", "003", 20)
    
    # 或者下面写法
    # 定义一个有缺省参数的函数
    #缺省函数:给形参设置了一个默认值
    def my_print(name, no, age=20):
        print("名字:%s" % name)
        print("学号:%s" % no)
        print("年龄:%d" % age)
        print("="*10)
    # 在调用函数的时候,如果有默认值,可以根据业务需求不传递
    my_print("小明", "001")
    my_print("小红", "002")
    my_print("小张", "003")
    
    # 假如这个my_print的函数打印全班人的信息,有80%是20岁,但是20%年龄是25-30岁之间
    # 如果执行函数时提供实参那么函数的形参使用实参
    # 如果执行函数的时候没有提供实参那么形参讲使用默认值(缺省参数)
    my_print("老王", "010" ,30)
    
    # 在定义函数的时候,某个形参使用了缺省参数,那么后面的形参都需要用缺省参数
    def my_print(name, age=20, no="001"):
        print("名字:%s" % name)
        print("学号:%s" % no)
        print("年龄:%d" % age)
        print("="*10)

    函数的返回值:多个return

    # 定义一个函数,当执行函数的时候,传入一个分数,可以返回一个字符串(优 良 中 差)
    # 包含多个return
    def my_func(score):
        # 对分数进行判断
        if score >= 90:
            return ""
        elif score >= 80:
            return ""
        elif score >= 60:
            return ""
        elif score >= 0:
            return ""
        print("测试")  # 它不会执行,因为在第11行已经执行了return
    ret = my_func(89)
    print(ret)        # 输出:良
    
    def my_func1():
        print("开始")
        # 只要函数中执行了return就提前结束函数的执行,而且return后面的代码将不再执行
        return "3.14"
        print("开始1")
        return  "20"
        print("结束")
    # my_func1()
    ret = my_func1()
    print(ret)
    print("测试")
    '''《输出》
    开始
    3.14
    测试
    '''

    python中return使用总结

    # return总结
    
    # <1>作为函数的返回值
    # <2>执行的额函数提前结束(为了提高性能)
    # 包含多个return
    def my_func(score):
        if score < 0:
            print("您传入的分数有误!!!")
            return   # 函数的执行提前结束
        print("测试")
        # 对分数进行判断
        if score >= 90:
            return ""
        elif score >= 80:
            return ""
        elif score >= 60:
            return ""
        elif score >= 0:
            return ""
    
    # 需求:如果调用函数的人传入的分数为0,那么就认为传入的错误,告知函数的调用着
    my_func(-10)  # 您传入的分数有误!!!

    函数的返回值:函数返回多个数据

    # 需求:传入一个名字 年龄
    # 例如 小明 22
    # 通过调用函数后,得到两个字符串 姓名:小明 年龄:22
    def deal_name_age(name, age):
        # 处理后 姓名:小明 年龄:22
        new_name = "姓名:%s" % name
        new_age = "年龄:%d" % age
        print(new_name)
        print(new_age)
        return
    deal_name_age("小明", 22)
    
    # 假如是列表
    def deal_name_age(name, age):
        # 处理后 姓名:小红 年龄:23
        new_name = "姓名:%s" % name
        new_age = "年龄:%d" % age
        # print(new_name)
        # print(new_age)
        return[new_name, new_age]
    # 变量为列表
    ret = deal_name_age("小红", 23)
    print(type(ret))
    print(ret[0])
    print(ret[1])
    
    # 假如字典
    def deal_name_age(name, age):
        # 处理后 姓名:小章 年龄:24
        new_name = "姓名:%s" % name
        new_age = "年龄:%d" % age
        return{"name": new_name, "age": new_age}
    my_dict = deal_name_age("小章",24)
    print(my_dict["name"])
    print(my_dict["age"])
    
    # 假如元祖
    def deal_name_age(name, age):
        # 处理后 姓名:小章 年龄:24
        new_name = "姓名:%s" % name
        new_age = "年龄:%d" % age
        # 如果在函数内部使用return,返回值1 返回值2,...默认就是元祖类型
        return new_name, new_age
    my_tuple = deal_name_age("小李",25)
    print(type(my_tuple))
    print(my_tuple[0])
    print(my_tuple[1])

    拆包

    # 拆包
    # 定义一个列表
    # my_list = [1, 3.14, "hello", True]
    # 可以获取列表中元素的值,但是读性不强
    # print(my_list[1])
    # print(my_list[2])
    
    # 拆包
    # num, pi, my_str, my_bool = my_list
    # print(pi)
    # print(my_bool)
    # num, pi, my_str, my_bool = [1, 3.14, "hello", True]
    
    # 定义一个元祖
    my_tuple = (1, 3.14, "hello", True)
    # um, pi, my_str, my_bool = my_tuple
    # print(pi)
    
    # 定义一个字典
    my_dict = {"name":"老王","age":19}
    ret1, ret2 = my_dict
    # 得到的是key 字典是无序的
    print(ret1, ret2)
    
    # 一次定义多个变量
    num1 = 10
    num2 = 20
    num3 = 30
    num4 = 40
    # 称之为比较python自夸
    # 变量名和值是一一对应的
    num1, num2, num3, num4 = 10, 20, 30, 40
    print(num1)
    
    # 思考:下面这个可以拆包吗?
    def deal_name_age(name, age):
        # 处理后 姓名:小章 年龄:24
        new_name = "姓名:%s" % name
        new_age = "年龄:%d" % age
        # 如果在函数内部使用return,返回值1 返回值2,...默认就是元祖类型
        return new_name, new_age
    # 拆包:
    my_name, my_age = deal_name_age("小明",20)
    print(my_name, my_age)

    交换变量的值

    # 第1种方式
    a = 4
    b = 5
    c = 0
    c = a  # c = 4
    a = b  # a = 5
    b = c  # b = 4
    # 结果
    print(a)
    print(b)
    
    # 第2种方式
    a = 4
    b = 5
    a = a+b  # a=9, b=5
    b = a-b  # a=9, b=4
    a = a-b  # a=5, b=4
    print(a)
    print(b)
    
    # # 第3种方式
    a, b = 4, 5  # a = 4,b = 5
    # 在执行27行时,看的是滴22行的代码
    # a = b
    # b = a
    # 不是等价的
    a, b = b, a  # a = 5,b = 4
    print(a)
    print(b)

    函数的文档说明

    # 假设使用len函数
    help(len)
    # 函数文档说明->加的文档说明是python
    # len(obj, /)
    #     Return the number of items in a container.
    
    # 很多的时候需要程序员自己创建
    
    # 自定义一个函数
    # def add2num(num1, num2):
    #     return num1 + num2
    # # 如果一个自定义函数没有我问的那个说明,默认是help会打印函数上面的注释
    # help(add2num)   # 输出:    # 自定义一个函数
    
    # 自定义一个函数
    def add2num(num1, num2):
        """          # 6个双引号,按回车键,自动生成函数的文档说明
                     # 这个函数是用来计算两个数的和的
        :param num1: # 数字1
        :param num2: # 数字2
        :return:     # 返回值是两个数字相加
        """
        return num1 + num2
    help(add2num)
    # 错误的
    # add2num([1, 2], (1, 3))
    '''
    01- 可以快速读懂自己的代码
    02- 便于工作的交接
    习惯和公司的要求
    '''

    局部变量

    # 定义一个函数
    def my_func1():
        # 定义一个局部变量
        # 局部变量:定义在函数内部的变量
        # 局部的作用域(使用范围)在函数的内部,函数的外部无法使用
        num = 10
        print(num)
    # 调用函数
    my_func1()
    
    # 再定义一个函数
    def my_func2():
        # 定义一个局部变量
        num = 10
        print(num)
    # 在函数内部定义的局部变量名可以和其他函数的局部变量名相同,是不冲突的
    my_func2()

    全局变量

    # 全局变量:定义在函数的外部的变量
    # 全局变量 或者变量(作用域实在整个模块内使用)
    # num1 = 10
    # 分别在两个函数内部使用了全局变量
    # def my_func1():
    #     print("my_func1", num1)
    #
    # def my_func2():
    #     print("my_func2", num1)
    #
    # print("函数外面", num1)
    # my_func1()
    # my_func2()
    
    # 全局变量
    # num2 = 10
    # 分别在两个函数内部使用了全局变量
    # def my_func3():
    #     # 其实是定义了一个和全局变量名相同的局部变量
    #     # 在函数内部如果使用变量,它先从函数内部找,如果有直接使用
    #     # 如果函数内部没有找到,会到函数外面找(全局变量)
    #     # 如果还是没有找到,就报错
    #     num2 = 20
    #     print("my_func3", num2)
    #
    # my_func3()
    # print("外面", num2)
    
    # 全局变量
    num3 = 10
    # 分别在两个函数内部使用了全局变量
    def my_func3():
        # 标识这两个函数内部不是定义一个局部变量,其实是对全局变量的进行修改
        global num3
        # 对全局变量进行修改
        num3 = 20
        print("my_func3", num3)
    
    my_func3()
    print("外面", num3)

    匿名函数

    # 匿名函数(藏名字的函数)
    # 对函数的简写
    # 无参数无返回值的函数
    # def my_print():
    #     print("hello python")
    # my_print()
    
    # 表达式的定义
    # f = lambda : print("hello python")
    # 执行
    # f()
    # 等价于
    # (lambda : print("hello python"))()
    
    # 无参数有返回值的函数
    # def my_pi():
    #     return 3.14
    # print(my_pi())
    # f = lambda : 3.14
    # print(f())
    
    # 有参数的无返回值的函数
    # def my_prnt(name):
    #     print("你好%s" % name)
    # print("姜子牙")
    # f = lambda name:print("你好%s"%name)
    # # 执行
    # f("姜子牙")
    
    # 有参数有返回值的函数
    def add2num(a, b):
        return a + b
    f = lambda a, b :a + b
    ret = f(10, 20)
    print(f(10, 20))

    列表推导式

    # 定义一个列表
    # my_list = {1, 2, 3, 4, 5}
    # 定义一而空列表
    # my_list = []
    # for i in range(1, 101):
    #     my_list.append(i)
    # print(my_list)
    
    # 列表推导式
    # 使用列表推导式快速创建一个列表
    my_list = [i for i in range(1, 30)]
    print(my_list)
    
    # 思考:得到一个有30个哈哈的列表
    my_list = ["哈哈" for i in range(30)]
    print(my_list)
    
    # 定义一个列表,保存数据[1,50]之间的偶数
    my_list = []
    for i in range(1,51):
        if i % 2 == 0:
            my_list.append(i)
    print(my_list)
    # 列表推导式
    my_list = [i for i in range(1,51) if i % 2 == 0]
    print(my_list)

    # def my_func1():
    # print("my_func1开始")
    # print("my_func1结束")
    # print("开始测试")
    # my_func1()
    # print("测试")
    ''' 《输出》
    开始测试
    my_func1开始
    my_func1结束
    测试'''

    def my_func1():
    print("my_func1开始")
    print("my_func1结束")
    def my_func2():
    print("my_func2开始")
    my_func1()
    print("my_func2结束")
    my_func2()
    print("测试")
    '''《输出》
    my_func2开始
    my_func1开始
    my_func1结束
    my_func2结束
    测试
    '''
  • 相关阅读:
    gcc帮助资料搜找
    由去掉word文档中的一个GoLand复制后残留的底纹说起
    记录一些有趣网站的链接
    linux cpu调度算法发展过程
    啥叫内核线程-搜集
    了解了下啥叫cfs/bfs
    c++重载运算符两种形式的选择
    概念-乐观锁、悲观锁
    go 移位操作的简单自测-移33或65位
    Shell脚本:(delayexec)Cygwin下调用schtasks创建Windows任务计划,实现延迟或定时执行某一命令
  • 原文地址:https://www.cnblogs.com/yaoteng/p/10920608.html
Copyright © 2011-2022 走看看