pytnon全栈开发 day9 九、函数

一、函数

1、函数:可以完成特定功能的代码块,函数就是存放代码块的容器

2、定义函数的语法:

函数四部分:(函数执行的本质:执行函数体,得到函数返回值)

①函数名

②函数体

③返回值

④参数

用def关键词来声明函数

def  函数名(参数们)
      函数体
      return返回值

例如:

def   fn(money):
       print('你付了%s元钱' % money)
       print('函数的一行代码')
       print('函数的二行代码')
       return '冰红茶'
# print(fn, id(fn))     # fn直接打印,只能看到函数存放代码的地址
       
# fn(10)
msg = fn(10)
print(msg)

# 函数的返回值也称之为函数值,就是函数执行结束后的结果
# 可以用变量接受 | 可以直接打印 | 可以直接使用

3、如何使用函数(函数一定要先定义在调用)

函数名:拿到函数的地址
函数名(): 拿到函数的地址,并执行函数中存放的代码块(函数体) *****
函数名(参数):执行函数并传入参数

函数名(): 执行完毕后,会得到函数的返回值,返回值就跟普通变量一样,可以直接打印、使用、运算

def fn(num):
    print("传入的num值:%s" % num)
    return '收到了'

res = fn(10)

# 控制台会打印:传入的num值:10
# res的值为:'收到了'

4、函数的分类

①按函数体进行分类

# 计算
# 1、空函数:项目之初,知道项目有哪些功能,但还没有明确功能体,可以用pass进行函数体填充

def computed():
    pass

# 2、非空函数:用函数体
def add_num(n1, n2):
   
     ''' 函数的注释
    :param n1: 第一个数
    :param n2: 第二个数
    :return: 两个数之和
    '''
    return n1 + n2



computed()

res = add_num(10, 20)           # 结果为 30
print(res)

a = 50
b = 100
print(add_num(a, b))              # 结果为 150

②按参数列表进行分类

# 1、无参函数:函数体运行不需要外界提供参数
def print_msg():
    print("欢迎大家来到老男孩教育,奉献你的余生!!!")


print_msg()



# 2、有参函数:函数体运行需要外界提供参数
def print_school_msg(p1, p2):
    print("欢迎%s和%s领导莅临老男孩教育,敞开你的腰包!!!" % (p1, p2))


p1 = input("输入一号领导名:")
p2 = input("输入二号领导名:")
print_school_msg(p1, p2)

③按返回值进行分类:return是用来结束函数的

# 空返回
1. 没有return的函数
2. 空return


# 值返回
3. return一个值
4. return多个值




# 空返回

def fn1():
    print('fn1 run!!!')

res = fn1()
print('没有return关键字的返回值:%s' % res)  # None

def fn2():
    print('fn2 run!!!')
    return
    return None

res = fn2()
print('空return关键字的返回值:%s' % res)  # None

# 无return函数与空return函数的区别
# 空return:可以根据具体情况主动退出函数(像break结束循环一样)
def fn3(msg):
    print('fn3 第一行逻辑')

    # msg信息不正常:'' | None
    if msg == '' or msg is None:
        # 结束函数
        return

    print('msg信息正常: %s' % msg)

msg = input('msg: ')
fn3(msg)





# 值返回
# 一个值的返回
def add_num(n1, n2):
    return n1 + n2
print(add_num(10, 15))

def computed(n1, n2):
    # 返回四则运算的结果
    r1 = n1 + n2
    r2 = n1 - n2
    r3 = n1 / n2
    r4 = n1 * n2
    return [r1, r2, r3, r4]

a, b, c, d = computed(50, 25)
print(a, b, c, d)


# 多个值的返回: 本质就是返回装有多个值的元组
def computed_sup(n1, n2):
    # 返回四则运算的结果
    r1 = n1 + n2
    r2 = n1 - n2
    r3 = n1 // n2
    r4 = n1 ** n2
    return r1, r2, r3, r4

a, b, c, d = computed_sup(50, 25)
print(a, b, c, d)

res = computed_sup(50, 25)  # 得到的是装有所有结果的元组
print(res)

5、函数的嵌套调用

①定义:在一个函数内调用另一个函数。在解释过程中,不执行函数体,在函数被调用时,函数体才被执行

def fn1():
    print('fn1 run')
    fn2()

def fn2():
    print('fn2 run')
    fn3()

def fn3():
    print('fn3 run')

         # 注:在fn1中调用了fn2,所以调用fn1的逻辑应该在fn2定义之后
fn1()

②案例

# 案例:用函数实现获取两个数的最大值
def max_2(n1, n2):
    if n1 > n2:
        return n1
    return n2

print(max_2(200, 30))

# 获取三个数的最大值
def max_3(n1, n2, n3):
    if n1 > n2 and n1 > n3:
        return n1
    if n2 > n1 and n2 > n3:
        return n2
    return n3
def max_3(n1, n2, n3):
    m2 = max_2(n1, n2)
    return max_2(m2, n3)

print(max_3(300, 30, 30))

# 四个数
def max_4(n1, n2, n3, n4):
    m2 = max_2(n1, n2)
    return max_3(m2, n3, n4)
print(max_4(10,30,20,0))

6、指定文件名的文件复制

def copy_file(source, target):
    '''
    :param source: 被复制的文件
    :param target: 复制得到的文件
    :return:
    '''
    with open(source, 'rb') as r, open(target, 'wb') as w:
        for line in r:
            w.write(line)

copy_file('cmd.txt', 'aaa.txt')
copy_file('temp.txt', 'ttt.txt')

猜你喜欢

转载自www.cnblogs.com/zhangguosheng1121/p/10616078.html