20220608 函数进阶学习总结

20220608 函数进阶学习总结

一·返回值

1.返回值 - 从函数内部传递到函数外部的数据

1)确定函数的返回值 - 怎么将函数内部的数据传递出去
执行函数体的时候遇到return,return后面的值就是函数的返回值。(需要将哪个数据从函数内部传递到函数外部,就将哪个数据放在return的后面)
2)怎么获取函数返回值
获取函数调用表达式的值,就是获取函数的返回值。(每一个函数调用函数表达式都有结果,结果就是这个函数的返回值)。
函数返回的值能做的事情,调用表达式都可以做。
函数调用表达式 - 调用函数的语句。
3)什么时候需要函数返回值
如果实现函数的功能产生了新的数据,就将新的数据作为返回值返回(而不是在函数内部打印这个数据)

二·return的作用

1.return - 函数体中的关键字

1)确定函数返回值
2)提前结束函数 - 在执行函数体的时候,什么时候遇到return,函数什么时候结束。

def func1():
    return 100
def func2():
    return      #return None

func1()
func2()


def func3():
    print('a')
    print('hello sister!')
    for x in range(3):
        if x == 1:
            return 100
    print('d')


func3()
y = func3()
print(y)

三·变量的作用

1.变量的作用域 - 变量定义后可以使用的范围

根据变量作用域的不同,可以将变量分为全局变量和局部变量两种。

2.全局变量和局部变量

1)全局变量
python中没有定义在函数中或者类中的变量就是全局变量
全局变量的作用域:是从定义开始到程序结束
全局变量默认情况下保存在全局栈区间(全局栈区间在程序结束后才会自动释放)

2)局部变量
定义在函数中的变量是局部变量(形参在)
每次调用函数的时候都会自动为这个函数创建一个临时栈区间,这个函数中产生的所有数据,默认情况下都是保存在临时栈区间中的。
当函数调用的时候,这个临时栈区间会被自动释放(里面的数据都会被自动销毁)

#x和a是全局变量
a = 100

for x in range(3):
    b = 200

print('函数外面:', a, x, b)

def func1():
    print('函数外面:',a, x, b)

func1()

# c 和 d是局部变量:
def func2(c):
    d = 300
    print('函数里面', c, d)

func2(220)

# print('函数外面', c)#报错!,未被定义
# print('函数外面', d)#报错!,未被定义

3.global的用法

用法1:如果想要在函数中修改一个全局变量的值,就可以在函数中变量使用前用global对变量进行说明
用法2:在函数中定义全局变量,也可以使用global

m = 100

def func3():
    # 在函数里面修改全局变量的值,不会修改成功,而是定义一个新的局部变量
    m = 299
    print('函数里面的m:',m)

    global n
    n = 299
    print('函数里面的n:',n)

    global t
    t = 300
    print('函数里面的t',t)

func3()

print('函数外面的m:',m)
print('函数外面的t:',t)
print('函数外面的n:',n)

四·参数

1.位置参数和关键字参数

根据实参提供方式的不同,将实参分为位置参数和关键字参数两种
1)位置参数:以’数据1,数据2,数据3,…'的形式存在,让实参对应的数据和营参对应的变量位置上一一对应
2)关键字参数:以’参数名1 = 数据1, 参数名2 = 数据2, 参数名3 = 数据3,…'的形式存在
注意:多个关键字参数可以随意交换位置,他不会影响形参和实参的对应关系。
3)混用:调用函数的时候,位置参数和关键字参数可以一起使用,但是位置参数必须放在关键字参数的前面

def func1(x, y, z):
    print(f'x:{x}, y:{y}, z:{z}')
func1(100,200,300)
func1(200,100,300)
func1(x = 100, y = 200, z = 300)
func1(y = 200, x = 100, z = 300)
func1(100, z = 300 ,y =200)
func1(100, y =200, z = 300)
# func1(100, y =200, 300) #报错,位置参数必须在关键字参数的前面

2.参数默认值的问题

定义函数的时候,可以以’变量名=值’的形式,给形参赋默认值,已经默认值的参数,在调用函数的时候,可以不用传参

定义函数的时候,可以有的参数有默认有的参数没有默认值,但是没有默认的参数必须在有默认值的参数前面

def fun2(x = 10, y = 20, z = 30):
    print(f'x:{x}, y:{y}, z:{z}')

fun2()  #x:10, y:20, z:30
fun2(100) #x:100, y:20, z:30
fun2(100, 200) #x:100, y:200, z:30
fun2(100, 200, 300) #x:100, y:200, z:300
fun2(z = 500) #x:10, y:20, z:500

def func3(x, y, z = 3):
    print(f'x:{x}, y:{y}, z:{z}')

def func4(x, y = 2, z = 3):
    print(f'x:{x}, y:{y}, z:{z}')

# def func5(x, y = 2, z):
#     print(f'x:{x}, y:{y}, z:{z}')     #报错

3.参数类型说明

没有默认值的参数 - 形参名:类型名
有默认值的参数,默认值的类型就是对应的参数类型

def func6(str1 : str, str = ''):
    pass

def func6(str1 : str, str = '') -> int:#提前告诉我们这个函数的返回值是一个整数。
    pass

4.不定长参数

1)带的不定长参数:定义函数的时候在某个形参的前面加,那么这个参数就变成了一个不定长参数,一个不定长参数可以接受多个形参
本质:带一个*的不定长参数的本质就是一个元组,它接收到的所有的实参就是这个元组种的元素。
注意:*对应的不定长传参

案例1:定义一个函数,计算多个数的和

# sum2(19, 27, 79, 2, 67)
def sum2(sum):
    pass

sum2(1)
# sum2(1, 2) #报错

def sum3(*num):
    print('num:',num)
sum3()
sum3(10)
sum3(10, 20)
sum3(10, 20, 30)

def func(x, *y):
    print(f'x:{x},y:{y}')

func(100)
func(10, 12)
func(10, 12, 30)
# 如果一个定长的参数放在一个不定长参数的后面,那么这个定长参数必须用关键字参数传参
def funcv(*x, y):
    print(f'x:{x},y:{y}')

funcv(y = 10)
funcv(10, 29, 3, y = 300)
#单独的*后面的参数必须用关键字参数传参
def funcvv(x,* ,y):
    print(f'x:{x},y:{y}')

funcvv(10, y = 0)
funcvv(x = 1, y = 111)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Denis_1412

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

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

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

打赏作者

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

抵扣说明:

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

余额充值