2022.10.09 周日

2022.10.09 周日

函数
1.函数的参数
  • 位置参数 ——根据调用函数的时候实参的提供方法不同来分类的
    • 位置参数:以;‘数据1,数据2,数据3…‘形式存在,通过位置来和形参一一对应
    • 关键字参数:数据1,数据2,形参3 = 数据3,……‘形式存在(交换关键字参数的顺序不影响结果)

注意 位置参数和关键字可以一起使用,但是位置参数必须放在关键字参数前面

​ 不管以什么样的形式传参,都必须保证每个参数都有值

  • 关键字参数
2.参数默认值

在定义函数的时候,可以以 ‘形参=数据’ 的方式给参数赋默认值;

调用函数的时候有默认值的参数可以不用传参

注意 定义函数的时候如果有的参数有默认值有的没有,没有默认值的参数必须在有默认值参数的前面

3.参数类型说明 ——可以让形参在函数体中使用的时候有相关的提示
def func1(a: list, b = 'abc')
	pass
func1()   # 会提示a是列表,b是字符串
  • 没有默认值的参数直接在参数名后加 ’ :类型名‘
  • 有默认值的参数默认值的类型就是说明的类型
  • 补充:通过类型注释对变量进行类型说明
list1 = [
    {'a': 10, 'b': 20},
    {'a': 100, 'b': 'abc'}
]
c = list1[-1]['b']     # type: str
4.不定长参数(了解) ——参数个数不确定
1.带*的不定长参数:在定义函数的时候在某个参数前加 * ,就可以让这个参数同时接受多个实参
def func2(name,age,*score):
    pass
func2('小明',18,89)
func2('小明',18,89,80,72,61)  ->89,80,72,61为给score的传递的参数

带 * 的不定长参数的本质是一个元祖,它接收到的所有的实参会成为这个元祖的元素

带 * 的不定长参数只能用位置参数传参

带 * 的不定长参数前面的定长参数也只能用位置参数

带 * 的不定长参数后面的定长参数只能使用关键字参数传参

def func3(*nums):
	pass
func3(10,20,30,564,28)
def func4(x, y, *nums):
    pass
func4(10,20,30,56,54)  ->
def func5(*nums, x, y):
    pass
func5(51,21,x = 10, y = 20)
def func6(a, * , b)
	pass
func6()

形参列表中如果单独出现一个 * ,它的目的只是想要在调用这个函数的时候 * 后面的参数必须使用关键字参数,* 前面的参数必须使用位置参数

2.带**的不定长参数 ——定义函数的时候在某个参数前加 * *,就可以让这个参数同时接收多个实参(只能是关键字参数)
def fun7(**x):
    pass
func7()
func7(a = 10)
func7(a = 10,b = 20, c = 30)
# *args,**kwargs存在的目的是为了让这个函数在调用的时候可以足够灵活(既可以使用不定个数位置参数,也可以使用不定个数关键字参数,位置参数和关键字参数还可以一起使用)
def func8(*args,**kwargs):
    pass
func8(10,20)
func8(k = 100, t = 400)
func8(10,20,a = 10, b = 20, c = 30)

带 ** 的不定长参数的本质是一个字典,它接收到的所有的关键字参数会成为这个字典的元素

5.函数的返回值

初学者使用返回值的建议:只要实现函数的功能

1.什么是返回值——就是从函数内部传递到函数外部的数据,每个函数只能传一个数据到函数外部
  • 在函数内部怎么确定函数返回值

在函数体实现函数功能的时候,可以在任何需要的地方(一般在最后)通过return关键字,将需要传递到函数外部的数据作为返回值返回

return使用方法: return 需要返回的数据

注意

return除了可以返回数据,还会提前结束函数(执行函数体的时候只要遇到return整个函数直接结束)

如果执行函数体的时候没有遇到return,这个函数的返回值就是None

# 案例:定义函数求任意两个数的和
def sum2(num1, num2):
    return num1 + num2
# 案例:定义函数求任意两个数的和以及乘积
def sum3(num1, num2)
	return num1 + num2, num1 * num2   # 不能使用两次return,否则没意义
  • 在函数外部怎么使用函数返回值

使用函数调用表达式的值就是使用函数的返回值(函数调用表达式有结果,这个结果就是这次调用函数的时候获得的返回值)

返回值能做的事情,函数调用表达式都可以做

6.变量作用域

根据变量作用域(可适用范围)不同,可以将变量分为全局变量和局部变量两种

  • 全局变量 ——没有定义在函数或者类中的变量

    全局变量的作用域是从定义开始到程序结束

  • 局部变量 ——定义在函数中的变量

    局部变量的作用域是从定义开始到函数结束(形参是局部变量)

    # m和n都是局部变量
    def func1(m):
        n = 100
        print(f'在函数里面使用m和n:{m},{n}')
    func1(3)
    print(f'在函数外面使用m和n: {m},{n}')    # 报错
    
  • 关键字global

    如果想要在函数里面定义一个全局变量或者修改一个全局变量的值,需要在函数中使用这个变量前加global进行说明

def func2():
    num = 20
    print(f'函数内部:{num}')
    global name
    name = '小明'
func2()
print(f'函数外部:{num}')    # num在外部不能用
print(f'函数外部:{name}')   # name在外部可以使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值