【蟒蛇】4、函数-学Python黑马程序员个人笔记

参考视频

黑马程序员python教程,8天python从入门到精通

函数的基础体验

# 函数:是组织好的,可重复使用的,用来实现特定功能的代码段
# 需求,统计字符串的长度,不使用内置函数len()

# 繁琐的方法
# str1 = 'itheima'
# str2 = 'itcast'
# str3 = 'python'
# count1 = 0
# for i in str1:
#     count1 += 1
# print(f'字符串{str1}的长度是:{count1}')
#
# count2 = 0
# for i in str2:
#     count2 += 1
# print(f'字符串{str2}的长度是:{count2}')
#
# count3 = 0
# for i in str3:
#     count3 += 1
# print(f'字符串{str3}的长度是:{count3}')

# 可以使用函数,来优化这个过程
str1 = 'itheima'
str2 = 'itcast'
str3 = 'python'
def my_len(data):
    count = 0
    for i in data:
        count += 1

    print(f'字符串{data}的长度是{count}')

my_len(str1)
my_len(str2)
my_len(str3)

"""
字符串itheima的长度是7
字符串itcast的长度是6
字符串python的长度是6
"""

函数基础定义案例

# 定义函数
def check():
    # 编写函数体输出信息
    print('欢迎来到黑马程序员!\n请出示您的健康码以及72小时核酸证明!')


# 调用函数
check()
"""
欢迎来到黑马程序员!
请出示您的健康码以及72小时核酸证明!
"""

函数的基础定义语法

# 函数的定义
"""
def 函数名(传入参数):
    函数体
    return 返回值
"""
# 函数的调用
# 函数名(参数)
"""
函数使用步骤:
先定义函数
后调用函数
"""
"""
注意事项:
参数不需要,可以省略  
返回值不需要,可以省略
"""
# 定义一个函数,输出相关信息


def say_hi():
    print('hi 我是黑马程序员。')


# 调用函数,让定义函数开始工作
say_hi()
"""
hi 我是黑马程序员。
"""

"""
以下来源菜鸟教程
"""
# 你可以定义一个由自己想要功能的函数,以下是简单的规则:
# 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
# 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
# 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
# 函数内容以冒号 : 起始,并且缩进。
# return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

# return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。
# 不带参数值的 return 语句返回 None。之前的例子都没有示范如何返回数值,
# 以下实例演示了 return 语句的用法:


# 可写函数说明
def sum_t(arg1, arg2):
    # 返回2个参数的和."
    total_1 = arg1 + arg2
    print("函数内 : ", total_1)
    return total_1


# 调用sum函数
total_1 = sum_t(10, 20)
print("函数外 : ", total_1)
"""
函数内 :  30
函数外 :  30
"""


def sum_t(arg1, arg2):
    # 返回2个参数的和."
    total_2 = arg1 + arg2
    print("函数内 : ", total_2)


# 调用sum函数
total_2 = sum_t(10, 20)
print("函数外 : ", total_2)
"""
函数内 :  30
函数外 :  None
"""

# return返回值
# 在Python中,return 是用来结束函数执行并返回值的关键字。当函数执行到 return 语句时,函数会立即停止执行,
# 并将紧跟在 return 后面的值作为函数的结果返回给调用者。这个返回值可以被存储到一个变量中,或者在程序中进行其他操作。
# 例如,在下面这个简单的函数中,return 语句返回了参数 x 的平方值:


def square(x):
    return x * x


result = square(5)
print(result)  # 输出 25
# 在这个例子中,square 函数接受一个参数 x,计算 x 的平方值并返回,
# 然后在调用函数时,将返回值存储到 result 变量中,并打印出来。

函数的传入参数

# 基于函数的定义语法:
# def 函数名(传入参数)
#     函数体
#     return返回值
# 可以有如下函数定义:
# def add(x,y):
#     result= (x + y)
#     print(f'{x} + {y}的结果是:{result}')
# 实现了,每次计算的是x+y,而非固定的1+2
# x+y的值,可以在调用函数的时候指定。

# 定义2数相加的函数,通过参数接收被计算的2个数字
def add(x, y):
    # x和y是形式参数
    result = x + y
    print(f'{x} + {y}的计算结果是:{result}')


# 调用函数,传入被计算的2个数字
add(1, 2)
# 1和2是实际参数


# 函数的参数数量不限,使用都好分隔开
# 传入参数的时候,要和形式参数一一对应,都好隔开
def add(x, y, z):
    # x和y是形式参数
    result = x + y + z
    print(f'{x} + {y} + {z}的计算结果是:{result}')


# 调用函数,传入被计算的2个数字
add(1, 2, 3)

函数的传入参数案例

# 定义函数
def check(temp):
    # 编写函数体输出信息
    print('欢迎来到黑马程序员!请出示您的健康码以及72小时核酸证明,并配合测量体温!')
    if temp <= 37.5:
        print(f'体温测量中,您的体温是:{temp}度,体温正常请进!')
    else:
        print(f'体温测量中,您的体温是:{temp}度,需要隔离!')


# 调用函数,传入实际参数
check(37.3)

函数返回值的定义语法

# 定义一个函数,完成2数相加功能
"""
def 函数(参数。。。):
    函数体
    return 返回值


变量 = 函数(参数)
"""


def add(a, b):
    result = a + b
    # 通过返回值,将相加的结果返回给调用者
    return result
    # 返回结果后还想输出一句话(无输出),函数体在遇到return后就结束了,
    # 所以写在return后的代码不会执行
    print('我完成了')


# 在类或函数定义之后应该有两个空白行
# 函数的返回值,可以通过变量取接收
r = add(5, 6)
print(r)

函数返回值-None类型

"""
演示特殊字面量:None
类型是NoneType,用于表示空的无意义的
"""
# 无return语句的函数返回值


def say_hi():
    print('你好呀')


result =  say_hi()
print(f'无返回值函数,返回的内容是:{result}')
print(f'无返回值函数,返回的内容类型是:{type(result)}')


# 主动返回None的函数
def say_hi2():
    print('你好呀')
    return None


result =  say_hi2()
print(f'无返回值函数,返回的内容是:{result}')
print(f'无返回值函数,返回的内容类型是:{type(result)}')

# 用在if判断上,在if判断中,None等同于False
# 一般用于在函数中主动返回None,配合if判断做相关处理
# None用于if判断


def check_age(age):
    if age > 18:
        return 'SUCCESS'
    else:
        return None


result = check_age(16)
if not result:
    # 进入if表示result是None值,也就是False
    print('未成年,不可进入。')

# 由于在Python中, None 被视为假(False)的值,而其他非空的对象被视为真(True)的值,
# 你可以直接在 if 语句中使用 if not result,这样会更加简洁。因为如果 result
# 是 None,它将被视为假,触发 if 语句中的逻辑。
# 这样的代码会清晰地表达逻辑:如果 result 是 None,则说明未满 18 岁,进入相应的逻辑。

# None用于声明无初始内容的变量,定义变量,但暂时不需要变量有具体值,可以用None代替
name = None

"""
你好呀
无返回值函数,返回的内容是:None
无返回值函数,返回的内容类型是:<class 'NoneType'>
你好呀
无返回值函数,返回的内容是:None
无返回值函数,返回的内容类型是:<class 'NoneType'>
未成年,不可进入。
"""

函数的说明文档

# 定义函数,进行文档说明
def add(x, y):
    """
    add函数可以接收2个参数,进行2数相加的功能
    :param x:形参x表示相加的其中一个数字
    :param y:形参y表示相加的另一个数字
    :return:返回值是2数相加的结果
    """
    result = x + y
    print(f'2数相加的结果是:{result}')
    return result


# 鼠标悬停能看到说明文档
add(5, 6)

函数的嵌套调用

"""
 演示嵌套调用函数
 在一个函数中,调用另外一个函数
 函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余内容
"""
# 定义数func_b


def func_b():
    print('---2---')
# 定义函数func_a,并在内部调用func_b


def func_a():
    print('---1---')

    # 嵌套调用func_b
    func_b()
    print('---3---')
# 调用函数fun_a


func_a()

"""
结果
---1---
---2---
---3---
"""

变量(局部、全部)在函数中的作用域

"""
演示在函数使用的时候,定义的变量作用域
"""

# 演示局部变量,作用范围在函数内部,在函数外部无法使用


def test_a():
    num = 100
    print(num)


test_a()
print(num)
# 出了函数体,局部变量就无法使用了

# 演示全局变量(在函数体内外都能生效的变量)
num = 200


def test_a():
    print(f'test_a:{num}')


def test_b():
    print(f'test_b:{num}')


test_a()
test_b()
print(num)
"""
test_a:200
test_b:200
200
"""

# 在函数内修改全局变量
num = 200


def test_a():
    print(f'test_a:{num}')


def test_b():
    num = 500  # 局部变量
    print(f'test_b:{num}')


test_a()
test_b()
print(num)
"""
test_a:200
test_b:500
200
"""

# global关键字,在函数内声明变量为全局变量
num = 200


def test_a():
    print(f'test_a:{num}')


def test_b():
    global num  # 设置内部定义的变量为全局变量
    num = 500  # 局部变量
    print(f'test_b:{num}')


test_a()
test_b()
print(num)
"""
test_a:200
test_b:500
500
"""

函数综合案例

"""
定义一个全局变量:money,用来记录银行卡余额(默认5000000)
定义一个全局变量:name,用来记录客户姓名(启动程序时输入)
定义如下的函数:
    *查询余额函数
    *存款函数
    *取款函数
    *主菜单函数
要求:
程序启动后要求输入客户姓名
查询余额、存款、取款后都会返回主菜单
存款、取款后,都应显示一下当前余额
客户选择退出或输入错误,程序会退出,否则一直运行
"""
# 定义全局变量money name
money = 5000000
# 要求客户输入姓名
name = input('请输入您的姓名:')
# 定义查询函数


def query(show_header):
    if show_header:
        print('-----------查询余额------------')
    print(f'{name},您好,您的余额剩余:{money}元。')


# 定义存款函数
def saving():
    global money  # 设置money在函数内部定义为全局变量
    money += num
    print('-----------存款------------')
    print(f'{name},您好,您存款{num}元成功。')

    # 调用query函数查询余额
    query(False)


def get_money():
    global money  # 设置money在函数内部定义为全局变量
    money -= num
    print('-----------取款------------')
    print(f'{name},您好,您取款{num}元成功。')


def main():
    print('-----------主菜单------------')
    print(f'{name},您好,欢迎来到黑马银行ATM,请选择操作:。')
    print('查询余额\t[输入1]')
    print('存款\t\t[输入2]')
    print('取款\t\t[输入3]')  # 通过\t制表符对齐输出(不够可加\t)
    print('退出\t\t[输入4]')
    return input('请输入您的选择:')


# 设置无限循环,确保程序不退出
while True:
    keyboard_input = main()
    if keyboard_input == '1':
        query(True)
        continue  # 通过conti继续下一次循环,一进来就是回到了主菜单
    elif keyboard_input == '2':
        num = int(input('您想要存多少钱?请输入:'))
        saving()
        continue
    elif keyboard_input == '3':
        num = int(input('您想要取多少钱?请输入:'))
        get_money()
        continue
    else:
        print('程序退出')
        break  # 通过break退出

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3415226167@qq.com
资源 相册